数码影像系统的FPGA设计_定稿.doc_第1页
数码影像系统的FPGA设计_定稿.doc_第2页
数码影像系统的FPGA设计_定稿.doc_第3页
数码影像系统的FPGA设计_定稿.doc_第4页
数码影像系统的FPGA设计_定稿.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数码影像系统的fpga设计目录1.绪论11.1课题背景11.2数码影像处理系统的现状研究11.2.1当前主流数码影像处理系统的研究方法11.2.2基于fpga的数码影像处理系统的特点21.3论文的课题意义21.4论文的主要内容31.5论文的主要创新点32.数码影像系统32.1系统总体架构42.2 i2c传感器配置单元52.2.1 i2c总线工作原理52.2.2 i2c传感器配置单元功能介绍62.3 raw转化rgb82.3.1 raw格式与rgb格式82.3.2 bayer 色彩模型92.3.3 双线性插值算法92.3.4 双线性插值算法的实现103.影像处理算法的verilog hdl设计163.1灰度图173.1.1 ycbcr空间173.1.2 由rgb产生灰度图183.2 二值图203.2.1 二值图简介203.2.2 二值图的实现203.3 sobel 边缘检测213.3.1 sobel边缘检测的算法基础223.3.2 sobel 边缘检测的fpga实现233.4 腐蚀与膨胀283.4.1 腐蚀与膨胀的应用283.4.2 腐蚀与膨胀的原理与实现294.系统验证324.1设计平台324.2灰度图的验证334.3二值图的验证344.4sobel边缘检测的验证344.5膨胀与侵蚀的验证355.设计总结与展望355.1设计总结355.2展望365.2.1全高清摄像365.2.2基于nios ii的二次开发365.2.3自动白平衡算法的初步探究376. 结论39致谢.40参考文献41摘要本研究以fpga技术为基础的嵌入式实时影像处理系统,将目前数字信号处理中广泛使用的大规模可编程集成电路芯片和影像处理技术相结合,克服了在影像处理中长期依赖pc机而且处理速度较慢的缺点,同时也避免了使用dsp芯片而导致的不能随组织架构变化而修改,具有较高的灵活性和复用性。在设计的过程中,查阅了很多相关资料,在认真研究,仔细分析并且动手实践后,最终确定提出基于fpga技术的数码影像系统的设计方案。设计实现了基于缓存技术的了raw to rgb的双线性转化算法可调用模块和sobel边缘检测可调用模块。该方案硬件平台由de2-70开发板、trdb-d5m 500m像素cmos传感器、vga显示器组成,使用verilog hdl语言设计,在单片fpga上实现了影像数据的采集和处理,包括双线性插值算法、色彩空间的变换(rgb空间转换ycbcr空间)、二值图、sobel边沿检测、膨胀和侵蚀、并且可以通过vga接口显示在显示器上。最后对系统的主要功能模块进行了调试和验证,实验证明了系统可以较好的进行影像采集、影像处理和影像的现实,证明了系统框架及算法的正确性 关键词:实时影像处理、fpga、verilog hdl、双线性插值算法、sobel边缘检测abstructthis research, designed an embedded real-time digital video processing system on basis of fpga technique, is focused on the combination of video processing technique with the large scale programmable integration chips, which are widely used in digital signal process. it overcomes the long-term dependency on pcs during the video processing and the low pace of processing, and avoids the incapability of modifying the structure with the use of dsp chips. thus, this system possesses higher flexibility and reusability.in the procedure of design, large amount of documents are considered. with attentive study, analysis and practices, a design program of digital video system based on fpga technique was raised. this research realizes the raw to rgb bi-linear algorithm invokable modules and sobel edge examination invokable modules, all of which are based on the caching technique. this programs hardware platform consists of de2-70 board, trdb-d5m 500m pixel cmos sensor and vga monitor and uses verilog hdl language design to realize on single piece of fpga the collection and processing of video data, including bi-linear interpolation, the conversion of color space (from rgb color space to ycbcr space), binary image, sobel edge examination, expansion and corrosion, and all these can be seen on the monitor through the vga interface.lastly, the main function modules of this system are modified and verified. this research clarifies the capability of collecting, processing and the presence of the images of this system and proves the correctness of the algorithm and the system framework.key words: real-time video processing, fpga, verilog hdl, bi-linear interpolation, sobel edge examination431.绪论1.1课题背景进入信息化时代之后,人类大概有80%以上的信息都来源于数码影像,影像信息较之传统的纸面媒体,所占的比例日益增高。在多媒体技术的各个领域中,影像处理技术占有极为重要的地位。影像处理技术被广泛的应用于实时视频监控,网络多媒体通信,高清数字电视等多个方面。随着各种媒体的出现和网络技术的飞速发展出现 很多新鲜的事物,如网络视频会议、电视电话会议、多媒体智能会议等,这些系统都要求对数码影像进行灵活的处理和显示。而在电力、交通、通信以及指挥调度等传统行业中,多媒体的应用在逐渐增加。这些行业中应用到的大屏幕显示系统,都要求其显示的影像能根据具体要求进行灵活的变换。因此,数码影像处理系统在民用方面有着广阔的应用前景。1.2数码影像处理系统的现状研究1.2.1当前主流数码影像处理系统的研究方法数码影像处理系统主要完成数码影像的采集、处理、存储和显示。影像采集部分完成影像的获取,影像处理部分对获得的影像数据进行相关处理,影像存储部分用于存储影像数据,影像显示部分用于显示经处理或未经处理的影像。数码影像处理系统的核心任务是处理采集来的数码影像信号。图1-1 影像处理系统目前的数码影像处理系统大体上可以分为两大类4,通用数码影像处理系统和专用数码影像处理系统。通用数码影像处理系统一般以通用计算机为基础,如大型机、小型机、工作站、微机等,其中较普及的是以微机为基础的数码影像处理系统。专用数码影像处理系统一般是针对嵌入式应用而产生和发展起来的,通常以dsp、可编程逻辑器件(fpga)等为基础.本课题是以可控编程逻辑器件(fpga)为基础的嵌入式实时专用影像处理系统做一个初步的探索。1.2.2基于fpga的数码影像处理系统的特点可编程逻辑器件(fpga:field programmable gate array)是近几年才发展起来的一种新型集成电路,是当前数字系统设计的主要硬件基础,是vhdl,verilog-hdl等硬件编程语言的物理实现工具,fpga器件以其灵活的可重配和可编程特性, 逐渐成为一种流行的设计载体被广泛地应在工业控制、 通信、 消费类电子等各种领域的复杂设计中。图1-2 fpga结构图目前主流的fpga仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如ram、时钟管理和dsp)的硬核(asic型)模 块。如图1-2所示(注:图1-2只是一个示意图,实际上每一个系列的fpga都有其相应的内部结构),fpga芯片主要由7部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式ram、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。1.3论文的课题意义1)提高系统的实时性 本课题采用verilog hdl语言进行设计,各模块间数据可并行处理,能有效提高视频图像的处理速度,满足实时性要求。 2)增强系统的灵活性 利用fpga的在系统硬件升级能力,可以在原有硬件资源不变的情况下对硬件系统进行升级。硬件升级包括缓存的升级、接口控制器的升级等。这在其他方式的视频图像处理器上是无法实现的。在使用过程中,可能会发现某些原始设计中的缺陷,或随着技术的不断更新,产生某些新的需求。此时,可以利用fpga的硬件可重配置技术,在不改变原有硬件结构的情况下,通过网络对异地的硬件电路进行远程升级,更正设计中的瑕疵或增加功能。3)为今后的进一步研究作基础本课题对以可控编程逻辑器件(fpga)为基础的嵌入式实时专用影像处理系统做一个初步的探索,完成了影像最基本的采集,简单的预处理,图像制式的转化,图像的显示和一些图形学算法。在后文中提及到的自动白平衡、自动曝光等都可以以此为基础作进一步的研究。1.4论文的主要内容1)研究数码影像系统的现状,重点关注基于fpga的嵌入式实时数码影像系统。2)使用verilog hdl语言设计数码影像处理系统的采集、处理和显示等ip模块3)对系统软、硬件进行综合测试,验证其正确性和可靠性1.5论文的主要创新点1)设计实现基于缓存技术的了raw to rgb的双线性转化算法的实时处理单元,使得转化后的影像有较好的质量。2)设计实现了sobel边缘检测的实时处理单元,对sobel边缘检测这一图形学上的重要算法做出较好的实现方式。2.数码影像系统2.1系统总体架构一个典型的数码影像处理系统一般包括以下几个部分:cmos传感器、影像处理系统、输入输出单元和显示器等,概括而言,即为前文所述的影像采集、影像处理和影像显示3大部分。影像采集事实上就是一个光电转换的过程,即将被拍摄物体的光学信号转换成可以被系统处理的数码影像信号。影像的处理和显示过程包括影像格式的转换、图形学上的算法处理然后将处理之后的图像通过显示器表现出来。结合课题需求和实际情况综合分析, 系统的硬件平台总体框架如下图所示:图2-1 系统硬件平台总体框图 数码影像系统中的大部分设计工作都集中在fpga上完成,通过分析可以确定fpga中需要包含以下几个模块(内部结构图如图2-3所示):图2-2 fpga内部各模块框图(1) i2c传感器配置单元: fpga通过i2c总线对其内部控制寄存器进行配置,使其按照一定格式进行采样输出。(2) cmos传感器数据接口:当fpga接收到cmos传送的影像数据之后,由于cmos影像传感器和fpga工作在不同频率下,此模块作为一个异步fifo,来处理异步时钟的问题。(3) raw to rgb转换模块:将得到的raw格式影像数据转化成rgb格式的影像数据,以便后续的处理和显示。(4) 4端口sdram控制器:将转换后的图像存入sdram芯片中作为帧缓存。(5) 影像处理单元:集成了本课题中所有完成的的影像后期处理模块。(6) vga控制器:,产生行同步和场同步信号,并在恰当的时候将数据输出,经由d/a转换后送至vga显示。对于图像传感器获取的数据进行前期的预处理中,i2c传感器控制单元和raw to rgb转换模块为最重要的两个模块。2.2 i2c传感器配置单元i2c(interintegrated circuit)总线是由philips公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。2.2.1 i2c总线工作原理i2c总线是由数据线sda和 时钟scl构成的串行总线,可发送和接收数据。在cpu与被控ic之间、ic与ic之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联 在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,i2c总线 上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。cpu或者ic发出的控制信号分为地址码和控制量两部分,地址 码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如曝光时间、增益等)及需要调整的量。这样,各控制电路虽然挂在同一条总线 上,却彼此独立,互不相关。 i2c总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。开始信号:scl为高电平时,sda由高电平向低电平跳变,开始传送数据。结束信号:scl为低电平时,sda由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的ic在接收到8bit数据后,向发送数据的ic发出特定的低电平脉冲,表示已收到数据。cpu向受控单元发出一个信号后,等待受控单 元发出一个应答信号,cpu接收到应答信号后,根据实际情况作出是否继传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。其逻辑关系如图2-3和图2-4所示。图2-3 i2c总线的开始和结束信号图2-4 i2c总线的响应信号2.2.2 i2c传感器配置单元功能介绍在本设计中,i2c总线主要应用在对cmos传感器的配置上。控制单元通过i2c总线和cmos通信,配置cmos给出的各个寄存器。不同得寄存器有对应的地址,和对应的控制量,从而调整cmos的个参数,包括:曝光时间、红绿蓝曝光增益、水平消隐和垂直消隐等。i2c传感器配置单元结构图如下:图2-5 i2c传感器配置单元fpga实例化模块图其中常量default_exposure为默认曝光时间, exposure_change_value 为曝光变化量,clk_freq 为系统采样时钟频率,i2c_freq为i2c总线时钟频率 lut_suze为查找表数量。图2-6 i2c传感器配置单元rtl图2.3 raw转化rgbcmos传感器的数据由数据接口转发后,仍旧是raw格式,并不能直接交由随后的图像处理模块进行图像处理,在期间要转化为使用的比较多的rgb格式,因此就有了raw to rgb转换模块。2.3.1 raw格式与rgb格式raw中文解释是“原材料”或“未经处理的东西”。raw文件包含了原图片文件在传感器产生后,进入影像处理器之前的一切影像信息。通过对颜色过滤排列的专题的了解,我们应该知道传统的传感器中,每个象素只负责获得一种颜色。每个象素承载的数据通常有10或12位(本文所选用的传感器产生的是12位数据),而这些数据就能储存到raw文件里面。raw文件最大的弊端在于,对于不同厂商的传感器,raw文件的色彩模型可能会不一样,这图像处理的不便。因此,往往会将raw转化为rgb在进行处理。rgb色彩模式(也翻译为“红绿蓝”,比较少用)是工业界的一种颜色标准,是通过对红(r)、绿(g)、蓝(b)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,rgb即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。图2-7 rgb色彩空间rgb色彩模式使用rgb模型为图像中每一个像素的r、g、b分量分配一个强度值。rgb图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现不同的颜色。2.3.2 bayer 色彩模型本课题从cmos中获取的raw文件采用的是bayer色彩模型,其制式如下图所示:图2-8 bayer模型如2.3.1所述,raw data是指原始的数据,传感器的单个像素只能感应一种颜色。如果这个原始数据的排列格式是rgrg/gbgb排列的,我们叫做bayer pattern。(这个模型最为常见)。对于传感器来说,bayerrgb的图象结构是bg/gr的。bayer模型说的是color filter 的结构,分为两种:std bayer pattern与pair pattern,其中std bayer pattern的结构是bg/gr的(见图2-8),而 pairpattern顾名思义是指bgbg/grgr的结构,即以四行为一个单位,前两行是bg的结构,后两行是gr的结构,这种结构是美光专门为此 申请了专利的,主要是在输出tv模式(ntsc/pal制)时用到。2.3.3 双线性插值算法对于bayer格式图像的彩色还原算法,国内外都有很多成熟的算法,例如:最邻近替换法、双线性插值算法、平滑色调转化算法、自适应边界敏感的插值算法、模式匹配算法等。考虑到可实现性、稳定性等因素,本论文主要基于双线性插值算法还原彩色图像,还原出来的图像效果较好,完全满足实际应用要求。参照图2-8,可以将双线性而插值算法简述为以下3种情况:1.红色/蓝色像素点的绿色分量:差值等于其相邻4个绿色像素点分量的均值,例如g8=(g3+g7+g9+g13)/42.绿色像素点的红色/蓝色分量:差值等于其相邻两个像素的红色/蓝色分量,例如r7=(r2+r12)/2,b7=(b6+b8)/23红色/蓝色像素点的蓝色/红色分量:差值等于其对角方形的4个像素点处得红色/蓝色分量均值,例如r8=(r2+r4+r12+r14)/4,b14=(b8+b10+b18+b20)/4。2.3.4 双线性插值算法的实现在使用c/c+或者其他编程语言对图像进行处理的时候,可以直接将每个像素放到二维数组之中,然后使用for语句和if语句嵌套,实现诸如双线性而插值算法非常的简单。但是在fpga中,由于做的是实时处理,sdram仅仅是用来做帧缓存,影像不断从cmos进来,再不断的传送到vga,可以将其视为fifo,在使用hdl类语言进行fpga的开发时,我们无法建立一个类似于高级编程语言中的二维数组来存取。 因此为了解决实时性的问题本文采用了基于缓存技术的双线性插值算法,其基本流程如图2-9 所示: 图2-9 双线性插值算法基本流程在通过缓存的处理后可以将3行的raw data依次放入一个3x3的寄存器矩阵中,用来计算单个像素点的转换,每过一个时钟周期,寄存器矩阵中的数据会一次时钟周期刷新一个,再通过调用寄存器矩阵中的数据进行插值运算,从而达到实时处理的功能。此模块核心代码如下:moduleraw2rgb(iclk,irst_n,/read port 1idata,idval,ored,ogreen,oblue,odval,izoom,ix_cont,iy_cont);inputiclk,irst_n;/输入时钟input11:0idata; /输入raw数据inputidval; /帧同步信号output11:0ored; /输出r通道output11:0ogreen; /输出g通道output11:0oblue; /输出b通道outputodval;/输出场同步input1:0izoom;input15:0ix_cont;/行计数器input15:0iy_cont;/列计数器wire11:0wdata0;wire11:0wdata1;wire11:0wdata2;reg13:0rred;reg13:0rgreen;reg13:0rblue;regrdval;reg11:0wdata0_d1,wdata0_d2;reg11:0wdata1_d1,wdata1_d2;reg11:0wdata2_d1,wdata2_d2;regodval;regdval_ctrl;regdval_ctrl_en;/outassignored=rred13:2;assignogreen=rgreen13:2;assignoblue=rblue13:2;line_bufferl1(/缓存.clken(idval),.clock(iclk),.shiftin(idata),.shiftout(),.taps2x(wdata0),.taps1x(wdata1),.taps0x(wdata2);always(posedge iclk or negedge irst_n)beginif (!irst_n)begindval_ctrl1)begindval_ctrl=1;endelsebegindval_ctrl=0;endendendalways(posedge dval_ctrl or negedge irst_n)beginif (!irst_n)begindval_ctrl_en=0;endelsebegindval_ctrl_en=1;endendalways(posedge iclk or negedge irst_n)beginif (!irst_n)beginrdval=0;odval = 0;endelseif(dval_ctrl_en)beginrdval=idval;odval=rdval;endelsebeginrdval=idval;odval=0;endendalways(posedge iclk or negedge irst_n)/寄存器传递beginif (!irst_n)beginwdata0_d1=0;wdata0_d2=0;wdata1_d1=0;wdata1_d2=0;wdata2_d1=0;wdata2_d2=0;endelsebeginwdata0_d2,wdata0_d1=wdata0_d1,wdata0;wdata1_d2,wdata1_d1=wdata1_d1,wdata1;wdata2_d2,wdata2_d1=wdata2_d1,wdata2;endendalways(posedge iclk or negedge irst_n)/双线性插值算法beginif (!irst_n)beginrred=0;rgreen=0;rblue=0;endelse if (iy_cont0,ix_cont0 = 2b11)beginif (iy_cont = 12d1)beginrred=wdata1_d1,2b00;rgreen=wdata0_d1+wdata1+wdata0_d1+wdata1;rblue=wdata0,2b00;endelsebeginrred=wdata1_d1,2b00;rgreen=wdata1+wdata2_d1+wdata1_d2+wdata0_d1;rblue=wdata2+wdata2_d2+wdata0+wdata0_d2;endendelse if (iy_cont0,ix_cont0 = 2b10)beginif (iy_cont = 12d1)beginif (ix_cont = 12b0)beginrred=wdata0_d2,2b00;rgreen=wdata1_d2,2b00;rblue=wdata1_d1,2b00;endelsebeginrred=wdata1,2b00;rgreen=wdata1_d1+wdata0+wdata1_d1+wdata0;rblue=wdata0_d1,2b00;endendelsebegin/ for last one x pixel of the colowm processif (ix_cont = 12b0)beginrred=wdata2_d2,2b00;rgreen=wdata2_d1,2b00;rblue=wdata1_d1,2b00;end/ normal x pixel of the colowm processelsebeginrred=wdata1+wdata1_d2+wdata1+wdata1_d2;rgreen=wdata1_d1+wdata2+wdata0+wdata0_d2;rblue=wdata2_d1+wdata0_d1+wdata2_d1+wdata0_d1;endendendelse if (iy_cont0,ix_cont0 = 2b01)beginrred=wdata2_d1+wdata0_d1+wdata2_d1+wdata0_d1;rgreen=wdata1_d1+wdata2+wdata0+wdata0_d2;rblue=wdata1+wdata1_d2+wdata1+wdata1_d2;endelse if (iy_cont0,ix_cont0 = 2b00)beginif (ix_cont = 12b0)beginrred=wdata1_d2,2b00;rgreen=wdata2_d2,2b00;rblue=wdata2_d1,2b00;end/ normal x of the colowm processelsebeginrred=wdata2+wdata2_d2+wdata0+wdata0_d2; rgreen=wdata2_d1+wdata1+wdata0_d1+wdata1_d2;rblue=wdata1_d1,2b00;endendendendmodule 经过编译后我们可以得到如下图所示的可调用模块:图2-11 raw to rgb fpga实例化模块图其rtl图为:图2-12 raw to rgb模块rtl图3.影像处理算法的verilog hdl设计verilog hdl是一种硬件描述语言(hdl:hardware discription language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 verilog hdl和vhdl是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由gateway design automation公司(该公司于1989年被cadence公司收购)开发。两种hdl均为ieee标准。verilog hdl由于其和c语言类似,拥有比基于ada语言的vhdl有更高的可读性,更重要的是它在复杂fpga上的良好性能和可拓展性,因此本课题所有的模块都是使用verilog hdl进行设计。3.1灰度图在计算机领域中3,灰度(gray scale)数字影像是每个像素只有一个采样颜色的影像。这类影像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度影像与黑白影像不同,在计算机影像领域中黑白影像只有黑白两种颜色,灰度影像在黑色与白色之间还有许多级的颜色深度。但是,在数字影像领域之外,“黑白影像”也表示“灰度影像”,例如灰度的照片通常叫做“黑白照片”。 3.1.1 ycbcr空间 正如几何上用坐标空间来描述坐标集合, 色彩空间用数学方式来描述颜色集合。常见的3 个基本色彩模型是rgb,cmyk和yuv。 ycbcr 则是在世界数字组织视频标准研制过程中作为itu - r bt1601 建议的一部分, 其实是yuv经过缩放和偏移的翻版。在ycbcr中,y是指亮度分量,cb指蓝色色度分量,而cr指红色色度分量。在yuv中, ycbcr 是在计算机系统中应用领域最广泛的版本,jpeg、mpeg均采用此格式。一般人们所讲的yuv大多是指ycbcr。ycbcr 有许多取样格式, 如42:0 , 422 ,和444。4:2:0表示每4个像素有4个亮度分量,2个色度分量 (yyyycbcr),仅采样奇数扫描线,是便携式视频设备(mpeg-4)以及电视会议(h.263)最常用格式;4:2:2表示每4个像素有4个亮度 分量,4个色度分量(yyyycbcrcbcr),是dvd、数字电视、hdtv 以及其它消费类视频设备的最常用格式;4:4:4表示全像素点阵 (yyyycbcrcbcrcbcrcbcr),用于高质量视频应用、演播室以及专业视频产品。3.1.2 由rgb产生灰度图转化为rgb格式后的数据都有3个单元分别表示和红(r)、绿(g)、蓝(b)三色空间;为了降低运算量,许多影响处理算法常常直接使用灰阶的影像处理技术做处理和分析。灰度是没有色彩,rgb色彩分量全部相等,用来确定黑白图像中的颜色深度,故黑白图片也被称为灰度图。彩色图像的灰度其实是转化为黑白图像后的像素值,转化的方法看应用的领域而定,一般按加权的方法转换: (1) 根据公式(1)求得y后,将原来的rgb(r,g,b)中的r,g,b统一用y替换,形成新的颜色rgb(y,y,y),用它替换原来的rgb(r,g,b)就是灰度图了。实现灰度转换的核心代码如下:module rgb_to_gray(en,clk,rst,/isccd_dval,i_r,i_g,i_b,/osccd_dval,o_y);inputen;/使能开关inputclk;/时钟信号inputrst;/复位信号input 9:0i_r;/r通道输入input 9:0i_g;/g通道输入input 9:0i_b;/b通道输入output9:0o_y;/y信号输出wire17:0y;reg9:0r_y;assign y = i_r*77+i_g*150+i_b*29;/灰度图仅需要y信号输出assign o_y = r_y;always(posedge clk or negedge rst)beginif(!rst)beginr_y = 0;endelseif(en!=1b1)beginr_y = 0;endelsebeginr_y = y17:8;endendendmodule 下图为代码编译后的可调用模块和其rtl结构图图3-1 rgb to gray 灰阶转化fpga实例化模块图图3-2 rgb to gray 灰阶转化rtl结构图3.2 二值图3.2.1 二值图简介二值图像是每个像素只有两个可能值的数字图像。人们经常用黑白、b&w、单色图像表示二值图像,但是也可以用来表示每个像素只有一个采样值的任何图像,例如灰度图像等。二值图像经常出现在数字图像处理中作为图像掩码或者在图像分割、二值化和dithering的结果中出现。一些输入输出设备,如激光打印机、传真机、单色计算机显示器等都可以处理二值图像;同时,二值图像经常使用在位图格式存储。事实上二值图像可以解释为二维整数格,图像变形处理领域很大程度上就是受到这个观点启发。3.2.2 二值图的实现由灰阶图像,可以进而转化为二值图像。二值图顾名思义,这个图像中只有2种颜色,黑和白,即ff和00。二值化后,可以明显的区分出背景和主要影响,这样的处理可以使得资料单纯化,更易于识别。实验中所用的二值化公式如(2)所示,其中f为图像的灰阶值,i0为灰阶门槛值: (2)其核心代码如下:module binary(input clk,input rst,input en,input 9:0 i_y,/y信号输入input 9:0 ithreshold,/门阀值output 9:0 o_binary/二值图信号输出);reg9:0y;assign o_binary = y;always(posedge clk or negedge rst) beginif(!rst)beginy = 0;endelseif(!en)beginy = 0;endelsebeginy ithreshold) ? 1023 :0; /门阀值判断endendendmodule 代码经过编译后,得到的可调用模块与rtl结构图如下:图3-3 二值图fpga实例化模块图图3-4 二值图模块rtl结构图3.3 sobel 边缘检测 边缘是指图像中灰度有解约的变化的那些像素的集合。两个觉有不同灰度值的相邻区域之间总存在边缘,它对图像识别和分析十分有用。边缘能勾画出目标物的的轮廓,使观察者一目了然,是图像识别中的重要属性。3.3.1 sobel边缘检测的算法基础sobel边沿检测常用在一些特殊的领域,由于其sobel算法的特殊性,在实现sobel算法时使用和实现双线性插值算法有类似的地方。现在给出sobel 梯度算子:gx:图3-5 矩阵gxgy:图3-6 矩阵gy对于gx从左向右从上往下编号为x1,x2,x3x8,x9,gy同理有y1,y2y8,y9,对以下像素阵列求p5的整列有:pi:图3-7 像素矩阵 (3) (4)根据sobel演算法,要求其几何平均数: (5)得出的g再和门阀值进行比较: (6)这样就可以得出单个像素点的sobel边沿检测的结果。3.3.2 sobel 边缘检测的fpga实现根据2.2中基于缓存技术的双线性插值算法,可以同样的的设计出:图3-8 sobel边沿检测算法的fpga实现在对gx,gy依次完成函数(5)、(6)的运算后,就能实现像素点的sobel边缘检测。其核心代码如下:module sobel ( input iclk, input irst_n, input 9:0 ithreshold, input idval, input 9:0 idata, output reg odval, output reg 9:0 odata);/ mask xparameter x1 = 8hff, x2 = 8h00, x3 = 8h01;parameter x4 = 8hfe, x5 = 8h00, x6 = 8h02;parameter x7 = 8hff, x8 = 8h00, x9 = 8h01;/ mask yparameter y1 = 8h01, y2 = 8h02, y3 = 8h01;parameter y4 = 8h00, y5 = 8h00, y6 = 8h00;parameter y7 = 8hff, y8 = 8hfe, y9 = 8hff;wire 9:0 line0;wire 9:0 line1;wire 9:0 line2;wire 19:0 mac_x0;/乘法器wire 19:0 mac_x1;wire 19:0 mac_x2;wire 19:0 mac_y0;wire 19:0 mac_y1;wire 19:0 mac_y2;wire 21:0 pa_x;/加法器wire 21:0 pa_y;wire 15:0 abs_mag;/开方linebuffer_3 b0 (/缓存 .clken(idval), .clock(iclk), .shiftin(idata), .taps0x(line0), .taps1x(line1), .taps2x(line2);/ xmac_3 x0 ( .aclr0(!irst_n), .clock0(iclk),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论