2016-07-23 13 views
2

自分自身でヒストグラムの等価性をコード化しようとしていますが、結果はmatlab histeqの組み込み関数とは異なります。何が起こったのでしょうか?私はコードと結果を添付しました。デフォルトでoutput imagesoutput histogramsヒストグラム均等化の結果

%% Histogram Equalization 
close all 
clear all 
%% 
I = imread('Iris_virginica.jpg'); 
grayI = rgb2gray(I); 
[m,n] = size(grayI); 
L = 256; 
[counts,x] = imhist(grayI); 
myCDF = cumsum(counts)/(m*n); 
equalizedI = (L-1)*myCDF(double(grayI)+1); 
equalizedI = uint8(equalizedI); 
histMyOut = imhist(equalizedI); 
builtInEqualizationI = histeq(grayI); 
histBuiltInEqu = imhist(builtInEqualizationI); 
%% 
figure 
subplot(1,3,1), stem(x,counts), title('Histogram'); 
subplot(1,3,2), stem(x,myCDF), title('Commulative Distribution'); 
subplot(1,3,3), stem(x,imhist(equalizedI)), title('Equalized'); 

figure 
subplot(1,3,1),imshow(grayI), title('Input image'); 
subplot(1,3,2), imshow(equalizedI), title('Equalized image (mine)'); 
subplot(1,3,3), imshow(builtInEqualizationI), title('Equalized image (matlab)'); 

figure 
subplot(1,3,1), stem(x,counts), title('Histogram'); 
subplot(1,3,2), stem(x,histMyOut), title('Equalized Histogram (mine)'); 
subplot(1,3,3), stem(x,histBuiltInEqu), title('Equalized Histogram (matlab)'); 

difference = abs(equalizedI-builtInEqualizationI); 
figure, imshow(difference,[]); 

答えて

2

histeqあなたのヒストグラムを均等化するために64個のビンを使用しています。 histeqの既定の実装を使用しています。

...イコライゼーションに多数のビンを使用している手動コードと同じように、256ビンをイコライゼーションに指定します。 2番目のパラメータはデフォルトを上書きし、histeqに多くのビンを使用してイコライゼーションを実行するよう通知します。

+0

はい、結果は非常に近いですが、2つの画像の違いはまだゼロではありません。 – Misaki

+0

おそらく浮動小数点エラーが原因です。あなたの投稿を更新してください。 – rayryeng

+0

私は、ヒストグラムの非ゼロビンをmatlab関数から数えました。それらは32ではありません!私の実装でビンの数をどのように追加できますか? – Misaki

関連する問題