随着HDTV的普及,以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期。与传统CRT电视不同的是,这些高清数字电视需要较复杂的视频处理电路来驱动,比如:模数转换(A/D Converter)、去隔行(De-interlacer)、视频缩放(Scaler)和视频图像增强(Video Enhancement)等等。由于HDTV的带宽较高,720p信号(1280×720@60Hz)的像素速率达到74MHz,因此针对HDTV的视频处理算法需要更高性能的器件。采用大规模高工艺的ASIC芯片是目前这个问题的主要解决方案,Pixelworks、Genesis等公司均推出了基于大规模ASIC的解决方案。但是,随着FPGA工艺的不断改善,其性价比与日俱增,尤其是Xilinx、Altera等厂商纷纷采用90nm工艺量产后,其价格不断降低,Xilinx推出的Spartan-3E系列FPGA 120万门的售价只有9美元,已经在小量产品的IC设计中开始替代结构化ASIC,在数字高清电视这类价格敏感型消费类电子产品中也开始大量采用。

  本文介绍了如何在FPGA中利用Block RAM的特殊结构实现HDTV视频增强算法中灰度直方图统计。

灰度直方图统计

灰度直方图统计是图像处理过程中很常用的一个步骤,简单来讲,就是对一幅图像各个灰度的像素进行计数,得到一张灰度分布表。例如,8位量化的灰度图像统计结果就是256个值,分别代表0-255 每个灰度像素的数量,如图1 所示为Lena图像的灰度直方图统计结果。直方图是分析一幅图像亮度分布特性有力的工具,根据它的结果可以进行诸如灰度拉伸、自动对比度、动态伽马调整等操作。

图1 Lena图像的灰度直方图统计

FPGA算法统计

  在计算机或者DSP上实现直方图统计时,我们通常会使用数组结构,即在内存中开辟一个整数数组来进行计数,但是在FPGA中定义数组是非常消耗资源的,尤其是当数组成员的位宽很大时。例如用触发器来统计256灰度的720p图像的直方图,将消耗4000个逻辑单元(每个逻辑单元是一个四输入查找表),这几乎消耗了一个Spartan-3E 25万门器件(XC3S250E)80%的逻辑资源。

  幸运的是,FPGA器件提供了一个很好的结构可以处理这类问题,这就是Block RAM.在Altera和Xilinx的各型号FPGA器件上都集成了一种称为Block RAM的片上内存,它们以若干Kbits为一块,不同型号集成不同数量的块,例如在Spartan-3E系列中以18Kbits为一块,在规模最小的型号XC3S100E上集成了4块这样的内存,如图2 所示:

图2 Spartan-3E系列FPGA集成的Block RAM

这种内存很容易实现数组类型的结构,而且这种内存被设计成双端口方式,即可以用两组独立的地址数据总线来读写,因此可以用不到一块的Block RAM就实现256×24这样的高位宽计数器阵列来进行HDTV视频图像的直方图统计,如图3所示:

图3 用Block RAM实现计数器阵列

  以Block RAM的结构为核心,按照以下几点来设计直方图统计算法:

  1.Block RAM使用双端口方式,端口A用来将内存单元计数值读出,端口B将计数值加一后写回该内存单元。

  2.内存的地址在像素有效时由像素灰度值选择,在行同步期间不计数,在场同步期间使用一个递增计数器在前256个时钟将统计结果输出,在之后的256个时钟将RAM 块清零。

  3.双端口读写时钟相位相差180度,以避免双端口读写冲突。

  4.数据的读出、加一和写入采用了流水线结构以提高性能,所以在地址控制上要进行适当暂存以保证数据同步。

  图4为256级灰度720p视频图像直方图统计的算法实现功能框图:

图4 用FPGA的Block RAM实现直方图统计

  该算法借助FPGA??上的高性能Block RAM(读写速度可以到200 兆以上),可以实现SMPTE定义的从720p到1080p的各种HDTV视频图像的实时直方图统计,仅占用FPGA不到一百个逻辑单元和一块Block RAM,是一种性价比较高的FPGA实现直方图统计的算法,而且该算法具有很好的通用性,可以应用到各种需要大量高位宽计数器的高速FPGA设计中。

参考文献:

  1.Xilinx,Spartan-3E FPGA datasheet,2005.3
  2.Xilinx,Using Block RAM in Spartan-3 Generation FPGAs,2005.3

基于FPGA的HDTV视频图像灰度直方图统计算法设计的更多相关文章

  1. 基于Modelsim的直方图统计算法仿真

    一.前言 本篇主要针对牟新刚编著<基于FPGA的数字图像处理及应用>第六章第五节中直方图统计相关类容进行总结,包括代码实现及 基于Modelsim的仿真.书读百遍,其意自现. 2020-0 ...

  2. 基于FPGA的Uart接收图像数据至VGA显示

    系统框图 前面我们设计了基于FPGA的静态图片显示,接下来我们来做做基于FPGA的动态图片显示,本实验内容为:由PC端上位机软件通过串口发送一幅图像数据至FPGA,FPGA内部将图像数据存储,最后扫描 ...

  3. FPGA+VGA+OV7725 视频图像FPGA开发板 图像采集板CP511A使用

     

  4. 基于FPGA的Sobel边缘检测的实现

    前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测.中值滤波.Can ...

  5. 基于FPGA的肤色识别算法实现

    大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...

  6. 【转】基于FPGA的Sobel边缘检测的实现

    前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测.中值滤波.Can ...

  7. 基于FPGA的中值滤波算法实现

    在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...

  8. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  9. 深入学习OpenCV中图像灰度化原理,图像相似度的算法

    最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...

随机推荐

  1. window对象与document对象的区别

    [window对象] 它是一个顶层对象,而不是另一个对象的属性,即浏览器的窗口. 属性 defaultStatus 缺省的状态条消息 document 当前显示的文档(该属性本身也是一个对象) fra ...

  2. ACM 第十八天

    数学基础(卷积,FFT,FWT,FMT,鸽巢原理,群论,哈里亚余数,哈里亚计数定理,组合数学,LVG定理,期望DP,期望点贡献问题) 练习题: A - Necklace of Beads Beads ...

  3. python学习第一天-语法学习

    1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字,来自 ...

  4. s3c2440调试nandflash裸机程序遇到的问题

    图挂了可以去 https://github.com/tanghammer/mini2440_peripherals/blob/master/nand/debug_nand.md 按照前面sdram的代 ...

  5. PAT L1-048 矩阵A乘以B

    https://pintia.cn/problem-sets/994805046380707840/problems/994805082313310208 给定两个矩阵A和B,要求你计算它们的乘积矩阵 ...

  6. mysql8基本配置,差点被各种坑蒙圈

    1. 下载免安装版mysql地址 https://dev.mysql.com/downloads/mysql/ 2. 基本配置 (1)解压zip包,将bin目录添加到环境变量 (2)在mysql根目录 ...

  7. open-stf 安装篇(linux)

       OpenSTF 百度MTC的远程真机调试 Testin的云真机 腾讯WeTest的云真机 阿里MQC的远程真机租用 什么是OpenSTF? OpenSTF是一个手机设备管理平台,可以对手机进行远 ...

  8. 网络编程--System.Net

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. vue 开发多页应用

    vue 开发多页应用 https://www.cnblogs.com/fengyuqing/p/vue_cli_webpack.html https://segmentfault.com/a/1190 ...

  10. Bootstrap如何适配移动浏览器

    移动设备优先 1.由meta标签决定的 <meta name="viewport" content="width=device-width, initial-sca ...