图像直方图与直方图均衡化

图像直方图与直方图均衡化,第1张

图像直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。

图像直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图。

drawHist()用于展示图像的直方图,并把它转换成bitmap。

如果对CalcHistogram感兴趣,可以查看 cv4j 的具体实现。

直方图均衡化(histogram equalization)是一种借助直方图变换实现灰度映射从而达到图像增强目的的方法。

直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。

基本思想:把原始图的直方图变换成为均匀分布的形式,这样,就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。

同样,如果对EqualHist感兴趣,可以查看 cv4j 的具体实现。

图像是由像素构成的,然而直方图能够反映像素的分布情况,可以作为是图像一个很重要的特征。在实际开发中,图像直方图在特征提取、图像匹配等方面都有很好的应用。除此之外,直方图还能做图像的相似度匹配。

直方图均衡化则用于增强,利于人的视觉效果或便于机器识别。

CalcHistogram 和 EqualHist 是 cv4j 中直方图相关 *** 作的类。

cv4j 是 gloomyfish 和我一起开发的图像处理库,纯java实现,目前还处于早期的版本。

上周末我们开始做直方图的相关 *** 作,预计下周能做完这个模块。

另外,在Google I/O之后,我们第一时间便更新了cv4j中的rxcv4j模块。该模块顾名思义是对cv4j使用RxJava进行封装,我们将该模块用 Kotlin 重写,也算是赶了一回时髦:)。

该系列先前的文章:

模拟油画和铅笔画的滤镜效果

二值图像分析之轮廓分析

基于边缘保留滤波实现人脸磨皮的算法

二值图像分析:案例实战(文本分离+硬币计数)

Java实现高斯模糊和图像的空间卷积

Java实现滤镜的高级玩法

Java实现的滤镜效果

灰度直方图是图像中像素灰度集的一种统计反应。它能够描述图像中灰度的分布情况,直观地展现出图像中灰度所占多少。直方图横轴表示像素的灰度范围(比如说 0~255),纵轴表示的是像素的数量或者密度。亮暗、对比度、图像中的内容不同,直方图的表现也会不同。本文主要参考《冈萨雷斯》一书。

有的图像的灰度分布不均匀,出现过亮过暗,或者对比度过低的情况,这样的图像细节不明显,在肉眼观察时会丢失一些信息。这时可以使用直方图均衡技术对图像进行变换,变成肉眼易于分辨的细节分明的图像。

图像是离散的,所以实际中使用的是离散形式

那么使用上面的公式,就可以将直方图变换成这个样子,这样的图像一般具有比较好的细节表现。

一般来说,直方图均衡能够自动地确定变换函数,且输出结果比较好,当时需要自动增强时是一种好方法。但有的情况下,使用直方图均衡并不是最好的办法。有时候我们可以指定特定的直方图,而不是均匀分布的直方图,并让原图像的直方图变换成我们指定的形式。这个过程称为直方图匹配或者直方图规定化。

在推导过程中,直方图规定化的过程如下:

1对原图像进行直方图均衡。和上面一样。

2对事先规定的直方图也进行均衡。z为最终输出图像像素的灰度值。

我这里做个图解释一下

同样的,写成离散形式。

感觉OpenCV在直方图处理这方面并不怎么走心。这里使用的是另一篇 博客 的类封装和算法实现。

直方图规定化中要注意两点:

References:

《数字图像处理》 —— 冈萨雷斯

图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)

首先需要说明的是,如果你说的是一道完整的题目,则这道题目没有唯一解,因为题目中没有说明原始图像的灰度级数(比如原始图像是16个灰度级的,或者是32个灰度级的,等等)。为了给你提供一个解题思路,现在人为假设原始图像是16个灰度级的,其它灰度级的解法类似。

1、图像的灰度直方图求法为:

(1)先计算图像中各个灰度级的出现频率,用h(i)表示灰度级i的出现频率,其值等于灰度级出现次数/图像像素个数:

h(0)=2/16

h(1)=1/16

h(2)=3/16

h(3)=2/16

h(4)=0/16

h(5)=1/16

h(6)=4/16

h(7)=1/16

h(8)=1/16

h(9)=1/16

h(10)=h(11)=h(12)=h(13)=h(14)=h(15)=0/16。

然后以灰度级i为横轴,出现频率h(i)为纵轴即可绘制出图像对应的直方图。

(2)图像进行直方图均衡化处理的过程为:

先计算累积分布,用r(i)表示灰度级i的累积分布:

r(0)=h(0)=2/16

r(1)=r(0)+h(1)=2/16+1/16=3/16

r(2)=r(1)+h(2)=3/16+3/16=6/16

r(3)=r(2)+h(3)=6/16+2/16=8/16

r(4)=r(3)+h(4)=8/16+0/16=8/16

r(5)=r(4)+h(5)=8/16+1/16=9/16

r(6)=r(5)+h(6)=9/16+4/16=13/16

r(7)=r(6)+h(7)=13/16+1/16=14/16

r(8)=r(7)+h(8)=14/16+1/16=15/16

r(9)=r(8)+h(9)=15/16+1/16=16/16=1

r(10)=r(11)=r(12)=r(13)=r(14)=r(15)=1

将累积分布进行量化(量化时需要用到原始图像的灰度级数,这也是为什么前面需要说明的原因),量化后的灰度级用rq(i)表示,量化公式为rq(i)=ROUND(r(i)15),(说明:量化公式中的15等于原始图像灰度级数减1),可得:

rq(0)=ROUND(r(0)15)=2

rq(1)=ROUND(r(1)15)=3

rq(2)=ROUND(r(2)15)=6

rq(3)=ROUND(r(3)15)=8

rq(4)=ROUND(r(4)15)=8

rq(5)=ROUND(r(5)15)=8

rq(6)=ROUND(r(6)15)=12

rq(7)=ROUND(r(7)15)=13

rq(8)=ROUND(r(8)15)=14

rq(9)=ROUND(r(9)15)=15

rq(10)=ROUND(r(10)15)=15

rq(11)=ROUND(r(11)15)=15

rq(12)=ROUND(r(12)15)=15

rq(13)=ROUND(r(13)15)=15

rq(14)=ROUND(r(14)15)=15

rq(15)=ROUND(r(15)15)=15

因此,原始图像中的灰度级和均化后图像中的灰度级之间的对应关系为:

0->2

1->3

2->6

3->8

4->8

5->8

6->12

7->13

8->14

9->15

10->15

11->15

12->15

13->15

14->15

15->15

将原始图像中对应的灰度值按照上述对应关系替换成相应的灰度值,即可得到均化图像,结果如下:

3 8 13 8

6 12 2 12

14 6 12 8

15 6 12 2

(在电脑上直接做的,仅供参考。ROUND()表示四舍五入。)

用axis函数试试看行不行

axis一般用来设置axes的样式,包括坐标轴范围,可读比例等

axis([xmin xmax ymin ymax])

axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 坐标轴设置

把xmin设成0,xmax设成15

1、推断:我推断是你的原的灰阶不一样,和你的程序无关。你的第一个的灰阶(带有实值的RGB值)很少,不是每个灰阶都有值。而第二个的灰阶在0到255的灰阶范围内,每个灰阶都有值。这在遥感图像很普遍。

2、验证:——>你可以验证一下

3、验证方法:使用Photoshop分布打开两幅原始图像查看他们的直方图对比,看看是不是原始图像的灰阶本来就不一样。

在排除灰阶一致性的基础上,就可以判定是否是程序的问题了。

直方图是以图形化参数来显示曝光精确度的手段,其描述的是显示范围内影像的灰度分布曲线。它可以帮助分析的曝光水平等一些信息。直方图的左边显示了图像的阴影信息,直方图的中间显示了图像的中间色调信息,直方图的右边显示了图像的高亮信息。

直方图的横轴从左到右代表照片从黑(暗部)到白(亮度)的像素数量,其左边最暗处的Level值为0,而右边最亮处的Level值为255。直方图的垂直轴方向代表了在给定的Level值下的像素的数目。

首先在直方图的修整,有两种方法,一种是直方图均衡化,另外一种是直方图规定化,用起来的话第一种方法用的比较多,这里着重说一下第一种:直方图均衡化

我们引入直方图,很大程度上是可以根据直方图的形态来去判断图像的质量,比如根据下图所示,会很快发现一张是过亮还是过暗,这篇文章会说一下直方图均衡化的原理,至于实现,以后有机会再说吧

1直方图均衡化

直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。

直方图均衡化方法的基本思想是对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减。从而达到清晰图像的目的。

一些理论的东西我们不谈,直接用一个例子来说一下,会更容易理解:

假设有一幅图像,共有64×64个像素,8个灰度级,各灰度级概率分布见下表 ,试将其直方图均匀化。

解题步骤:

1:确定图像的灰度级

在实际情况下,如果我们的图像是彩色,需要将其转换为灰度图像,其中的灰度级一般是0-255,这个题的灰度级只有8级,需要注意下

2:计算原始直方图的概率

统计每一个灰度在原始图像上的像素所占总体的比例,记为Pi

3:计算直方图概率的累加值S(i)

直到最后一个灰度级,总和为1

4: 根据公式求取像素映射关系

这里的pix是指的灰度级,也就是(最大灰度级-最小灰度级)累加概率+05后取整数

5: 灰度映射

找到了原图像和均衡化图像灰度的对应关系,对原图进行 *** 作,将每个像素映射成新的像素

此时图像均衡化已经完成,当然你也可以再次统计灰度概率,观察一下结果。

以上就是关于图像直方图与直方图均衡化全部的内容,包括:图像直方图与直方图均衡化、OpenCV 直方图处理:直方图均衡和规定化(匹配)、①求该图像的灰度直方图。②对该图像进行直方图均衡化处理,写出过程和结果。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9417912.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存