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

时间:2014-02-02 16:55:56

标签: 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); 

它只显示一个白色屏幕。新生成的尺寸也是n x m x 3,而它应该只有m x n x 1.

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

2 个答案:

答案 0 :(得分:4)

由于图像为PNG imread() is returning an integer image,强度值范围为[0 255]或等效,具体取决于原始位深度。转换公式使a成为图像,预计其强度范围为[0 1]。由于a中的所有像素值可能远大于1,因此它们会被imshow()剪裁为1(白色)。

在开始之前,最好的选择是explicitly convert the image format - 这样可以正确地缩放内容:

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);

答案 1 :(得分:0)

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');