-4

ヒストグラム均等化で補正しようとする輝度が低下する一連の画像があります。 0.8731.000:私はhisteqの出力を見ると、私は、関数がしかしヒストグラム予期しない結果をもたらすイコライゼーション

% Image that I would like to apply histogram equalization to 
C = gallery('wilk',21); 
figure, imagesc(C) 

E = histeq(C); 
figure, imagesc(E); 

どのように動作するかを学ぶためにいくつかのテストデータにhisteqを適用し、私は2つのだけのユニークな値を持つ結果を得ます。どのように出力が入力の全範囲に及ばないのでしょうか?出力に2つ以上のユニークな値があることが期待されます。

enter image description here

+1

:あなたはこれを行うにはmat2grayを使用することができますか?それは画像を受け取り、図の中にヒストグラムを出力する。また、ヒストグラムが等しくなった後、 'unique(C)'が返ってくるのは何ですか? – rayryeng

+0

ヒストグラムの等価コードを表示してください。その間、あなたは 'ヒステック'を試しましたか? – rayryeng

+0

ああ。私はちょうど入力が今あることに気づいた。指定した入力がヒストグラムの均等化のために駄目なので、うまくいきません。ダイナミックレンジと強度分布は非常に小さく、いったんそれを「正規化」すれば範囲を爆破します。ヒストグラムイコライゼーションがどのように機能するかをお読みになることをお勧めします。さらに進める前に実際の画像でこれを試してみてください。たとえば、Image Processing Toolboxイメージを使用します。 'C = imread( 'pout.tif');'。 – rayryeng

答えて

2

入力タイプdouble又はsingleである場合histeqの資料によれば、範囲内にあると予想される:[0, 1]

強度値は、適切な範囲で指定します。クラス0の画像の場合は[0,1]、クラスuint8の画像の場合は[0,255]、クラスuint16の画像の場合は[0、65535]です。

あなたのデータは正規化されていないとタイプdoubleであり、

whos C 

% Name  Size   Bytes Class  Attributes 
% 
% C   21x21    3528 double  

[min(C(:)), max(C(:))] 
% 0 10 

あなたが最初にそれを正規化する必要があります。あなただけの `imhist`行わないのはなぜ

E = histeq(mat2gray(C)); 

enter image description here

+1

あなたはおそらく 'imshow'でプロットしています。 'imshow'は数値を実際のサイズ(ピクセル単位)にして21×21なので小さくなります。またデフォルトでは' 'gray''カラーマップになります。 'imagesc'を使います。 – Suever

+3

@マッシーあなたが書いたことは、私には分かりません。あなたのデータを使って行うべき適切なことは、私たちが見ることができないからです。データを修正するために何をやろうとしたかを示す、画像処理特有の新しい質問をすることがありますか?データそのものも含めて、期待される出力を表示します。この質問は 'histeq'の誤使用に関するものでした – Suever

+0

' 'histeq(Matrix)'に特定のMatrixを適用する '' hgram'をどのように決めることができますか? 'size(Matrix)'が '1 2093809'ならEtc。私は平らなヒストグラムをここで得たくない。 - - 'n = size(pTFD、2);を生成する。 hgram = ones(1、n)* prod(サイズ(pTFD))/ n; 'はリソースが重い。 –

関連する問題