詳解BBHE(圖像雙直方圖均衡)算法


詳解BBHE(圖像雙直方圖均衡)算法

首先看BBHE函數

function [ I2 mu] = BBHE( I1 )
[rows cols]=size(I1);

h1=imhist(I1);

mu=round(mean2(I1));
p1=h1(1:mu+1);
p1=p1/sum(p1);
p2=h1(mu+2:end);
p2=p2/sum(p2);

I2=reshape(I1,[],1);
ind1=I2<=mu;
aa=I2(ind1);
tmp1 = HE4SubHistogram(aa,0,mu,p1);

ind2=I2>mu;
bb=I2(ind2);
tmp2 = HE4SubHistogram(bb,mu+1,255,p2);

I2(ind1)=tmp1;
I2(ind2)=tmp2;
I2=reshape(I2,rows,cols);
end


BBHE函數參數是I1灰階化的圖像矩陣,返回值是處理后的I2圖像矩陣和圖像灰階平均值mu

[rows cols]=size(I1);

將I1圖像矩陣的行列賦值給rows,cols,以范例圖像為例,rows=321,cols=481

h1=imhist(I1);

h1是將I1的所有像素在灰階0-255的每個值的累計,h1是一個256*1的列向量
h1的直方圖如圖所示

mu=round(mean2(I1));

mu為所有像素灰階的平均值,它的值為131

p1=h1(1:mu+1);
p1=p1/sum(p1);
p2=h1(mu+2:end);
p2=p2/sum(p2);

這四行代碼是把圖片按照灰階分成兩個部分A和B

對A部分進行處理
第一行p1將h1中所有灰階值在1至mu+1的值排成一個列向量
顯然p1的元素等於((mu+1)-1)+1=mu+1=132,此時p1為132x1的列向量
p1是每個灰階值在A部分對應的頻數
第二行將p1所有元素(灰階值)除像素總數得每個灰階值在A部分的頻率

對B部分同理,p2為一個124x1的列向量,記錄每個灰階值在B部分的頻率

I2=reshape(I1,[],1);

接着將I1(321481)矩陣按列重塑為一個(321481)x1即15440x1的I2矩陣

ind1=I2<=mu;

ind1矩陣類型為邏輯矩陣,相當於一個標記矩陣。它將總共15440行元素小於等於mu的標記為1,大於的標記為0

aa=I2(ind1);

接着將I2中元素值小於等於mu的賦值給aa,得到一個64676x1的列向量
aa中存儲的是灰階值在1-mu內每個像素的灰階值

tmp1 = HE4SubHistogram(aa,0,mu,p1);

執行HE4SubHistogram函數,這個函數的內容為:

function [ I1 ] = HE4SubHistogram(I,I_s,I_e,p)

C=cumsum(p); 
f=uint8(I_s+C*(I_e-I_s)); 
% I1=f(I+1-I_s);
I1=f(uint8(double(I)+1-I_s));
end

可見這個函數的聲明為:

function [ I1 ] = HE4SubHistogram(I,I_s,I_e,p)

備注:
I:輸入圖像aa
I_s:該子直方圖的最小灰度值=0
I_e:該子直方圖的最大灰度值=mu=131
p:該子直方圖內的灰度分布頻率(已歸一化)=p1

C=cumsum(p); 
f=uint8(I_s+C*(I_e-I_s)); 

C的第i行的值是p的前i-1行之和
第二行將C從0-1按比例放大到1至mu
f的坐標軸是132個灰階

I1=f(uint8(double(I)+1-I_s));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM