Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用rgb2gray的情况下在matlab中将RGB图像转换为灰度_Matlab - Fatal编程技术网

如何在不使用rgb2gray的情况下在matlab中将RGB图像转换为灰度

如何在不使用rgb2gray的情况下在matlab中将RGB图像转换为灰度,matlab,Matlab,我目前正在使用代码: i = imread('/usr/share/icons/matlab.png'); for k=1:1:m for l=1:1:n %a(k,l)=m*n; a(k,l) = (.299*i(k,l,1))+(.587*i(k,l,2))+(.114*i(k,l,3)); end end imshow(a); 它只显示一个白色屏幕。另外,新生成的尺寸是nxmx3,而它应该只有mxmx1 如果我使用mat2gray,它会像

我目前正在使用代码:

i = imread('/usr/share/icons/matlab.png');
for k=1:1:m
    for l=1:1:n
        %a(k,l)=m*n;
        a(k,l) = (.299*i(k,l,1))+(.587*i(k,l,2))+(.114*i(k,l,3));
    end
end
imshow(a); 
它只显示一个白色屏幕。另外,新生成的尺寸是nxmx3,而它应该只有mxmx1

如果我使用mat2gray,它会像这样显示图像

因为图像是PNG,强度值的范围为
[0 255]
或等效值,具体取决于原始位深度。转换公式使
a
成为双图像,其强度应在
[0 1]
范围内。由于
a
中的所有像素值可能都远大于1,因此
imshow()
会将它们剪裁为1(白色)

最好的选择是在开始之前进行调整-这将确保正确缩放:

i = imread('/usr/share/icons/matlab.png');
i = im2double(i);
a = .299*i(:,:,1) + .587*i(:,:,2) + .114*i(:,:,3);  % no need for loops
imshow(a);

im2double
可以替换为
double(i)。/double(intmax(class(i))
,假设图像处理工具箱不可用,如果我使用your's等式,似乎不需要im2double。@user3263192是的,如果你不预先分配
a
它将在原始位深度创建一个整数灰度图像,在这种情况下,不需要重新缩放。但是,如果您使用整数,请注意舍入和溢出-对于更复杂的处理算法,双精度可能更可取。
input=imread('test.jpg');
subplot(1,2,1), imshow(input), title('RGB Scale image');
[x,y,~] = size(input);

for i = 1:1:x
   for j = 1:1:y
      output(i,j) = 0.40*input(i,j,1) + 0.50*input(i,j,2) + 0.30*input(i,j,3);
   end
end

subplot(1,2,2), imshow(output), title('Gray Scale  image');