详解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));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。