基于FPGA灰度直方图线性拉伸

直方图线性拉伸相对于直方图均衡化来说就更好理解一些了,即用线性变化将灰度直方图较窄的部分拉伸至整个区间,增强整幅图像的对比度。
线性拉伸的效果如下图所示,可以看出图像对比度有所改善,保留了直方图基本的轮廓,同时将直方图范围拉伸至0~255。
图 1  直方图拉伸效果图
算法也比较容易理解,f(x,y)为输入图像,得到输出图像g(x,y)
其中a和b可以分别定义为图像的最小灰度值与最大灰度值,即
但是实际应用中并不会直接采用上述的a和b,这是由于图像中可能存在噪声的原因。想象如果图像中存在几个纯白点(255)和纯黑点(0),那么拉伸后的效果就无法达到预期。
因此我们人为的设定两个阈值thr_min和thr_max,拉伸系数a,b定义如下:
其中∑h(k)为灰度直方图累计和。下图更直观的表示了a和b的取值,thr_ min和thr_max是蓝色部分的面积。
图 2  a,b系数的定义
系统框架
图 3  直方图线性拉伸系统框架
上图可以看出,前半部分的直方图统计电路和上篇均衡化完全一样,只是对后半部分的电路做了些修改。计算直方图线性拉伸后的像素值的步骤如下:
1. 统计第一帧图像的灰度直方图
2. 计算直方图累计和
3. 由阈值thr_min和thr_max算出拉伸系数a,b
4. 第二帧图像灰度值带入公式计算后输出
和直方图均衡化一样,这里我们不考虑帧缓存的问题,也就是前一帧的a,b作为当前帧a,b来使用。
代码分析
a,b系数的计算
hist_cnt为计算出的累计和(与直方图均衡化中的求法一样),当累计和大于阈值的时候,记录下此时累计和对应的地址out_pixel[8:1](即灰度值),作为我们的拉伸系数a,b,同时设置取得系数标志get_max或get_min为1。最后要在第二帧累计和到来时,清零a,b及get标志。
2. b-a的计算
取得系数b后(get_max=1),即可计算出b-a 。
3. f(x,y)-a   (第一级流水)
当f(x,y)小于系数a时,直接令f(x,y)-a=0;当f(x,y)大于系数b时,直接令f(x,y)-a=b-a。
4. [f(x,y)-a ]*255    (第二级流水)
5. [f(x,y)-a ]*255/(b-a)   (第三级流水)
实验结果
图 4   原图               图 5  阈值为100时处理后的图像
有没有觉得这两幅图并没有什么差别,小编也纳闷了很久。之前有提到过噪声可能对直方图线性拉伸的影响,下面是将阈值thr_min调高至1000后得到的结果。
图 6 阈值为1000时处理后的图像
可以看出直方图线性拉伸需要人为的调整阈值的大小,才能达到理想效果。而直方图均衡化则不需要。


基于预训练语言模型的行业搜索的应用和研究
典型返驰式拓扑设计——实现最佳化电源
谁正在转向特斯拉的充电端口?
毕亚兹一拖四HUB集线器体验 连接稳定兼容性强传输速率基本不受影响
以色列研发自主飞行的“救护车”为军用无人机
基于FPGA灰度直方图线性拉伸
东芝新产品TCR3RM系列LDO稳压器的详细介绍
黑夜也能发电的新型太阳能电池板问世
群联推出世界首款SD Express卡:计划3月份开始送样量产
低压验电笔的用途介绍
米尔科技AM335X开发板外扩方案
新加坡移动公司M1与诺基亚、华为合作进行5g试验
UItraScale架构FPGA的高性能低功耗内存接口
对速度的需求:明智地选择低代码
诺基亚920上市时间_诺基亚Lumia920什么时候上市
真空断路器常见故障及解决对策
IC Park打造最优创业环境,助力企业环境发展的因素解读
华为荣耀V9吊打骁龙821,小米6再爆晓龙835依旧维持1999
苹果故意你的iPhone6、iPhone7变慢 升级ios一定要小心了
Meta进军元宇宙亏损严重 难挡苹果将发布AR/MR头显的热情