0

0 から 1250 までの 1251 の異なるピクセル値を持つ pgm 画像があります。この画像ファイルを kate で開いて値を確認できるので、これを知っています。

しかし、Matlab の imread を使用して同じファイルを開くと、1251 個の異なるピクセル値も返されますが、これらの値は連続していません。最小値は 0 で、最大値は 65483 です。

これらの値を for ループで繰り返し処理したいので、ファイルに存在する元の値と連続する値を読み取る必要があります。Matlabでそれを行う方法は?

編集:誰かが試してみたい場合の画像です。

画像

4

1 に答える 1

3

値は、画像を表示したときにほとんど黒にならないようにスケーリングされます。

次のことを確認して、スケーリングがストレート整数の切り捨てで機能することをテストしました。

[A] = imread( 'myfile.pgm', 'pgm' );
p = sort(unique(A(:));
q = uint16((0:1250) * 65535 / 1251)';
all(p == q)                             % returns 1

したがって、次のようにイメージを復元できます。

map = arrayfun( @(x) uint16(x * 1251 / 65536), 0:65535 );
B = arrayfun( @(x) map(x+1), A );
于 2013-11-04T02:02:54.833 に答える