直方图均衡

直方图均衡化是一种非线性拉伸技术,通过改变图像像素值分布,使其在灰度范围内均匀分布。该过程涉及图像直方图定义、概率论知识、直方图变换理论和离散形式的实现。对彩色图像处理时,处理HSV空间的V通道能有效避免色彩失真。
直方图均衡化通常用来增加图像的全局对比度。 这种方法对于背景和前景都太亮或者太暗的图像非常有用。
主要优势  :一个相当直观的技术并且是可逆操作,如果已知均衡化 函数 ,那么就可以恢复原始的直方图,并且计算量也不大。
 缺点        :对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

1、统计一帧中各个灰阶值[0~255]各自的个数;

2、从0~255 灰阶排序,计算累加个数,后一个等于前几个之和hist_acc;

3、分别计算各个累加和的概率; hist_acc[i]/Size ,其中i = 0~255

4、映射个灰阶值: hist_value[i] =255*hist_acc[i]/Size; 其中i = 0~255

5、输出映射值 NewData = hist_value[data_i];


一下为参考资料:

直方图均衡化的数学原理

https://blog.youkuaiyun.com/superjunenaruto/article/details/52431941

直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布【1】。有关直方图均衡化的深入介绍,可以参考作者的另一篇博客直方图匹配的数学原理

下图为直方图均衡化的过程,体现了“均衡”的含义:(概率密度的均匀)


网上可以查阅到关于直方图均衡化的各种解释、用法、程序、优缺点,这里只关注直方图均衡化的数学原理(可以参阅【1】)。

我们知道直方图变换其实是一种灰度变换,灰度变换的变换函数决定了输入随机变量与输出随机变量之间的关系,也就是两个随机变量的关系;一副图像是二维离散的数据,不利于使用数学的工具进行处理,在数字图像处理中,我们通常是采用连续的变量进行推导,最后在推广到离散的情况。

以下我们介绍:1.图像直方图的定义 2.直方图变换的理论基础(为什么介绍它?直方图变换是直方图均衡化的基础)3.概率知识-随机变量的函数分布 4.直方图均衡化的理论基础 5.离散形式的直方图均衡化。

一、图像直方图的定义

1.定义(1):


2.定义(2):


3.比较:


二、直方图变换的理论基础



注意:T(r)为单值单调增加(此为数字图像处理-冈萨雷斯-第二版中的表述),在第三版中有一些变化,具体的可以查阅此书的对应章节。


三、概率论的知识-随机变量的函数的分布

这一块涉及了概率论的知识-随机变量的函数的分布:



四、直方图均衡化的理论基础





五、离散形式的直方图均衡化


六、例子











---------------------------------------------------------------------------------------------------------------------------------

https://www.2cto.com/kf/201602/488456.html

对于彩色图像而言,你可能会想到分别对R、G、B三个分量来做处理,这也确实是一种方法。但有些时候,这样做很有可能导致结果图像色彩失真。因此有人建议将RGB空间转换为HSV之后,对V分量进行直方图均衡处理以保存图像色彩不失真。下面我们来做一些对比实验。待处理图像是标准的图像处理测试用图couple图,如下所示。

\

首先,我们分别处理R、G、B三个分量,为了简便我们直接使用matlab中的函数histeq()。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
a = imread( 'couple.tiff' );
R = a(:,:, 1 );
G = a(:,:, 2 );
B = a(:,:, 3 );
 
R = histeq(R, 256 );
G = histeq(G, 256 );
B = histeq(B, 256 );
 
a(:,:, 1 ) = R;
a(:,:, 2 ) = G;
a(:,:, 3 ) = B;
imshow(a)

下面的代码使用了另外一种方式,即将色彩空间转换到HSV后,对V通道进行处理。由于代码基本与前面介绍的一致,这里我们不再做过多解释了。

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Img = imread( 'couple.tiff' );
hsvImg = rgb2hsv(Img);
V=hsvImg(:,:, 3 );
[height,width]=size(V);
 
V = uint8(V* 255 );
NumPixel = zeros( 1 , 256 );
for i = 1 :height
     for j = 1 : width
     NumPixel(V(i,j) + 1 ) = NumPixel(V(i,j) + 1 ) + 1 ;
     end
end
 
 
ProbPixel = zeros( 1 , 256 );
for i = 1 : 256
     ProbPixel(i) = NumPixel(i) / (height * width * 1.0 );
end
 
CumuPixel = cumsum(ProbPixel);
CumuPixel = uint8( 255 .* CumuPixel + 0.5 );
 
for i = 1 :height
     for j = 1 : width
         V(i,j) = CumuPixel(V(i,j));
     end
end
  
V = im2double(V);
hsvImg(:,:, 3 ) = V;
outputImg = hsv2rgb(hsvImg);
imshow(outputImg);


 

最后,来对比一下不同方法对彩色图像的处理效果。下面的左图是采用R、G、B三分量分别处理得到的结果。右图是对HSV空间下V通道处理之结果。显然,右图的效果更理想,而左图则出现了一定的色彩失真。事实上,对彩色图像进行直方图均衡是图像处理研究领域一个看似简单,但是一直有人在研究的话题。我们所说的对HSV空间中V分量进行处理的方法也是比较基本的策略。很多相关的研究文章都提出了更进一步的、适应性更强的彩色图像直方图均衡化算法。有兴趣的读者可以参阅相关文献以了解更多。

 

\

分别处理R、G、B三个分量之结果 转换到HSV空间后处理V分量


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值