例如:灰度级为[0~255]的数字图像直方图,定义:
h(rk)= nk
其中,rk是第k个灰度级(k = 0~255),nk是该灰度级的个数。
若以每个灰度级的个数nk去除以图像像素总数n,则得到归一化的直方图,定义:
P(rk)= nk/n
即,P(rk)表示灰度级为rk发生的概率估计值。所以:一个归一化直方图,其所有部分之和应等于1。
2、为什么要做直方图均衡化
在图像处理应用中,若得到这样一副图片,其图像的灰度分布集中在较窄的范围内,那么视觉上就给人感觉,对比度较差,细节不够清晰。为了使图像变得清晰,就需要提升对比度。
如何提升对比度呢?即,对图像进行非线性拉伸,使得图像的灰度分布变宽,灰度值分布变得均匀。这样,在灰度级范围内,像素的个数分布大致相同,就会使得图像的对比度增强,细节更清晰。
那么,又如何使得灰度值分布均匀呢?即,直方图均衡化。
3、直方图均衡化原理
直方图均衡化,即将随机分布的图像直方图修改成均匀分布的直方图。
基本思想:对原始图像的像素灰度做某种映射变换,使变换后图像灰度的概率密度呈均匀分布。这就意味着图像灰度的动态范围得到了增加, 提高了图像的对比度。
作用:图像增强。
那么,我们使用哪种映射变换呢?答案是:累积分布函数。
说明:
①为什么要选用累积分布函数?
②为什么使用累积分布函数处理后,像素值会均匀分布?
直方图均衡化,必须保证:
①像素值经过映射变换后,原本的大小关系不能发生改变。即较亮的区域,依旧较亮;较暗的区域,依旧较暗。只是增大了对比度,绝对不能明暗颠倒,否则就不是原本的图像了。
②像素值经过映射变换后,不能越界。例如:8bit图像,像素值范围0~255;12bit图像,像素值0~4095。
由于累积分布函数是单调递增函数,可以满足条件①;又因为累积分布函数的值域为0~1,可以控制越界,满足条件②。
实则,有严谨的数学推导过程,在此直接给出公式,具体可以参考《数字图像处理---冈萨雷斯》一书。
![](https://file.elecfans.com/web1/M00/C7/DB/o4YBAF9t9pWAMZgTAAAFF7sBTDk448.png)
其中,H(i)表示图像直方图,nk/n表示归一化。
所以,直方图均衡化实现过程:
(1)求图像直方图;(统计直方图每个灰度级出现的次数)
(2)做归一化处理;
(3)计算新的像素值。
4、FPGA实现
FPGA实现的核心在于算法,弄清楚原理,写代码只是一个机械的过程。假设一副图像:2464x2056, 8bit,即共有5065984个像素点,256个灰度级。参照上述直方图均衡化的步骤,用FPGA实现,效果展示如下:
编辑:hfy
-
FPGA
+关注
关注
1631文章
21806浏览量
606681 -
图像处理
+关注
关注
27文章
1306浏览量
56938
发布评论请先 登录
相关推荐
基于直方图算法进行FPGA架构设计
一文带你了解FPGA直方图操作
基于FPGA的图像直方图均衡处理
【干货】基于FPGA的图像处理(图像增强)之直方图均衡
TI C6000教学实验箱操作教程:5-8 直方图均衡化(LCD显示)
保持图像细节的直方图均衡算法
MATLAB如何实现图像增强灰度变换直方图均衡匹配
![MATLAB如何实现图像增强灰度变换<b class='flag-5'>直方图</b><b class='flag-5'>均衡</b>匹配](https://file1.elecfans.com//web2/M00/A7/28/wKgZomUMQriAXqFWAAA0O1iEZRw203.png)
基于直方图算法的FPGA设计架构
![基于<b class='flag-5'>直方图</b>算法的<b class='flag-5'>FPGA</b>设计架构](https://file.elecfans.com/web1/M00/8F/5D/pIYBAFy6iFOAMnqDAAAjnK0n9e4179.png)
直方图均衡化的原理及OpenCV的算法和代码实现免费下载
![<b class='flag-5'>直方图</b><b class='flag-5'>均衡</b><b class='flag-5'>化</b>的原理及OpenCV的算法和代码实现免费下载](https://file.elecfans.com/web1/M00/A7/FD/o4YBAF2K22qAPluDAACuL6FW-kw809.png)
评论