我是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)
结果将为零。
那为什么结果如此不同?谢谢你的帮助!
答案 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