2

画像のネガを表示しようとしていますが、ご存知のように非常に単純なコードです。
これは元の画像です:
ここに画像の説明を入力
コードを使用すると:

Out = 255-img;
%Out = uint8(OutNeg);
imshow(Out);  

結果は次のようになります。
ここに画像の説明を入力

しかし、コードを使用して:

OutNeg = 255-img;
Out = uint8(OutNeg);
imshow(Out);  

正しい答えを出します:
ここに画像の説明を入力
今、私は疑問に思っています

1 - 関数 uint8() は実際に何をしますか?
2 - これらのコードは同じ結果になりますか? 実際、uint8 の使用法は何ですか?

コード 1:

img2 = uint8(img1);  
imshow(img2); 

コード 2:

imshow(img1,[0 255]);  

3 - 次のコードで表示する前に画像を正規化する必要がありますか?

img2 = 255/(max(max(img1))-min(min(img1)))*(img1-min(min(img1)));  

または、uint8 または [0 255] を使用しても同じことが行われ、正規化する必要はありませんか??

4- uint8 を使用した正規化と [0 255] を使用した正規化の違いは何ですか????

回答で Log や power-low などの変換を検討してください。

4

1 に答える 1

3

からhelp imshow:

グレースケール イメージがsingle または doubleの場合、デフォルトの表示範囲は
[0 1]。画像のデータ範囲がデフォルトよりもはるかに大きいか小さい場合
表示範囲、表示範囲を次のように設定して実験する必要がある場合があります。
デフォルトを使用すると表示されない画像内の機能を確認する
表示範囲。整数型を持つすべてのグレースケール イメージでは、既定の
表示範囲は [intmin(class(I)) intmax(class(I))] です。

データを 8 ビットの符号なし整数 ( uint8) 配列にすることにより、データは によって期待さimshowれます[0 255]。RTM。

于 2014-04-09T21:57:09.623 に答える