我目前正在使用代码:

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 它会显示这样的图像

最佳答案

由于图像是 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);

关于matlab - 如何在不使用 rgb2gray 的情况下在 matlab 中将 RGB 图像转换为灰度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21513325/

10-16 22:01