为什么结果如此不同

时间:2013-09-12 01:45:08

标签: matlab-figure

我是Matlab的新手,这次我想为它的图像处理创建一个函数。 首先,我从Internet下载一张图片。然后我将其命名为“map.jpg”,并将其复制到我的workspace.latter,我创建了一个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)

结果将为零。

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

1 个答案:

答案 0 :(得分: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