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 は double の行列を割り当てます。したがって、uint8 を行列に入れても、unit8 にキャストしない限り、行列 temp の形式は 2 倍になります。

白である理由は、MATLAB がdoubleイメージを扱うときに [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 に答える