Matlab展示一个灰度矩阵的图像

3

这是一个有趣的问题。

>> img = imread('a.pgm')
>> size(img)
ans

   192 168

>> imshow(img) % works fine

然而,我将同样的矩阵复制到temp并尝试再次使用imshow。但是不起作用。

temp = zeros(192,168)
for i=1:192
   for j=1:168
      temp(i,j) = img(i,j)
   endfor
endfor

imshow(temp) % it is an empty image

为什么?

1
如果你只想复制矩阵,那么在MATLAB / Octave中使用 temp = img 是“正确”的方法。 - Stewie Griffin
1个回答

5
原因是当您执行时。
 temp = zeros(192,168)

MATLAB分配了一个双精度矩阵。因此,即使您将uint8放入矩阵中,矩阵temp的格式也将是double,直到您将其转换为unit8。之所以它是白色的,是因为MATLAB在处理双重图像时期望的强度范围为[0....1]。所有超过1的内容(例如您的情况下除了0以外的所有内容)都会被夹在1上,即最大强度,这显然是白色。您可以通过将初始矩阵转换为“temp = uint8(zeros(192,168))”或在结尾处使用“temp = uint8(temp)”或仅用于imshow调用内部的显示目的来解决这个问题:“imshow(uint8(temp))”。同样地,通常情况下,正确复制图像的方法应该是简单地使用“temp = img”。

3
只是提供信息,你可以直接使用 zeros(192,168,'uint8') 来创建一个零矩阵。 - JustinBlaber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接