剖析FPGA灰度直方图线性拉伸

纯工程师社群
直方图线性拉伸相对于直方图均衡化来说就更好理解一些了,即用线性变化将灰度直方图较窄的部分拉伸至整个区间,增强整幅图像的对比度。
线性拉伸的效果如下图所示,可以看出图像对比度有所改善,保留了直方图基本的轮廓,同时将直方图范围拉伸至0~255。
算法也比较容易理解,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) (第三级流水)
实验结果
有没有觉得这两幅图并没有什么差别,小编也纳闷了很久。之前有提到过噪声可能对直方图线性拉伸的影响。
可以看出直方图线性拉伸需要人为的调整阈值的大小,才能达到理想效果。而直方图均衡化则不需要。


2位双向电压电平转换器BCT0102概述
荣耀智慧屏标杆品质无惧拆机,荣耀智慧屏X1表现出色
中国联通研究院副院长、首席科学家唐雄燕一行莅临中科驭数交流合作
HSP50214B数字下变频器在数字接收机中的应用
利用纳米孔测序技术在DNA鸟嘌呤的烷基化碱基损伤检测方法学研究中取得重要进展
剖析FPGA灰度直方图线性拉伸
GPRS模块连接服务器设置方法
netstat命令故障排查总结
俄罗斯计划采用多功能机器人部队来代替人类士兵
一种基于单片机实现的队列功能模块
电阻如何看色环读数?终端电阻的开发与应用
如何设置虚拟局域网_虚拟局域网的划分方式
三星8nm LPP工艺利用 Mentor Tessent 工具节省大量设计测试时间
Android 13应用迁移的两个阶段
Nvidia GTC2019:没有新架构,但黄仁勋打造了一个巨大的生态圈
区块链技术运用开发加密货币场外OTC交易所搭建
Zynq UltraScale+ MPSoC以太网接口调试
AMD 将要推出Radeon RX Vega系列GPU 大幅度提升 VR 与 PC 图形
互联网的本质是垄断,要用区块链来颠覆
OPPOR11、OPPOR11Plus最新消息:配置、处理器、拍照技术、功能、价格提前看,OPPOR11你值得期待