基于FPGA的HDTV视频图像灰度直方图统计算法设计

  随着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

转载于:https://www.cnblogs.com/yousun/p/3160223.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台系统可扩展性学习笔记(十一)Database Denormalization

之前的两篇笔记中谈到了从单库扩展到多库以承载更多的请求量以及单库(表)拆分成多库(表),打破单库的性能瓶颈。 这都是为了应对大数据量下的措施。 然而,除却数据量外,还有一个极其影响单库性能…

Java Swing 影楼管理系统之登录功能

开头打广告,Java1234.com。 首先,来个效果图。 关键代码 1,界面层 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?

【电脑软件管理中Bdsyn手机助手的问题】Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安装的(应该是自己自己主动安装的),卸载以后过几天又会出如今软件列表里。百度搜索却无法搜索出…

后台系统可扩展性学习笔记(十二)NoSQL

文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义 不同于关系型数据库,NoSQL 数据库(也叫非 SQL 或非关系型数据库)提供的数据存储、检索机制并不是基于表关系建模的。没有…

android2.2应用开发之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通讯录的联系人的机卡混排显示,由于手机卡类型的不同,导致手机卡存储容量以及可以存储信息不同,就要涉…

后台系统可扩展性学习笔记(十三)缓存

文章目录在哪儿加缓存缓存什么内容缓存原始查库结果缓存数据对象怎么查询缓存结果预留缓存模式直读模式直写模式回写式缓存绕写式缓存提前刷新模式缓存满了如何处理参考读写分离、分库分表、反范式化、采用 NoSQL……如果这些扩展手段全都上了,数据响应依旧越来越慢…

[linux]gdb调试

使用gdb可以在命令行方便地调试,并且能以命令程序的方式调试源代码。 常用命令简写print-p,step-s,next-n 进入gdb //方式一 gdb test//test 为可执行文件,使用-g编译得到 //方式二 gdb -q //不显示版权信息 file test //file命令打开文件 退出gdb quit …

后台系统可扩展性学习笔记(十四)异步机制与MQ

对于 Web 服务而言,提升可扩展性的主要途径是将耗时的同步工作改成异步处理,从而允许将这些工作“外包”给多个 Worker 去做,或者提前完成能够预知的部分。 异步机制与可扩展性之间的关系需要从(异步)并行处理的优势说…

RegisterClientScriptBlock与 RegisterStartupScript区别

Page.ClientScript.RegisterClientScriptBlock而用Page.ClientScript.RegisterStartupScript是因为:RegisterStartupScript 把script放置在ASP.NET page的底部,而RegisterClientScriptBlock把script放置在ASP.NET page的顶部,用RegisterClien…

【Web后端笔记】SQL Server与java数据类型对应

编号数据库类型JDBC类型JDBC索引描述1intjava.lang.Integer4 2varcharjava.lang.String12 3charjava.lang.String1 4ncharjava.lang.String1 5nvarcharjava.lang.String12 6textjava.lang.String-1 7ntextjava.lang.String-1 8tinyintjava.lang.Integer-6 9intjava.lang.Intege…

后台系统可扩展性学习笔记

整理了一下笔记目录,将以前学习的一些知识串联起来了,比如cdn、负载均衡、中间件,以前只是各自了解了一点,现在大概理清了后台系统设计中他们各自的作用。 后台系统可扩展性学习笔记(一)概要 后台系统可扩展…

TFS 强制删除锁定文件(数据库)

TFS:TFS2010 VS:VS2012 OS:Windows2008 DB:Sqlserver2008 R2 我们在团队开发当中,版本控制是一个不可忽略的工具。我们团队使用的是TFS2010这个版本控制器。 但在团队实际协作开发当中,团队成员难免有电脑损坏或人员离职情况&…

【转】Java:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: [java]view plaincopy /** The value is used for character storage. */ private final char value[]…

Linux中exit与_exit的区别

在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出&…

光标闪烁问题的解决办法

在调用Windows API函数SetCursor设置光标时,可能会碰到闪烁的问题:移动鼠标,光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁。 在MSDN上有关SetCursor函数的备注中强调,如果Class Cursor非空,那…

视频编解码基础

文章目录前戏编解码技术流程主流视频编码标准视频传输面临的问题视频传输差错控制视频传输Qos质量保证参数人类视觉系统HVS 以及相应编码措施正餐编码层次与码流结构PB帧编码IBBP序列编码结构图像编码结构条带编码结构宏块编码结构块编码结构预测技术码率控制实例H264前戏 编解…

XShell 屏幕锁定的恢复方法(Ctrl+Q)

操作XShell过程中很多时间大家会习惯性的按CtrlS进行保存. CtrlS在XShell的作用是屏幕锁定,很多朋友会无法操作,会直接把窗口关闭。 解决方法: 快捷键 CtrlQ 即能完成解锁!转载于:https://www.cnblogs.com/liangle/p/3173475.html

adb端口被占用

程序不能执行,kill掉任务管理器里面adb服务,重新连接设备仍然有错 查到可能是adb端口被占用 查看adb用的是哪个端口:C:\Users\wanglin>adb nodaemon server 查看谁占用了这个端口:C:\Users\wanglin>netstat -ano | findstr …

实时语音通讯丢包补偿技术

文章目录基于发送端丢包补偿技术原理与媒体无关的前向差错纠正媒体相关前向差错纠正交织技术基于接受端丢包补偿技术基于插入方法基于插值方法基于重构的方法应用建议非交互式交互式拓展阅读参考丢包补偿技术可以分为两类:基于发送端补偿、基于接受端补偿 基于发送…

取得裝置可以顯示頁面的寬度

利用html中的div元素取得<div id"divGetWidth" width100%></div>Jquery:var width$(#divGetWidth).width(); //获取元素宽度 Javascript:var objdocument.getElementById(divGetWidth);var width obj.offsetWidth转载于:https://www.cnblogs.…