0

我是 Matlab 的新手,这次我想为它的图像处理创建一个函数。首先,我从网上下载了一张图片。然后我将它命名为“map.jpg”,并复制到我的工作区。稍后,我创建一个M_files并将代码输入到文件中。例如:

function y=mean_data(gray)
s=size(gray);
sum=0;
for i=1:s(1)
    for j=1:s(2)
        sum=sum+gray(i,j);
    end
end
y=sum/(s(1)*s(2));

最后,差异发生了:

如果我以这种方式调用函数:

I=imread('map.jpg');
J=rgb2gray(I);
mean=mean_data(double(J))

结果会好的。

但是,如果我以这种方式调用:

I=imread('map.jpg');
J=rgb2gray(I);
mean=mean_data(J)

结果将为零。

那么为什么结果如此不同呢?谢谢你帮助我!!!

4

1 回答 1

0

这是因为读取的数据的默认输出格式imread
uint8- 每 R/G/B 8 位。使用 8 位,你不能得到任何
高于 255 的整数。看看:

>> uint8(250) + uint8(5)
ans =
255

>> uint8(250) + uint8(6)
ans =
255  

那么,在您的功能划分期间,会发生这种情况:

>> uint8(255) / 12345
ans =
0 

但是,当您使用时double(),您将数据的表示更改
为 64 位浮点 - 表示大
数字的空间更大。

您可以使用 matlab 的函数而不是使用循环函数mean
- 它适用于 uint8 格式:

>> mean(uint8([255, 231]))
ans =
243  

所以你可以使用:

mean_dat = mean(mean(J));
% it is also not a good idea to name a variable 'mean'
% if you are going to use the mean function so I renamed  
% your variable to mean_dat
于 2013-09-12T13:11:53.990 回答