3

カラーのイメージがあります。その中でヒストグラムの均等化を適用する必要があります。

次のコードで使用すると

im = imread('E:\S1\New\Image1.png');
Test = histeq(im);

次のエラーが表示されます

Function HISTEQ expected its first input, I, to be two-dimensional.

Error in ==> histeq at 71
iptcheckinput(a,{'uint8','uint16','double','int16','single'}, ...

これを解決するには?

4

3 に答える 3

5

最も一般的な解決策は、画像をHSV 色空間に変換してから、 (値または強度) チャネルhisteqのみに適用することだと思います。V

http://en.wikipedia.org/wiki/Histogram_equalization#Histogram_equalization_of_color_images

于 2013-04-23T06:22:02.443 に答える
3

問題は、ヒストグラムがグレースケール画像に対してのみ明確に定義されていることです。色のヒストグラム均等化をどのように定義しますか?
Hist-eq は、ピクセルの明るさをわずかに変更することで、グレー値を 0..255 の範囲全体に (できるだけ均等に) 再配分しようとします。
色についても同じことをしたい場合: RGB キューブ全体を均等に塗りつぶすには、ピクセルの色を変更する必要があります。つまり、黄色のピクセルが茶色に変わることになります。

自分が求めているものを明確に定義する必要があります。

(色に影響を与えずに)強度の範囲全体にまたがりたい場合は、Danのソリューションが非常に便利です。

RGB キューブ全体を「塗りつぶしたい」場合hiseqは、画像の各チャネルに個別に適用することを検討してください。

for ci = 1:size(im,3)
    Test(:,:,ci) = histeq( im(:,:,ci) );
end
于 2013-04-23T06:22:21.267 に答える
0

簡単な方法として、これを試してください:

im = imread('E:\S1\New\Image1.png');
Test =im(:,:,1); ir=histeq(ir); figure; imshow(ir, 'Border', 'tight');
于 2015-05-21T11:48:27.447 に答える