Matlab显示灰度矩阵

Sai*_*ait 3 matlab octave imshow

这是一个有趣的问题.

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

   192 168

>> imshow(img) % works fine
Run Code Online (Sandbox Code Playgroud)

但是,我正在复制相同的矩阵tempimshow再次尝试.不能正常工作.

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
Run Code Online (Sandbox Code Playgroud)

为什么?

cif*_*ifz 5

原因是因为当你这样做

 temp = zeros(192,168)
Run Code Online (Sandbox Code Playgroud)

MATLAB分配一个double矩阵.因此,即使将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

  • 仅供参考,您可以使用`zeros(192,168,'uint8')直接使用`zeros` (3认同)