如何在不使用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');