最初に画像を読み取り、次のようmatlab
に変換するコードにたどり着きました。double
I = double(imread(img));
その後、次のように画像が表示されます。
imshow(I/max(I(:)))
どういう意味ですか?特にパーツを外すmax
と背景が白い画像しか出てきませんでした。そのような分割の目標は何ですか?そして、最大で分割せずに読み取った画像を直接表示すると、画像が正しく表示され、画像が正しく表示されないのはなぜですか?
ありがとう。
max(I(:))
正規化のステップのようです
ドキュメントによると、imshow には 0 から 1.0 までの値を持つ入力行列が必要です。
imshow(I) はイメージ I を Handle Graphics® Figure に表示します。ここで、I はグレースケール、RGB (トゥルーカラー)、またはバイナリ イメージです。バイナリ イメージの場合、 imshow は値 0 (ゼロ) のピクセルを黒、1 を白として表示します。
I
2D または 3D マトリックスです (グレースケールまたはカラーによって異なります)。I(:)
行列のすべての値がメモリに配置されるように、列に書き込まれるベクトルです。あなたもそうすることができますreshape
。Matlab のドキュメントでコロン演算子の詳細をお読みください。これは、Matlab の絶対的な基本概念です。
max
ベクトルの最大値、つまりmax(I(:))
画像全体の最大値を示します。
画像の範囲が0から始まることは書かれていない法則です。したがって、画像の値を[0,1]
分割して、画像の値をマッピングできますmax(I(:))
。Matlabでは、そのように行われますmyMatrix/myScalar
。
で表示したい二重画像に必要なものは、のI/max(I(:))
値を持つ画像を提供します。[0,1]
imshow
ご注意ください:
(1)imshow(I,[])
代わりに、値が引き伸ばされた画像を表示するように書くことができ[0,1]
ます(バージョンとは異なり、最小値も0にマップされます)。
(2)私の見解では、あなたのように例外的な場合にのみ、視覚化のために画像の値をマッピングする必要があります。画像の印象を悪くする可能性があります (たとえば、非常に暗い画像が完全なコントラストの画像として視覚化されます)。元の値の範囲 (多くの場合、255、4095、または 65535) の最大値で割ってみてください。例:
img = imread('some12bit.png');
img = double(img);
img = img / 4095; % [0,4095] -> [0,1]
imshow(img);
(3) 画像を[0,1]
すべての値> 1
にマッピングしないと、 として解釈され1
ます。そのため、画像は以前にマッピングせずに白い画像として表示されます[0,1]
。