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

为什么?

4

1 回答 1

5

原因是因为当你这样做

 temp = zeros(192,168)

MATLAB 分配一个双精度矩阵。因此,即使您将 uint8 放入矩阵中,矩阵 temp 的格式也会加倍,直到您不将其转换为 unit8。

它之所以是白色的,是因为 MATLAB 在处理图像时期望强度在 [0....1] 范围内。超过 1 的所有内容(如您的情况中的所有内容,但 0 除外)都被限制为 1,即最大强度,这显然意味着白色。

您可以通过将初始矩阵转换为

temp = uint8(zeros(192,168))

或最后

temp = uint8(temp)

或再次仅用于在 imshow 调用中显示目的:

imshow(uint8(temp))

通常,正如@Robert P. 在评论中正确指出的那样,复制图像的正确方法很简单 temp = img

于 2014-06-14T21:08:42.583 回答