直方圖均衡化的MATLAB實作
目錄
-
-
- 1、回顧----直方圖均衡化
- 2、代碼實作
-
1、回顧----直方圖均衡化
-
基本原理
直方圖均衡化方法的基本思想是:
對在圖像中像素個數多的灰階級進行展寬,而對像素個數少的灰階級進行縮減,進而達到清晰圖像的目的
因為灰階分布可在直方圖中描述,是以該圖像增強方法是基于圖像的灰階直方圖。
-
直方圖均衡化的處理步驟
①求待處理圖像的直方圖h
②計算原圖的灰階分布機率hs → h s ( i ) = h ( i ) / N f hs(i)=h(i)/N_f hs(i)=h(i)/Nf N f = m ∗ n N_f=m*n Nf=m∗n
Nf--圖像f的總體像素個數 (m,n分别為圖像的長和寬)
③計算原圖灰階的累計分布hp → h p ( i ) = ∑ k = 0 i h s ( k ) h_p(i)=\displaystyle\sum_{k=0}^{i}h_s(k) hp(i)=k=0∑ihs(k)hs--每個灰階級的分布機率,即每個像素在整個圖像中所占的比例 (i=0,1,…,255)
(i=0,1,…,255)
④計算原、新圖灰階值的影射關系
⑤原、新圖灰階直方圖比較
2、代碼實作
實作程式如下圖所示:
直方圖均衡化函數:
% 直方圖均衡化
% 相比于非線性動态範圍調整,效果好,不需要參數
% F = 'img\pict1.png';
% [G] = dip(F);
% function [G] = imhisteq(F)
function [G] = dip(F)
F = imread(F); % 讀入圖像,存放在圖像矩陣F中
[M,N,K] = size(F); % 獲得輸入圖像尺寸
if(K>1)
F = rgb2gray(F); % 将RGB 圖像或顔色圖轉換為灰階圖
end
F = double(F);
hist_0 = GetImHist0(F,256)'; % 求直方圖
hist_1 = hist_0/(M*N); % 求灰階分布機率
hp0 = cumsum(hist_1); % 求原圖灰階累計分布 MATLAB中cumsum可用于求累計和
hp1 = round(hp0*255); % 原新圖的映射 round函數:四舍五入
hp1(1) = 0; % 第1個元素強制設為0
% 求出每一個像素點的灰階值F(i,j),賦給新圖像的對應像素值G(i,j)
for i=1:M
for j=1:N
GrayScale = F(i,j); % 原圖灰階值
NewGrayScale = hp1(GrayScale+1);
G(i,j) = NewGrayScale;
end
end
% 将計算得到的新圖像矩陣中所有點的灰階值由double轉換為uint8,輸出圖像
figure,imshow(uint8(F));title('原圖');
figure,imshow(uint8(G));title('直方圖均衡化後的圖像');
end
直方圖函數:
% 求直方圖--要求輸入灰階圖,單顔色通道
function counts = GetImHist0(Im,nbins)
% nbins箱子 區間的個數
[row,col,cChannel] = size(Im);
% cChannel顔色通道
counts = zeros(nbins,1);
minV = 0;
maxV = 255;
if(cChannel>1)
disp('Input error');
else
Im = double(Im);
Im2 = reshape(Im,row*col,1);
delta = (maxV-minV)/nbins;
splitVs = 0:nbins;
splitVs = splitVs*delta;
i=1;
ind = find(Im2>=splitVs(i) & Im2<=splitVs(i+1));
counts(i) = length(ind);
for i = 2:nbins
ind = find(Im2>splitVs(i) & Im2<=splitVs(i+1));
counts(i) = length(ind);
end
end
end
指令行視窗輸入如下代碼:
代碼執行結果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLyUERPRTRq50dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzUjM5UDOzgTM3ADNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)