0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

FPGA之家 来源:记忆面包呀 作者:记忆面包呀 2021-07-02 10:37 次阅读

工程师社群

直方图线性拉伸相对于直方图均衡化来说就更好理解一些了,即用线性变化将灰度直方图较窄的部分拉伸至整个区间,增强整幅图像的对比度。

线性拉伸的效果如下图所示,可以看出图像对比度有所改善,保留了直方图基本的轮廓,同时将直方图范围拉伸至0~255。

算法也比较容易理解,f(x,y)为输入图像,得到输出图像g(x,y)

be11c76a-dadb-11eb-9e57-12bb97331649.png

其中A和B可以分别定义为图像的最小灰度值与最大灰度值,即

be1d80f0-dadb-11eb-9e57-12bb97331649.png

但是实际应用中并不会直接采用上述的A和B,这是由于图像中可能存在噪声的原因。想象如果图像中存在几个纯白点(255)和纯黑点(0),那么拉伸后的效果就无法达到预期。

因此我们人为的设定两个阈值Thr_Min和Thr_Max,拉伸系数A,B定义如下:

be2b8880-dadb-11eb-9e57-12bb97331649.jpg

其中∑H(k)为灰度直方图累计和。下图更直观的表示了A和B的取值,Thr_ Min和Thr_Max是蓝色部分的面积。

be46fdae-dadb-11eb-9e57-12bb97331649.png

图 2 A,B系数的定义

系统框架

be7b6ecc-dadb-11eb-9e57-12bb97331649.jpg

图 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标志。

beb9b696-dadb-11eb-9e57-12bb97331649.jpg

2. B-A的计算

取得系数B后(get_max=1),即可计算出B-A 。

becfaae6-dadb-11eb-9e57-12bb97331649.png

3. f(x,y)-A (第一级流水)

当f(x,y)小于系数A时,直接令f(x,y)-A=0;当f(x,y)大于系数B时,直接令f(x,y)-A=B-A。

bef2b4c8-dadb-11eb-9e57-12bb97331649.png

4. [f(x,y)-A ]*255 (第二级流水)

bf151e50-dadb-11eb-9e57-12bb97331649.png

5. [f(x,y)-A ]*255/(B-A) (第三级流水)

bf25299e-dadb-11eb-9e57-12bb97331649.png

实验结果

有没有觉得这两幅图并没有什么差别,小编也纳闷了很久。之前有提到过噪声可能对直方图线性拉伸的影响。

可以看出直方图线性拉伸需要人为的调整阈值的大小,才能达到理想效果。而直方图均衡化则不需要。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路
    +关注

    关注

    172

    文章

    5823

    浏览量

    171702
  • 代码
    +关注

    关注

    30

    文章

    4708

    浏览量

    68176
  • 直方图
    +关注

    关注

    0

    文章

    19

    浏览量

    7863
收藏 人收藏

    评论

    相关推荐

    DSP教学实验箱_数字图像处理操作_案例分享:5-13 灰度图像二值化

    方法是使用直方图方法(也叫双峰法)来寻找二值化阈值,直方图是图像的重要特质。直方图方法认为图像由前景和背景组成,在灰度直方图上,前景和背景都
    发表于 07-25 15:03

    DSP国产教学实验箱_嵌入式教程:5-7 直方图均衡化

    对比度增强方法。直方图拉伸直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸直方图进行调整,从而“扩大”前景和背景
    发表于 07-12 15:47

    DSP教学实验箱操作教程_数字图像处理:5-5 灰度图像直方图

    一、实验目的 学习直方图统计的原理,掌握图像的读取方法,并实现灰度图像的直方图统计结果。 二、实验原理 灰度直方图
    发表于 06-25 15:10

    FPGA设计经验之图像处理

    各个像素灰度累加和; 2.乘以均衡系数:(2^DW-1)/IW*IH(像素最大值/图像的面积)。 3.直方图线性拉伸处理 此节暂时略过,不太精通,后续有时间可以研究再分享一下
    发表于 06-12 16:26

    LRA线性马达:震撼科技的力量

    LRA线性马达(Linear Resonant Actuator)是一种基于共振原理的线性震动马达,广泛应用于手机、游戏手柄、触觉反馈设备等领域。本文将深入剖析LRA线性马达的原理、工
    的头像 发表于 02-02 09:27 917次阅读
    LRA<b class='flag-5'>线性</b>马达:震撼科技的力量

    FPGA图像处理之CLAHE算法的线性差值

    对于最后一种情况,也就是位于中间白色区域的点,他需要进行双线性插值。可以看到整个点位于第四个block,所以他需要在第一个,第二个,第四个和第五个block上分别计算直方图均衡化的结果,和相应的权重。
    发表于 01-21 10:51 1611次阅读
    <b class='flag-5'>FPGA</b>图像处理之CLAHE算法的<b class='flag-5'>线性</b>差值

    图像直方图的应用场景

    之前写过很多图像直方图相关的知识跟OpenCV程序演示,这篇算是把之前的都回顾一波。做好自己的知识梳理。
    的头像 发表于 01-17 15:01 379次阅读
    图像<b class='flag-5'>直方图</b>的应用场景

    一文带你了解FPGA直方图操作

    灰度变换等处理过程。 而FPGA对于直方图处理主要分为以下三种: 我们常见或者听说的直方图概念主要指直方图均衡,这也是最简单的一种方式,常
    发表于 01-10 15:07

    为什么不能直接对RGB图做直方图均衡化

    相信好多人在开始学习FPGA图像处理的时候都是接触的RGB转灰度图,Sobel图像检测,直方图均衡化这样的算法。
    的头像 发表于 01-02 09:41 1069次阅读
    为什么不能直接对RGB图做<b class='flag-5'>直方图</b>均衡化

    FPGA直方图处理方法

    图像直方图用作数字图像中色调分布的图形表示。它绘制了每个色调值的像素数。通过查看特定图像的直方图,观看者将能够一目了然地判断整个色调分布。
    的头像 发表于 12-15 09:20 1008次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>直方图</b>处理方法

    TI C6000教学实验箱操作教程:5-8 直方图均衡化(LCD显示)

    是间接对比度增强方法。直方图拉伸直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸直方图进行调整,从而“扩大”前景
    发表于 12-07 14:20

    嵌入式操作教程:在LCD上显示灰度图像的直方图统计结果

    学习直方图统计的原理,掌握图像的读取方法,并实现在LCD上显示灰度图像的直方图统计结果。
    的头像 发表于 11-30 16:10 1101次阅读
    嵌入式操作教程:在LCD上显示<b class='flag-5'>灰度</b>图像的<b class='flag-5'>直方图</b>统计结果

    嵌入式操作教程_DSP教学实验箱:5-6 灰度图像直方图(LCD显示)

    一、实验目的 学习直方图统计的原理,掌握图像的读取方法,并实现在LCD上显示灰度图像的直方图统计结果。 二、实验原理 灰度直方图
    发表于 11-30 10:42

    基于FPGA线性插值-中

    上次分享了基于FPGA线性插值的背景和方法原理,今天分享 方法原理的验证。 通常FPGA的开发分为电路功能设计、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程
    发表于 11-23 23:09

    基于FPGA线性插值-上

    1,背景 利用FPGA做数据处理、系统控制时,经常需要做线性插值。如图(1)所示,给点A和B的x,y坐标,需要求A,B中间某一点C的坐标。限定x取整数。 图(1) 插值示意图 根据A,B两点即可
    发表于 11-20 23:10