《數字圖像處理》——直方圖統計

       直方圖在數字圖像處理中應用的很廣泛,是圖像空域處理中很重要的增強手段;除了應用在圖像增強領域,直方圖技術還經常應用在二值化中,用於閾值的選擇。

   下面簡單介紹並實現圖像的直方圖:

圖像直方圖就是一個對不同像素點出現的次數統計求和過程,很簡單。在matlab中有很多方法可以實現,我這裏列舉我比較喜歡的兩種方法。

第一種:

for i = 0 : 255  % 對於灰度圖像,只有256個灰度級
    sumPix(i + 1) =  sum( img(:) == i );
end
第二種:

for i = 0 : 255
    sumPix(i + 1) = length( find( img == i) );
end


得到像素點的分佈之後,下面就是直方圖顯示問題,這裏可以有很多方式來顯示,有:plot,bar,stem三種方式


下面貼出我自己所有的源代碼(因爲自己也是學習過程,想盡量多弄懂一些函數用法,所以源碼有點亂)

%function [ sumPix pix ] = My_hist( img )
% test:   img = imread('4.bmp');
%   
img = imread('4.bmp');
classin = class(img);
if strcmp( classin, 'uint8' )
    pix = [0:255];
elseif strcmp( classin, 'double' )
    pix = [0: 65535];
elseif strcmp( classin, 'logical')
    pix = [ 0: 1];
end

%第一步:進行像素灰度統計;   
% 方法一:
for i = 0 : pix(end)
    sumPix(i + 1) =  sum( img(:) == i );
end
% 方法二:
% for i = 0 : pix(end)
%     sumPix(i + 1) = length( find( img == i) );
% end

%繪製直方圖方法一: bar
bar( pix, sumPix, 0);axis([0 pix(end) 0 max(sumPix)]);title('MyHist');

figure;
bar( pix, sumPix, 0);axis([0 pix(end) 0 max(sumPix)]);

set(gca, 'xtick', 0: 75: pix(end) );       % gca:"獲得當前座標軸",xtick和ytick按所示的間隔設置水平軸和垂直軸的刻度
set(gca, 'ytick', 0: 1000: max(sumPix) );

text(100, 15000, 'This is my 統計直方圖函數顯示結果');
title('bar');

%繪製直方圖方法二: stem
figure;
stem(  pix, sumPix, 'fill');
ylim('auto');
xlim('auto');
text(100, 15000, 'This is my 統計直方圖函數顯示結果');
title('stem');

%繪製直方圖方法三: plot(將這一組點用線連接起來)
figure;plot(pix, sumPix);
title('plot');

%end

4.bmp



運行結果圖:

有點多,就不貼出來了,想搞的自己回去運行就出來了。



發佈了23 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章