这是一个有趣的问题。
>> 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
为什么?
答案 0 :(得分:5)
原因是当你做的时候
temp = zeros(192,168)
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