2021-05-12 14:32:11
Matlab影象處理-直方圖均衡化原理方法
2019-12-25 18:06:47
本教學適合Matlab數位影像處理的初學者。直方圖均衡化是數位影像處理中較為基礎的影象增強方法,通過直方圖均衡化能夠自適應地有效改善影象對比度不足問題。本文中所支援的直方圖均衡化影象,不僅僅限於灰度圖,更將RGB真彩色圖、多波段遙感影像納入直方圖均衡化範疇。較為全面直觀地給出在Matlab中對影象進行直方圖均衡化的方法原理和Matlab原始碼,並配合必要的程式碼註釋,希望能幫助Matlab和數位影像處理的初學者入門。
1
開啟影象[FileName, FilePath]=uigetfile('*.tif;*.jpg;*.png;*.img;*.gif;','請選擇影象資料');str=[FilePath FileName];Image=imread(str);% 以對話方塊的形式選擇開啟一幅影象[M,N,nDims]=size(Image);Image=im2double(Image);%?獲取影象的尺寸和波段數2
直方圖均衡化HISTEQ=Image;for i=1:nDims ?% 分別對各波段進行直方圖均衡化? ? H=Image(:,:,i);? ? [counts,x]=imhist(H); ?% 計算各灰度級x的畫素個數count? ? loction=find(counts~=0); % 找到所有畫素個數不為0的灰度級? ? MinCDF=min(counts(loction));?? ? for j=1:length(loction)? ? ? ? CDF=sum(counts(loction(1:j))); ?% 計算各灰度級畫素個數累積分布CDF? ? ? ? P=find(H==x(loction(j)))3
儲存輸出figure, ?%?在同一視窗顯示原圖與灰度拉伸結果圖if nDims==3||nDims==1 ?%?若為灰度圖和RGB真彩色圖則以常規方式儲存並輸出? ? subplot(1,2,1),imshow(Image);title('原圖');? ? subplot(1,2,2),imshow(HISTEQ);title('直方圖均衡化');? ? imwrite(HISTEQ,'Result_HISTEQ.jpg','jpeg');else ?% 若為多波段遙感影像則按照TM 3,2,1組合形式儲存並輸出? ? subplot(1,2,1),imshow(Image(:,:,[3,2,1]));title(1
上圖:原灰度圖
下圖: 直方圖均衡化結果圖
1
上圖:原灰度圖直方圖
下圖: 直方圖均衡化結果圖直方圖
相關文章