《數字影象處理》——直方圖統計
阿新 • • 發佈:2019-01-10
直方圖在數字影象處理中應用的很廣泛,是影象空域處理中很重要的增強手段;除了應用在影象增強領域,直方圖技術還經常應用在二值化中,用於閾值的選擇。
下面簡單介紹並實現影象的直方圖:
影象直方圖就是一個對不同畫素點出現的次數統計求和過程,很簡單。在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
執行結果圖:
有點多,就不貼出來了,想搞的自己回去執行就出來了。