• FPGA verilog做基于模板的图像处理的方法   首先,在如今CPU和GPU具有极强计算能力的情况下,为什么还要考虑用FPGA图像处理呢?我觉得原因可能有:1,FPGA可以通过硬件接口直接连相机,从而实现实时在线处理。而...


    FPGA verilog做基于模板的图像处理的方法

     

    首先,在如今CPU和GPU具有极强计算能力的情况下,为什么还要考虑用FPGA做图像处理呢?我觉得原因可能有:1,FPGA可以通过硬件接口直接连相机,从而实现实时在线处理。而基于CPU和GPU需要操作相机厂商依赖的SDK,比较难做到实时在线。2,FPGA的计算特点能够很好的匹配某些图像处理模式,处理性能比CPU和GPU更强(比如基于固定模板的图像处理,也称二维卷积。图像与一个固定大小和内容的模板进行卷积,每次操作只涉及到卷积模板覆盖的局部像素区域,如均值、高斯滤波等等)。也就是说选用哪种处理器,还得看具体的应用,不同的处理器适合不同的处理场合。

     

    对于FPGA,我觉得,学会语法仅仅是入门,而要在FPGA的世界里自由的翱翔,必须熟练掌握另外两种核心的思想:流水线(pipeline)和状态机(state machine)。有了这两个强大的工具,往往才能高效、高性能的处理复杂的应用。这里FPGA做图像处理,就要用到pipeline的方式。

    首先简单介绍下pipeline是什么。对于一个计算f=(a+b)*(c+d),编写后的模块如图1所示。


    图1

    其中,每个方框指一个寄存器,+和x指相应的组合逻辑运算。如果你有好几组数据需要计算,不像C语言那样,第二组数据必须等待第一组数据计算完成之后才能进行。而流水线的模式则是:第一组a,b,c,d完成step1的加法运算后进入step2,这个时候step1的寄存器已经空出来,第二组数据即可马上进入。第一组数据结果进入到step3的时候,第二组数据已经进入step2,而第三组数据则可以进入step1进行计算。这样原始数据可以源源不断连续进行输入,无需等待前一次的数据计算完成。这个例子的代码如下:

    <span style="font-size:14px;">module admul1 (
        input [15:0] ia,
        input [15:0] ib,
        input [15:0] ic,
        input [15:0] id,
     
        output [31:0] of,
     
     
        input clk,    // Clock
        input rst  // Synchronousreset active high
    );
     
    reg [15:0] a,b,c,d;
     
    reg [16:0] ta1=0;
    reg [16:0] ta2=0;
     
    reg [31:0] f=0;
     
    assign of = f;
     
    always @(posedge clk ) begin
        // clk1
        a <= ia;
        b <= ib;
        c <= ic;
        d <= id;
     
        // clk2
        ta1 <= a + b;
        ta2 <= c + d;
     
        // clk3
        f <= ta1 * ta2;
    end
     
    endmodule</span>

    言归正传,接下来说明FPGA如何做基于模板的图像处理,这里以一个3x3的均值滤波为例。在这之前,你必须了解相机的数据是怎么传到FPGA中的。图像是一个矩阵,如图2所示,这里假设该图像只有4x4个像素。


    图2

    但是由于像素的读出一般不是能够一下全部读出的,而是一个一个或者几个像素为一组,从一个输出端口加上行、场信号(Line valid, Frame valid)进行输出,类似图3,这里假设每次只读出一个像素.


    图3

    要实现基于模板的处理,我们需要一些移位寄存器来构成行缓冲器,一般都有相应的IP可用(如果没有好用的IP可以用FIFO自己搭建)。其效果如图4,特点是每个时钟右移一个像素,其长度刚好可以储存一行图像,不能多不能少。当第二行的图像的第一个像素开始传入时,第一行的第一个像素则开始移出。

    图4

    要实现3x3的均值滤波,需要3个行缓冲器加一些外部寄存器,完整实现框图如图5.


    图5

    特点是上一个行缓冲器的数据在流入下一个行缓冲器的时候,还要输出给外部的寄存器,用来获取当前位置的像素值。假设刚好图像的前三行像素填满了这三个行缓冲器,然后每个时钟每个行缓冲器移出一个像素,那么效果就是每一个时钟就实现了一次卷积。当然这个必须要结合行有效和帧有效信号来判断当前是不是处理的有效数据。该滤波代码如下所示,不包含line buffer的实现。

    <span style="font-size:14px;">module AveFilter_core (
             // 3 pixel input
             input [47:0] imgLine3,
             input [47:0] imgLine2,
             input [47:0] imgLine1,
             //1 pixel
             output [15:0] opixel,
     
             input  ival, // keepSynchronous with imgLine2
             output oval,
     
             input clk,    // Clock
             input rst  //Synchronous reset active high
            
    );
     
     
    reg [15:0] DataLine1 [2:0];
    reg [15:0] DataLine2 [2:0];
    reg [15:0] DataLine3 [2:0];
     
    // clk1
    always @(posedge clk ) begin
             {DataLine3[2],DataLine3[1],DataLine3[0]}<=imgLine3;
             {DataLine2[2],DataLine2[1],DataLine2[0]}<=imgLine2;
             {DataLine1[2],DataLine1[1],DataLine1[0]}<=imgLine1;
    end
     
    // clk2
    reg [16:0] AddDatL11[4:0];
     
    // clk3
    reg [17:0] AddDatL12[2:0];
     
    // clk4
    reg [18:0] AddDatL13[1:0];
     
    // clk5
    reg [18:0] AddDatL14=0;
     
    // clk6
    reg [24:0] AddDatL15=0;
     
    // clk7
    reg [15:0] AddDatL16=0;
     
     
    // output valid
    reg [6:0] validarry=0;
     
    assign opixel   =      AddDatL16;
    assign oval      =      validarry[6];
     
    always @(posedge clk or posedgerst) begin
             if(rst) begin
                       validarry<=7'd0;
             end else begin
                       validarry<={validarry[5:0], ival};
             end
    end
     
     
    // clk2
    always @(posedge clk ) begin
             AddDatL11[0] <= DataLine1[0] + DataLine1[1];
             AddDatL11[1] <= DataLine1[2] + DataLine2[0];
             AddDatL11[2] <= DataLine2[1] + DataLine2[2];
             AddDatL11[3] <= DataLine3[0] + DataLine3[1];
             AddDatL11[4] <= DataLine3[2] ;
    end
     
    // clk3
    always @(posedge clk ) begin
             AddDatL12[0] <= AddDatL11[0] + AddDatL11[3];
             AddDatL12[1] <= AddDatL11[1] + AddDatL11[4];
             AddDatL12[2] <= AddDatL11[2] ;
     
    end
     
    // clk4
    always @(posedge clk ) begin
             AddDatL13[0] <= AddDatL12[0] + AddDatL12[1];
             AddDatL13[1] <= AddDatL12[2] ; // for round off ofAddDatL15
    end
     
    // clk5
    always @(posedge clk ) begin
             AddDatL14 <= AddDatL13[0] + AddDatL13[1];
    end
     
    // clk6
    always @(posedge clk ) begin
             AddDatL15 <= AddDatL14*8'd57; //  9=512/57
    end
     
    // clk7
    always @(posedge clk ) begin
             AddDatL16 <= AddDatL15[24:9]; //
    end
     
    /*
    average filter
     
    f1=[
             1      1      1
             1      1      1
             1      1      1      
     
    ]*1/9;
     
    */
     
    Endmodule</span>

    上面讨论的是每次读出一个像素的情况,但实际中以camera link接口为例,每个时钟可以同时传入5个像素,也就是说每次也必须同时处理5个像素的卷积运算。这就需要实例化5个滤波核心。以每次并行两个像素为例的实现框图如下,这需要两个滤波模块并行处理:


    图6


    参考文献

    http://www.cnblogs.com/oomusou/archive/2008/08/25/verilog_sobel_edge_detector.html


    Luchang Li

    2016.05.27


    展开全文
  • 随着图像分辨率的大幅度提升和图像处理算法复杂度的提升,传统的串行处理器已经越来越不能满足图像处理的实时性需求。多核结构处理、GPU处理及FPGA很快在实时性图像处理领域得到了迅速的发展。本章将重点介绍基于...

    随着图像分辨率的大幅度提升和图像处理算法复杂度的提升,传统的串行处理器已经越来越不能满足图像处理的实时性需求。多核结构处理、GPU处理及FPGA很快在实时性图像处理领域得到了迅速的发展。本章将重点介绍基于FPGA的实时性图像处理。

     

    FPGA通过为每个功能建立单独的硬件来实现整个应用程序所需要的逻辑功能,这使其很适合图像处理,尤其是采用流水线来处理视频流,可以在同一个时刻进行多个算法的处理。

    本章首先介绍FPGA及其生产厂家和开发流程,其次介绍基于FPGA的图像处理流程。

     

    图像处理的特点

    数字图像处理技术在当代社会发展迅速,发挥着不可替代的作用,被广泛应用于航空航天、通信、医学及工业生产等领域中。随着现代科技的不断发展、技术的不断进步,人们对数字图像处理的速度和质量提出了越来越高的要求。

    早在20世纪20年代,人们利用巴特蓝电缆图片传输系统,经过大西洋传送了第一幅数字图像。随后人们始终对图像处理技术以及它的各种应用怀有浓厚的兴趣,并对提高图像质量的技术进行了探索。1964年,美国喷射推进实验室(JPL)进行太空探测工作,他们对航天探测器徘徊者7号在1964年发回的几千张月球照片,使用数字图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,由计算机成功地绘制出月球表面地图,获得了巨大成功,为人类登月创举奠定了坚实的基础。

    随着数字集成电路技术的不断发展,以及现代图像处理技术的在理论和应用上的重大进展,图像处理技术逐渐表现出以下几个方面的发展。

    1)图像处理的网络化

    随着网络数据库的不断发展,图像处理系统走出了一人一机的圈子,服务器/客户机、Internet、浏览器、网络数据库……图像处理系统变大了,资源也越来越丰富,知识的挖掘、图像的浏览、基于内容的查询、以网络为中心的系统结构等挑战型课题不断涌现,图像处理网络化无疑是众多新技术中影响巨大的技术之一。

    2)图像处理的复杂化

    图像处理技术的疑难问题很多而且极其复杂,如:文字识别技术,图像压缩技术,以及超低码率的图像解码技术和模糊图像的复原等都是需要长期研究的课题。随着图像处理技术的快速发展,以及硬件的不断进步,这些复杂问题将出现新的突破。

    3)  处理速度的高速化

    图像处理的速度受到多方面条件的制约,由于纯软件达不到视频的实时处理的速度。随着PCI总线的引入,活动视频图像能够被送入内存中,特别是Intel公司1995年提出的NSP (native signal proccessing,自然信号处理)技术,1997年推出的含57条指令的MMX (multimedia extensions)指令集和1999年推出的含70条指令的SSE (streaming SIlVID extensions)指令集,这些重大举措使图像界成为直接受益者,计算机处理图像的速度由此有了显著提高。

    实时图像处理通常涉及到大量的运算,需要很高的计算速度、存储容量和数据带宽。这对基于传统应用而设计的通用处理器而言,是个巨大的负担。因此,以往多采用价格比较昂贵的专用图像处理芯片来满足需求。专用的图像处理器件主要有专用集成芯片ASIC(Application Specific Integrated Circuit)、数字信号处理器DSP(Digital Signal Process)和现场可编程门阵列FPGA(Field Programmable Gate Array)以及相关电路组成。它们可以实时高速完成各种图像处理算法。

     

    ​​​​​​​FPGA的特性

    FPGA是Field Programmable Gate Array的简称,也就是现场可编程门阵列。它是一种半导体数字集成电路,其内部的大部分电路功能都可以根据需要进行更改。

    FPGA如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言(如Verilog HDL、VHDL)自由地设计一个数字系统。通过软件仿真,可以事先验证设计的正确性。在PCB(电路印制板)完成以后,还可以利用FPGA的在线修改能力,随时修改设计而不必改动硬件电路。使用FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。

    FPGA器件是当今运用极为广泛的可编程逻辑器件。FPGA器件在结构上具有逻辑功能块排列,可编程的内部连线连接这些功能模块来实现一定的逻辑功能。工作时,这些配置数据存放在片内的SRAM中。使用SRAM的FPGA器件,在工作前需要从芯片外部加载配置数据,配置数据可以存储在片外的EPROM或其他存储体上,设计者可以控制加载过程,在现场修改器件的逻辑功能,即所谓现场编程。

    FPGA有很强的灵活性,可以根据需要进行重构配置,有较强的通用性,适于模块化设计;同时其开发周期短,系统易于维护和扩展,适合实时的信号处理,能够大大提高图像数据的处理速度,满足系统的实时性要求。与此同时,FPGA自身也在迅速发展,其集成度、工作速度不断提高,包含的资源越来越丰富,可实现的功能也越来越强。随着EDA技术的不断发展,FPGA依靠其真正的硬件并行性和极大的灵活性,以及能够迅速占领市场的巨大优势,已经得到了广泛的应用。尤其在视频图像处理中,需要对大量的高速、并行的视频流数据进行实时处理,FPGA更能发挥其独有的优势。FPGA在以下方面有着独特的优势:

    并行性:

    因为FPGA通过为每个功能建立单独的硬件来实现整个应用程序所需要的逻辑功能,因此,它具有并行处理的内在特点。硬件设计使其具有较高的运行速度,同时又以相对较低的成本保持软件所具有的可重新编程的灵活性。这使得FPGA很适合于图像处理,尤其是可以在底层和中间层利用图像处理固有的并行性。在视频处理中,视频的编码和解码,压缩与解压缩都需要大量的乘 法运算,FPGA提供的大量硬件乘法器可以很好的解决这个问题。

    流水线:

    对于流水线结构来说,将为流水线上的每一个图像处理操作都建立独立的硬件。在数据同步系统中,数据简单地从一个操作的输出传递到下一个操作的输入;如果数据不是同步的,需要在操作之间加入适当的缓冲区,以处理数据流或存取模式的变化。

    稳定性

    软件工具提供了编程环境,FPGA电路是真正的编程“硬”执行过程。基于处理器的系统往往包含了多个抽象层,可在多个进程之间计划任务、共享资源。驱动层控制着硬件资源,而操作系统管理内存和处理器的带宽。对于任何给定的处理器内核,一次只能执行一个指令,且基于处理器的系统时刻面临着严格限时的任务相互取占的风险。而FPGA不使用操作系统,拥有真正的并行执行和专注于每一项任务的确定性硬件,可减少稳定性方面出现问题的可能。

    可编程性

    可以根据用户的个性化需要进行不同的设计,并且可以多次反复擦除,编程使用还可以在外围电路不改变的情况下通过不同的RTL(寄存器 传输级)就可以实现不一样的功能,所以使用FPGA能快速占领市场。

    高集成性

     现阶段,有的公司的FPGA芯片已经集成了AD,达到了数模混合,这样可以大大的减少外围芯片个数,有的FPGA还集成了多个数字信号处理器件硬核,更加方便的进行数字信号处理。随着Alter公司的NIOS II的出现,片上ARM处理器的实现,以及开源高性能RISC-V的出现,片上集成处理器核心已成为一个热点,如此同一个芯片同时集CPU、DSP、FPGA为一体,同时具备他们的优势,且功耗也再降低。总而言之,FPGA的集成度越来越高,产品的体积就会越来越小,产品的功耗就会越来越低。

    近年来,随着集成芯片制造技术的发展,FPGA在速度和集成度两方面得到了飞速提高。由于它具有功耗低、体积小、集成度高、速度快、开发周期短、费用低、用户可定义功能及可重复编程和擦写等许多优点,应用领域不断扩大,越来越多的电子系统开始采用可编程逻辑器件来实现数字信号处理,FPGA在数字信号处理中得到越来越广泛的应用。在具体的实际应用过程中会存在一些实际问题,如有限字长的影响、并行和串行结构的选择和FPGA内部结构对设计的影响等

     

    ​​​​​​​FPGA在图像处理中的应用

     

    逻辑并行性:图像处理操作中的逻辑并行性很适合FPGA的使用,而且这是可以对许多图像处理算法进行显著加速的地方。此时,将通过使用并行硬件展开内部循环,代替顺序执行操作。

    数据流使图像数据以串行方式“流过”单一的功能模块。这可以被很好地映射为硬件实现,尤其是当直接连接在图像自然“流过”的摄像头或显示器上时。如果所有的操作都可以使用“流”处理,那么整个算法的实现就可以作为一个单独的流水线,并产生一个非常有效的实现。对于数据流处理,为了达到所需的数据吞吐量,常常需要使用流水线。

    在开发嵌入式视觉系统时,有效利用并行性的能力具有重要意义。并行执行多个操作可以显著降低所需要的时钟速度。当来自摄像机视频流为每秒30帧,并具有VGA分辨率时,每秒将会产生大约1000万个像素点(虽然考虑到消隐期,时钟速度通常更高)。任何有效处理都需要对每个像素点执行许多操作,因此,对于传统的串行处理器来说,需要具有很高的时钟频率。在FPGA上实现的流水线系统通常可以用本身具有的像素输入(或输出)时钟频率操作。这相当于将串行处理器的时钟速度降低了两个或两个以上的数量级。因为系统消耗的动态功耗与时钟频率直接相关,因此,低时钟频率将产生有效的低功耗设计。

     

    如果整个算法都可以在一块FPGA上实现,则系统将具有很小的尺寸。因此,只使用2~3块芯片,并将整个图像处理系统嵌入到传感器中的设计方案是完全可行的。

     

    各行各业纷纷采用FPGA芯片是源于FPGA融合了ASIC和基于处理器的系统的最大优势。FPGA能够提供硬件定时的速度和稳定性,并且无需类似自定制ASIC设计的巨额前期费用的大规模投入。可重新编程的硅芯片的灵活性与在基于处理器的系统上运行的软件相当,但它并不受可用处理器内核数量的限制。与处理器不同的是,FPGA属于真正的并行实行,因此不同的处理操作无须竞争相同的资源。每个独立的处理任务都配有专用的芯片部分,能在不受其他逻辑块的影响下自主运作。因此,添加更多处理任务时,其他应用性能也不会受到影响。

     

    ​​​​​​​Intel的FPGA

     

    FPGA的优势是完全面向具体问题可定制化的解决方案,其性能潜力巨大(比CPU和GPU都高出几十甚至上百倍),已经在如视频解码、实时数据处理、金融交易、信号分析等领域中证明。

    亚马逊的AWS云计算、阿里云的ECS服务器等已经开始支持FPGA的虚拟机,于此同时Intel在中国重庆也成立了Intel FPGA中国创新中心来支持FPGA的应用,让普通人更容易接触学习FPGA。

    Intel在2015年6月 宣布以 167 亿美元的价格,收购全球第二大 FPGA 厂商 Altera,成为该公司有史以来最贵的一笔收购时间;后来随着收购完成,Intel 也在 Altera 的基础上成立了可编程事业部。此后,Intel 一直在推进 FPGA 与自家至强处理器的软硬件结合并取得了相应的进展。于2019年4月初,英特尔宣布了其首款完全有英特尔独立设计的FPGA,基于其内部10nm公用,使用了全新Agilex命名。

    展开全文
  • FPGA图像处理之路

    2018-08-08 09:56:56
    下面论述FPGA图像处理领域中的地位: 图像处理,它是一个非常广义的概念,它包含图像增强,图像复原,图像重建,图像分析,模式识别,计算机视觉等N多个应用方向。这些应用技术有许多在本质上是相通的,但是不同...

    下面论述FPGA在图像处理领域中的地位:
    图像处理,它是一个非常广义的概念,它包含图像增强,图像复原,图像重建,图像分析,模式识别,计算机视觉等N多个应用方向。这些应用技术有许多在本质上是相通的,但是不同应用领域的关注点往往是不同的。 从网络上的开源情况来看,FPGA在图像处理方面的主要应用一直处于图像的预处理阶段。
    什么叫图像的预处理?例如图像的畸变校正,滤波器处理,边缘检测、颜色检测和阈值处理等。这些预处理都有一些共同的特征,算法较为简单,操作重复性强等。但是,除了预处理,FPGA就不能做点别的吗?有的哦,图像处理类似一个三层金字塔,分为底层,中间层,高层。
    这里写图片描述
    图像处理金字塔有三层,分别针对的是像素级、特征级和目标级。一个成熟的图像处理应用应该同时涵盖这三层。
    在像素层,我们可以对图像做一些变换,目的是增强图像的有用信息,同时抑制任何不相关的信息(如噪声)。然后通过对预处理后的图像做分割操作实现图像从像素级到特征级的过度,分割操作可以理解为检测图像中具有一些共同性质的区域。针对这些区域,依据一个或多个分类法则,将区域归类到一些预先设定的特征类型中作为后期识别的数据集。此时的数据已经不仅仅是图像了,其中包含了丰富的特征信息,如物体的位置信息等。在金字塔高层,依靠获取的特征,如有必要还可以将这些特征集作为学习的训练集来创建专用的模型,借助模型来实现识别,进而用来对实时采集的图像进行描述。

    一言以蔽之,FPGA在图像处理中的应用尚处于未成熟状态,网络上可供借鉴的大多是预处理方面的资源,而关于使用FPGA去做特征和目标层次的处理还是十分复杂的,大多数高层次的应用还处于研发阶段,具体说吧,主要是高校和大公司会去做这方面的研究与应用,而且因为是研发阶段,所以使用的FPGA套件是十分昂贵的,不计成本。显然这种实现方式是不符合商用的。因此,当你真正用一个全新的“较低廉”的“高效”的硬件方式实现了一个效果十分出色的图像处理算法,那么你当真是非常了不起的了。

    用FPGA做图像处理往往需要考虑除算法之外的更多问题,如时序约束,存储器带宽不足,资源不足,计算问题,这些问题都制约着FPGA在图像处理领域的发展。

    FPGA主要用于通信,IC验证,高速接口,高速总线等。对于成熟的高速电路,比如路由芯片,交换机芯片一般内部结构比较稳定,使用专用IC。FPGA主要用于需要频繁修改的高速数字电路,当专用功能的数字电路成熟,并且有一定量上的市场需求,就会放弃FPGA,转而流片生产专用功能的IC。

    展开全文
  • 使用TW2867进行视频输入信号的编码,存储到DDR2中,通过FPGA和ARM的联合控制,通过I2C总线进行通信,进行数字图像处理,实现了单通道视频信号输入屏幕显示、4通过视频信号输入4分屏显示、边沿检测算法,将处理结果...
     
    

       

    本报告给出一个基于FPGA+两片DDR2组成的核心板、带有4路视频输入和VGA接口的开发板进行的视频图像采集和处理系统的设计。使用TW2867进行视频输入信号的编码,存储到DDR2中,通过FPGAARM的联合控制,通过I2C总线进行通信,进行数字图像处理,实现了单通道视频信号输入屏幕显示、4通过视频信号输入4分屏显示、边沿检测算法,将处理结果通过VGA接口连接到LCD显示器上进行显示。本报告从硬件设计和软件设计两个方面对该基于FPGA的视频图像处理系统的工作过程做了详尽描述。

     

    关键词:视频图像处理、FPGA、边沿检测、4分屏显示

     

    1、设计目的

    图像处理技术和机器视觉作为一门前沿的技术,为人们的生活和工作带来了极大的便利和愉悦。由于视频信号的数据量大,信号较为复杂,这就要求视频信号处理系统具有实时采集、大容量存储和实时处理的特点。本报告提出基于现场可编程门阵列FPGA的视频图像采集与处理系统设计方案,利用FPGA并行处理快速的特点,辅以图像处理算法,用以获得不同需求的视频图像,并通过VGA显示器进行实时显示。

    2、设计任务与性能指标

    本系统中主要是通过AV接口实现视频图像采集,将采集到的4路模拟电视信号进行格式编码转换成数字信号,存储在DDR2中作为缓存,供FPGA处理器进行数字图像的处理,处理的结果再通过视频编码芯片转换为模拟电视信号通过VGA接口完成基于LCD显示器的4分屏视频图像显示功能,在图像处理中完成边缘检测算法的实现。

    3、系统总体设计与工作原理

    本系统由视频图像采集模块、存储模块、显示模块以及相关配置电路模块组成。采集模块通过视频通过解码芯片TW2867将通过AV接口连接的摄像头拍摄到的视频模拟信号转变为ITU-RBT656格式的数字视频信号;存储模块选取解码后的一帧图像数据的有效大小存入DDR2存储器中,在处理进行前和处理进行中,作为未得到处理的图像数据信息的缓存;显示模块从存储器中读出图像数据,再通过视频编码芯片ADV7123视频D/A转换芯片进行格式转换输出模拟信号,通过VGA接口在LCD液晶显示器上进行显示处理后的效果和采集显示的视频信息。

    在原理框图1中可以看到有4路视频输入信号,选择4路输入信号是因为要实现4分屏分割显示4路摄像头采集到的信息,因为摄像头硬件资源的欠缺,只使用了两个摄像头但是原理是完成实现了,只要安装够4个视频输入就一定可以显示4路视频信息。

     

     

                                                


                                                                                                  1系统设计原理

     

     

    31系统硬件设计

    因为本系统设计是基于黑金动力社区的FPGA视频处理开发平台实验板进行的,因此所使用的硬件电路也是该开发板上搭载的实验器件,均是已经较为成熟的视频图像采集与处理硬件设备。实验板型号为ALINX822 REV3.0,在该实验板上整个开发板的结构继承了一贯的核心板和扩展板的模式进行设计的。核心板主要由FPGA+两片DDR2构成,承担视频图像处理的核心算法,充分利用了FPGA并行处理的能力,加上两片DDR2构成32bit总线,整个系统的带宽高达10Gb/s,两片DDR2容量高达2Gbit,满足视频处理过程中对高缓冲区的需求。该实验板选用的FPGAALTERA公司CYCLONE IV系列中速度级别最高的C6级别,可以实现FPGADDR2之间的时钟频率达到200MDDR2内部400M,充分满足了四路1080P视频处理的需求。

                                

                                                                                                      2开发板实物图

    上图2是使用的开发板的实物图,从上面可以看到其实验板的型号,搭载的器件的一些型号信息,中间的即为核心板,核心板下面则是一块更大面积的扩展板,扩展板上则分布着VGA接口、HDMI接口、视频输出接口、视频输入接口、ARM控制器、扩展口、SD卡槽等器件。从下图3中可以看到整个开发板的系统结构图。

                                           

                              3开发板结构图

     

    本系统所使用到的器件框架结构图在图4中可以清晰地看到,跟整个开发板结构图相比,没有使用到视频输出接口和HDMI接口,其他则都用到了。TW2867是为了将视频输入接口采集到的视频信号进行编码成数字信号,ADV7123是将经过处理后的数字信号转为模拟电视信号,以供VGA接口连接显示器进行LCD屏的显示。

                                   

                                                                                        4 硬件设计原理框图

    32单元电路设计

    1,采集模块

    采集模块是选用了Techwell公司的TW2867,可以输入4路符合视频信号,PAL/NTSC/SECAM自动识别,输出BT656,可多路复用总线,FPGA端解复用,节省IO,其中TW2867IIC接口和复位引脚与STM32F103相连,通过STM32F103来对TW2867进行初始化和控制操作,其他引脚与FPGA相连。在图5中,可以看到4路视频输入接口跟TW2867相连接,实现4路视频输入。

    ARM对应引脚如下表1所示:

                                   1 ARM引脚对应表

    引脚名称

       ARM引脚

           SDA

    39

    SCL

    40

    2867_NRESET

    41

     

                                         

                                                                               5视频输入接口实物图

    FPGA对应引脚如下表2所示:

                    2 FPGA引脚对应表

    引脚名称

       FPGA引脚

     cvbs_in_cikp

         P20

    cvbs_in_cikn

    N19

    cvbs_in_data[0]

    M19

    cvbs_in_data[1]

    N20

    cvbs_in_data[2]

    M20

    cvbs_in_data[3]

    T17

    cvbs_in_data[4]

    P17

    cvbs_in_data[5]

    R17

    cvbs_in_data[6]

    N18

    cvbs_in_data[7]

    N17

                             

                                                                                         6电路设计连接图

    2,存储模块

    本部分完成图像数据在DDR2中的帧存,为后端图像进一步处理做好准备,图像数据采集后需要进行图像处理,在处理进行前和处理进行中,未得到处理的图像数据信息需放置在帧缓存中。存储模块是使用了DDR2芯片,容量为1Gbit,两片DDR2芯片构建32bit总线模式,2G容量,带宽高达10Gb,可以满足41080p视频处理的需求。

                           

                              7 DDR2实物图

                    

                                                                                 8  DDR2电路图 

    在下表3中可以看到DDR2引脚对应表:

                           3 DDR2引脚对应表

    引脚名称

    FPGA引脚

    引脚名称

    FPGA引脚

    mem_addr[0]

    U10

    mem_addr[8]

    AA3

    mem_addr[1]

    Y6

    mem_addr[9]

    U13

    mem_addr[2]

    T16

    mem_addr[10]

    V6

    mem_addr[3]

    R14

    mem_addr[11]

    AB3

    mem_addr[4]

    AA4

    mem_addr[12]

    U14

    mem_addr[5]

    T11

    mem_ba[0]

    U7

    mem_addr[6]

    AB5

    mem_ba[1]

    AB10

    mem_addr[7]

    T14

    mem_ba[2]

    T9

    mem_cas_n

    R15

    mem_dq[15]

    W10

    mem_cke[0]

    U8

    mem_dq[16]

    AB15

    mem_clk[0]

    AA17

    mem_dq[17]

    W13

    mem_clk_n[0]

    AB17

    mem_dq[18]

    AB14

    mem_cs_n[0]

    Y17

    mem_dq[19]

    AA13

    mem_dm[0]

    V5

    mem_dq[20]

    AB13

    mem_dm[1]

    AA7

    mem_dq[21]

    AA14

    mem_dm[2]

    AA10

    mem_dq[22]

    U12

    mem_dm[3]

    AA16

    mem_dq[23]

    AA15

    mem_dq[0]

    V8

    mem_dq[24]

    T15

    mem_dq[1]

    W6

    mem_dq[25]

    V15

    mem_dq[2]

    W8

    mem_dq[26]

    W17

    mem_dq[3]

    W7

    mem_dq[27]

    AB16

    mem_dq[4]

    Y3

    mem_dq[28]

    V14

    mem_dq[5]

    Y7

    mem_dq[29]

    AB20

    mem_dq[6]

    AA5

    mem_dq[30]

    W15

    mem_dq[7]

    U9

    mem_dq[31]

    AB18

    mem_dq[8]

    AA9

    mem_dqs[0]

    V10

    mem_dq[9]

    AB8

    mem_dqs[1]

    AB9

    mem_dq[10]

    Y10

    mem_dqs[2]

    Y13

    mem_dq[11]

    AA8

    mem_dqs[3]

    V13

    mem_dq[12]

    AB7

    mem_odt[0]

    R16

    mem_dq[13]

    V11

    mem_rs_n

    T10

    mem_dq[14]

    Y8

    mem_we_n

    V7

    3,显示模块

    本部分完成从DDR2中读出图像数据,通过视频编码芯片ADV7123输出模拟视频信号,通过VGA接口连接电脑LCD液晶显示器,在电脑屏幕上就可以看见处理的各种结果。图9可以看到VGA接口的实物图,有15个针孔,供接线用。

                        

                            9 VGA接口实物图

                  

          10VGA接线实物图                      11 LCD显示器实物显示

                                    

                                                                         12 ADV7123原理图

    10是直接展示了VGA接口跟带VGA接口线的LCD显示器的实物连接图,图11则展示了连接后的LCD效果图,在图12中可以看到ADV7123芯片与VGA接口的链接原理图。

    4给出了对应的引脚接线:

                          4引脚对应表

    引脚名称

    FPGA引脚

    引脚名称

    FPGA引脚

    vga_out_clk

    M6

    vga_out_rgb_g[2]

    T4

    vga_out_hs

    N6

    vga_out_rgb_g[3]

    M1

    vga_out_vs

    V3

    vga_out_rgb_g[4]

    M2

    vga_out_de

    P2

    vga_out_rgb_g[5]

    N1

    vga_out_rgb_b[0]

    R1

    vga_out_rgb_g[6]

    N2

    vga_out_rgb_b[1]

    R2

    vga_out_rgb_g[7]

    P1

    vga_out_rgb_b2]

    M7

    vga_out_rgb_r[0]

    J1

    vga_out_rgb_b[3]

    M8

    vga_out_rgb_r[1]

    K8

    vga_out_rgb_b[4]

    P7

    vga_out_rgb_r[2]

    L6

    vga_out_rgb_b[5]

    N7

    vga_out_rgb_r[3]

    M3

    vga_out_rgb_b[6]

    R7

    vga_out_rgb_r[4]

    L8

    vga_out_rgb_b7]

    P6

    vga_out_rgb_r[5]

    M4

    vga_out_rgb_g[0]

    P4

    vga_out_rgb_r[6]

    N5

    vga_out_rgb_g[1]

    R5

    vga_out_rgb_r[7]

    P3

    4ARM控制器

       STM32F103使用高性能的ARM® Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含212位的ADC3个通用16位定时器和1PWM定时器,还包含标准和先进的通信接口:多达2I2C接口和SPI接口、3USART接口、一个USB接口和一个CAN接口。 

    STM32F103中等容量增强型系列产品供电电压为2.0V3.6V,包含-40°C+85°C温度范围和-40°C+105°C的扩展温度范围。一系列的省电模式保证低功耗应用的要求。STM32F103xx中等容量增强型系列产品提供包括从36脚至100脚的6种不同封装形式;本系统使用的是64引脚的芯片。

                

                                  13 STM32F103实物

     

            

                                                                                      14 STM32F103原理图

    33器件选择与参数确定

    1),FPGA型号选择及参数

      FPGA是选用的ALTERA公司的CYCLONEIV系列的EP4CE30F23C6这款开发的高性能核心板,适合视频图像处理和高速数据采集等方面使用。

    2),数据采集芯片

    数据采集芯片是选用了Techwell公司的TW2867,可以输入4路符合视频信号,PAL/NTSC/SECAM自动识别,输出BT656,可多路复用总线,FPGA端解复用,节省IO,其中TW2867IIC接口和复位引脚与STM32F103相连,通过STM32F103来对TW2867进行初始化和控制操作,其他引脚与FPGA相连。

    3),DDR2

    存储模块是使用了DDR2芯片,选用了MICRON公司的MT47H64M16HR这款DDR2芯片,容量为1Gbit,两片DDR2芯片构建32bit总线模式,2G容量,带宽高达10Gb,可以满足41080p视频处理的需求。

    4),VGA输出编码芯片

    VGA显示部分,使用了ADI公司的ADV7123,最高可以支持1080p@60Hz输出。

    5),ARM

    ARM选择的是STM32F103,其使用高性能的ARM® Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器,丰富的增强I/O端口和联接到两条APB总线的外设。

    6),模拟摄像头

      采用CCD摄像头,红外发射灯,人眼不可见。在黑暗的环境里可以实现实时视频监控,夜视距离10m以内。

    4、系统软件设计

    1. I2C总线

      I2C总线是Philips公司提出的一种允许芯片间在简单的二线总线上工作的串行接口和软件协议,主要用于智能集成电路和器件间的数据通信。I2C总线具有以下特征:

      1只有两条总线线路:1条串行数据线(SDA)和1条串行时钟线(SCL)。

      2每个连接到总线上的器件都可以由软件以唯一的地址寻址,并建立简单的主从关系,主器件既可以作为发送器,也可以作为接收器。

      3它是一个真正的多主机总线,带有竞争检测和仲裁电路,可使多个主机任意同时发送数据而不破坏总线上的数据信息。

      4同步时钟允许器通过总线以不同的波特率进行通信。

      5同步时钟可以作为停止和重新启动串行总线的握手方式。

       

      1I2C总线时序

      I2C总线上的数据传输由起始信号,START条件发起,停止信号STOP条件结束。在I2C总线技术规范中,起始和停止条件的定义如图15所示。当时钟线SCL为高电平时,数据线SDA从高电平向低电平切换表示开始传送数据;当SCL线为高电平时,SDA线由低电平向高电平表示停止传送数据。起始和停止条件一般由主机产生。总线在起始条件后被认为处于忙状态,在停止条件产生一段时间后中总线被认为再次处于空闲状态。

                                 

                                                                                     15 I2C总线时序

      2I2C总线配置

          TW2867I2C总线配置时其接口的功能可以由两个模块来实现,其中I2C_CTR用来控制产生I2C总线的时序,I2C_cmd用来配置TW2867的命令参数的配置。

          为了对总线上的设备进行控制,必须制定一个特定的协议,即为I2C总线协议:首先I2C总线控制器建立一个数据传输开始的条件:SCL为高,SDA由高电平变向低电平。外围设备监控SDASCL,等待开始条件和正确的传输地址。开始条件到达以后,紧接着送出一个8位寄存器地址(7位地址和1位读写信号)。当SCL为高、SDA从低到高时,表示一次传输完成,等待下一次传输开始。 

    2. TW2867寄存器配置

      通过设定TW2867的内部寄存器来设定、实现TW2867的各种功能。本设计的TW2867功能是采集PAL制式的模拟信号,并在27MHz频率下进行D/A转换,以输出8位宽、格式为YCbCr 4:2:2的数字信号。寄存器配置表如表5寄存器配置表

                                      5寄存器配置表

    寄存器地址

    80

    60

    61

    FC

    7F

    D0

    E1

    设置参数

    3F

    15

    03

    FF

    80

    88

    C0

    寄存器地址

    D2

    D3

    D7

    D13

    DC

    E0

    F8

    设置参数

    01

    10

    32

    E1

    00

    10

    C4

    寄存器地址

    E2

    E3

    F0

    F1

    F2

    70

     

    设置参数

    AA

    AA

    83

    B5

    09

    08

     

    寄存器地址

    73

    7B

    7C

    7E

    89

    D1

     

    设置参数

    01

    15

    15

    C0

    01

    88

     

     

     

    1. 视频信号采集

      1ITU_RBT.656标准

      目前,数字视频的国际标准是国际电联的ITU_RBT.656格式。ITU_RBT.656标准是在国际电信联盟无线电通信部门6563号建议书中提出来的,它的全称是工作在ITU-RBT.656建议的4:2:2级别上的525行和625行电视系统中的数字分量视频信号的接口。实施这种标准是为了在525行和625行两者间具有最大的共同性,同时提出一种世界范围兼容的数字方法。该标准在单一信号源与单一终点直接提供了单向互联。数字信号采用编码成8比特字(也可认为是10比特字)的二进制信息的形式。这些信号是:视频信号、定时基准信号和辅助信号。

      2)采集数据

      摄像头采集到的视频数据经过解码芯片进行A/D转换后得到的是4:2:2视频数据流。ITU解码模块将根据ITU656标准将4:2:2的数据流解码成ITU656标准视频流。ITU656并行接口除了传输4:2:2 YCbCr 视频流外,还有行、场同步所用的控制信号。PAL制式的图像525行,每秒扫描30帧,每行数据由1728字节的数据块组成。

      在下图16ITU656行数据结构图中,可以看到每行数据包含水平控制信号和YCbCr视频数据信号。视频数据信号字是以27mb/s的速率传输的,其顺序是:CbYCrYCbYCr….,其中CbYCr这三个字指的是同址的亮度和色差信号取样,后面的Y字对应于下一个亮度取样。每行开始的288字节为行控制信号,开始的4字节为EAV信号(有效视频结束),紧接着280固定填充数据,最后4字节的SAV信号(有效视频起始)。

              

                         16 ITU656行数据结构图

      SAVEAV信号有字节的前导:FF00EAV信号,提取HFV信号,然后发送00;最后字节XY表示该行位于整个数据帧的位始命令,同时开启行列计数器,开始对接下来的位置区分SAVEAV.在每个时钟的上升沿图像数据进行解码,读取从解码芯片传来的位数视频解码流程.若检测到一行信息,判断该数据为YCr还是Cb,得到数据的开始标志FF0000XY,从而检测到SAV信号YCrCb各分量的值.视频解码流程如图17所示.

                                                                    

                            17视频编码流程图

    6为定时基准信号格式.其中,F为场标志位,第一场为“0”,第二场为“1”;V“0”表示处于有效数据期,“1”表示处于场消隐期;H“0”,则为SAV信号,表示一个数据块的开始,“1”则是EAV信号,指示一个数据块的结束;P2、P1、P是保护比特位,其值取决于FHV的值.根据这个特征,接收模块可以建立状态机,仅当状态严格完成FFG00G00的转换才开始采集有效数据,送入SDRAM进行存储.

    6 定时基准信号格式表

    比特

    第一个字(FF

    第二个字(00

    第三个字(00

    第四个字(XY

    9

    1

    0

    0

    1

    8

    1

    0

    0

    F

    7

    1

    0

    0

    V

    6

    1

    0

    0

    H

    5

    1

    0

    0

    P3

    4

    1

    0

    0

    P2

    3

    1

    0

    0

    P1

    2

    1

    0

    0

    P0

    1

    1

    0

    0

    O

    0

    1

    0

    0

    O

    4,DDR2存储

    本系统使用的是SDRAM的输入输出缓存电路为FIFO结构,把SDRAM设置为4个端口模式,两个端口用于把FIFO的数据送入DDR2,另外两个端口用于把数据从DDR2中读到FIFO中。读和写操作采用的时钟频率不同,写用的是解码芯片的27MHz时钟,而读出采用VGA25MHz时钟。

    FPGADDR2进行控制时,首先是对DDR2的初始化进行配置,写寄存器,确定CAS的潜伏期、突发传输模式等,然后再经过激活命令激活对应地址的bank,同时输入行地址,最后通过读命令或者写命令输入列地址,将相应数据读出或写入对应的地址。DDR2的存储单元每隔一段时间刷新以保持数据稳定,否则数据丢失的可能性比较大。两个DDR2循环读写切换,分别为:在一帧时间内显示器接收的图形信号,它的产生是在同步信号(VS)经过二分频后,若VS为低电平,向一个DDR2中写入数据,反之从该DDR2中读取数据。在完成读写地址的信号切换后,数据输出切换也是必须的。

               

                                        图18 DDR2工作图

     

    5, VGALCD显示

    DDR2中存储的是4:2:2格式的视频数据,由于该格式视频的每个像素点都不包含色度分量和亮度分量,从中读取数据后,必须将格式转换成4:4:4的视频数据格式,因此转换后CbYCr是全面的。为了使得VGA显示器能够显示该视频,首先VGA使用的是RGB色彩空间,必须将数据经过从CbYCrRGB模块转换,其次是将之前转换好的YCbCr空间再次转换为RGB空间,再次输出到VGA控制器,在此过程中,输出24RGB数据到编码芯片ADC7123,输出的数据还包括VGA_HA\VGA_VS信号。

    6Sobel边沿检测的实现

      Sobel边沿检测算法是一种基于梯度的图像边沿检测方式,该算法在硬件上容易实现,且能够平滑一定的噪声,边沿检测效果较好。Sobel算子的边沿检测是在图像空间内利用2个方向模板与图像进行相邻卷积来完成的。这两个方向模板,一个为检测水平边沿,一个是检测垂直边沿。它们的方向梯度算子模板如下:

                                                   

                          19梯度算子图

     以模板内的数字为权重系数,与图像平面所对应的像素值相乘可以求出水平梯度X和垂直梯度Y,然后根据梯度计算公式可以求出梯度GXY各自平方的和的平方根。

    5、系统安装调试

    1. 一路视频信号采集显示

      从图2021中可以看到系统成功实现了视频图形采集和VGA显示,这里只截取了两个场景的图像。

           

                                 20单视频输入1                                                          21单视频输入2

    2. 4路视频信号采集显示

      通过图22232425可以清楚地看到整个系统的接线布局图,因为只有两个摄像头,所以只能采集到两个视频输入信号,因此在屏幕上只显示出来了两个窗口信息,另外两个窗口是蓝屏显示。在原理上实现了4路视频分割4分屏显示。

             

             22整体系统连接图              23 路视频输入4分屏显示1

             

               图24路视频输入4分屏显示2            25 实物连接图

    3. 边沿检测

              

                26未边沿检测图              27边沿检测1对比图

           从图26和图27中可以看到未边沿检测图形和边沿检测后的图形明显不同,可以看到在图27中有明显的边沿轮廓,即实现了Sobel算法的边沿检测功能。图2829是另外两个场景的边沿检测效果图。

               

                 28边沿检测2                      29 边沿检测3

    6、出现问题与解决方法

    1. I2C总线配置问题

      因为最开始对TW2867I2C总线配置没有按照I2C总线规范和标准时序来进行,所使用的时序关系跟图15中的时序关系不同。对SDASCL的变化规律不清除,不能把握数据传输的开始条件,也不能监控何时传输完成,因此对后面的工作产生影响。通过查阅TW2867芯片资料和网上搜集信息最后解决了这一问题。

    2. 寄存器配置问题

      对于TW2867寄存器配置存在问题,同样是对此芯片的寄存器地址设定的参数不符合系统要求,这些参数是通过I2C_cmd模块得出来的,总开始仅仅让I2C_ctr来控制产生I2C总线的时序,却忽视了I2C_cmd的配置的重要性。

    3. 下载电路驱动问题

      最开始连接不了开发板,因为USB的下载驱动没有安装上去,后来安装后得以成功将程序烧录到板子里,从而进行实验展示。

    4. 参数设定问题

      对视频输入信号的格式、经过TW2867处理后的格式不了解,因为要输出显示在VGA显示器上,中间视频信号从输入到显示整个过程中的信号的A/DD/A转换、编解码的状态不是特别清楚,以至于在有些参数设定的小问题上出现错误,另一方面对于解码芯片的时钟频率等出现模糊理解等问题,最后参考网上别人的示例才得以解决。

    5. 边沿检测算法的设计

      边沿检测算法有很多种类,比较常见的就是本系统中使用的那样,求水平和垂直分量的平方和的根,之前采用一种更复杂的算法,因为一些原因没能得以实现,巧合中看到有前辈使用这种简单算法进行边沿检测,同样也得出了比价不错的结果。

    7、总结

    基于FPGA的视频图像采集与处理系统相对于使用其他硬件进行处理的效果更好,有更多的优势,而且成本低、功耗低、信噪比高、电路集成度高、速度快且接口方便。本系统在设计的过程中,选用的芯片也是比较成熟的各类处理芯片,特别是FPGA是使用ALTERA公司的CYCLONE IV系列的EP4CE30F23C6这款开发的高性能核心板,适合视频图像处理和高速数据采集等方面使用。基于FPGA的视频图像处理可以为嵌入式系统开发、人脸识别技术的产品化、无线视频传输等应用提供了一定的参考价值。本系统是完成一个基本的显示功能和边沿检测算法的实现,虽然简单但也涉及到使用FPGA进行图像处理的各个方面,为以后的研究有一定的引导作用,适合深入地研究下去,结合数字图像处理、人脸识别等图像技术在将来会有更好的工程实践效果。

    8、附件

    8.1原理图(用Protel制作)

                                

               ADV7123原理图                      FPGA原理图

                                          

                              DDR2原理图

    8.2程序清单

    Sobel算法重点程序

    Sobel Sobel_m0(

     .iCLK(vga_out_clk),

     .iRST_N(rst_n),

     .iTHRESHOLD(8'd50),

     .iDVAL(ch0_vout_rd_req_d1),

     .iDATA({ch0_vout_ycbcr[23:16],2'd0}),

     .oDVAL(),

     .oDATA(Sobel_data)

    );

    8.3程序清单

    采集视频信号程序

    video_pro#(.MEM_DATA_BITS(MEM_DATA_BITS))video_pro_m0(

          .rst_n(1'b1),

          .vin_pixel_clk(cvbs_in_clkn),

          .vin_vs(ch0_vs),

          .vin_f(ch0_f),

          .vin_pixel_de(ch0_de),

          .vin_pixel_yc(ch0_yc_data),

          .vin_scaler_clk(phy_clk),

          .vin_s_width(12'd720),

          .vin_s_height(12'd576),

          .clipper_left(12'd0),

          .clipper_width(12'd720),

          .clipper_top(12'd0),

          .clipper_height(12'd576),

          .vin_t_width(12'd720),

          .vin_t_height(12'd576),

          .vin_K_h(16'h0100),

          .vin_K_v(16'h0100),

          .vout_pixel_clk(vga_out_clk),

          .vout_vs(vga_out_vs),

          .vout_pixel_rd_req(ch0_vout_rd_req),

          .vout_pixel_ycbcr(ch0_vout_ycbcr),

          .vout_scaler_clk(vga_out_clk),

          .vout_s_width(12'd720),

          .vout_s_height(12'd576),

          .vout_t_width(12'd720),

          .vout_t_height(12'd576),

          .vout_K_h(16'h0100),

          .vout_K_v(16'h0100),

          ///////////mem

          .mem_clk(phy_clk),

          .wr_burst_req(ch0_wr_burst_req),

          .wr_burst_len(ch0_wr_burst_len),

          .wr_burst_addr(ch0_wr_burst_addr),

          .wr_burst_data_req(ch0_wr_burst_data_req),

          .wr_burst_data(ch0_wr_burst_data),

          .wr_burst_finish(ch0_wr_burst_finish),

          .rd_burst_req(ch0_rd_burst_req),

          .rd_burst_len(ch0_rd_burst_len),

          .rd_burst_addr(ch0_rd_burst_addr),

          .rd_burst_data_valid(ch0_rd_burst_data_valid),

          .rd_burst_data(ch0_rd_burst_data),

          .rd_burst_finish(ch0_rd_burst_finish),

          .base_addr(2'd0)

    );

    4分屏显示重要程序

    vout_display_pro vout_display_pro_m0(

          .rst_n(rst_n),

          .dp_clk(vga_out_clk),

          .h_fp(H_FP[11:0]),

          .h_sync(H_SYNC[11:0]),

          .h_bp(H_BP[11:0]),

          .h_active(H_ACTIVE[11:0]),

          .h_total(H_TOTAL[11:0]),

          .v_fp(V_FP[11:0]),

          .v_sync(V_SYNC[11:0]),

          .v_bp(V_BP[11:0]),

          .v_active(V_ACTIVE[11:0]),

          .v_total(V_TOTAL[11:0]),

          .hs(vga_out_hs),

          .vs(vga_out_vs),

          .de(vga_out_de),

          .rgb_r(vga_out_rgb_r),

          .rgb_g(vga_out_rgb_g),

          .rgb_b(vga_out_rgb_b),

          .layer0_top(12'd0),

          .layer0_left(12'd240),

          .layer0_width(12'd720),

          .layer0_height(12'd576),

          .layer0_alpha(8'hff),

          .layer0_rdreq(ch0_vout_rd_req),

          .layer0_ycbcr(ch0_vout_ycbcr),

          .layer1_top(12'd0),

          .layer1_left(12'd960),

          .layer1_width(12'd720),

          .layer1_height(12'd576),

          .layer1_alpha(8'hff),

          .layer1_rdreq(ch1_vout_rd_req),

          .layer1_ycbcr(ch1_vout_ycbcr),

          .layer2_top(12'd576),

          .layer2_left(12'd240),

          .layer2_width(12'd720),

          .layer2_height(12'd576),

          .layer2_alpha(12'hff),

          .layer2_rdreq(ch2_vout_rd_req),

          .layer2_ycbcr(ch2_vout_ycbcr),

          .layer3_top(12'd576),

          .layer3_left(12'd960),

          .layer3_width(12'd720),

          .layer3_height(12'd576),

          .layer3_alpha(12'hff),

          .layer3_rdreq(ch3_vout_rd_req),

          .layer3_ycbcr(ch3_vout_ycbcr)

    );

    参考文献

    [1]王诚,蔡海宁,吴继华AlteraFPGA/CPLD设计(基础篇)[M]2北京:人民邮电出版社,2011:5058

    [2]夏良正数字图像处理[M]南京:东南大学出版社,1999:154 160.

    [3]姜勇.基于FPGA的实时图像处理系统的研究:[硕士学位论文].长春:长春理工大学,2003

    [4]张永军.基于FPGA的图像处理系统设计与算法实现研究[D],重庆大学,2006

    [5]万鸣华.基于FPGA的图像处理加速研究[D],南京理工大学,2007

    [6]阮秋琦.数字图像处理学(第二版)[M].北京,电子工业出版社,2007

    [7]龚声蓉,刘纯平,王强等.数字图像处理与分析[M],北京,清华大学出版社,2006

    [8]蒋立东.VHDL语言程序设计及应用.北京:北京邮电大学出版社,2001.8

    [9]刘文英,刘艳彬.基于FPGA的视频图像预处理系统的设计与实现。科技信息,2011,23:41-42

    [10]邵应昭,任爱峰,初秀琴.基于FPGA的视频监控系统.电子元件器应用,2010,1212):24-26

    [11]张海青.基于FPGA图像处理系统的关键算法研究及硬件实现:[硕士学位论文].江苏:江苏大学,2005

    [12]孙伟.基于FPGA的图像分割提取系统研究:[硕士学位论文].南京:南京航空航天大学,2010

    [13]相恒伟.基于FPGACCD工业相机的研究与开发:[硕士学位论文].江苏:江南大学

     

     

    展开全文
  • 数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释。 为存储、传输和表示而对图像数据进行处理,以便于机器自动理解。 图像处理(image processing): 用计算机对图像...

    数字图像处理方法的重要性源于两个主要应用领域:

      • 改善图像信息以便解释。

      • 为存储、传输和表示而对图像数据进行处理,以便于机器自动理解。

    图像处理(image processing):

    用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。

    常用方法:

      • 图像变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。

      • 图像编码压缩:图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。

      • 图像增强和复原:图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。

      • 图像分割:图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。

      • 图像描述:图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。

      • 图像分类(识别):图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。

    图像分类:

    在计算机中,按照颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像和真彩色RGB图像四种基本类型。

    二值图像:

    一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。


    二值图像

    灰度图像:

    灰度图像矩阵元素的取值范围通常为[0,255]。因此其数据类型一般为8位无符号整数的,这就是人们经常提到的256灰度图像。“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑到白的过渡色。二值图像可以看成是灰度图像的一个特例。


    灰度图像

    索引图像:

    索引图像的文件结构比较复杂,除了存放图像的二维矩阵外,还包括一个称之为颜色索引矩阵MAP的二维数组。是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值“直接映射”为调色板数值。索引图像一般用于存放色彩要求比较简单的图像,如Windows中色彩构成比较简单的壁纸多采用索引图像存放,如果图像的色彩比较复杂,就要用到RGB真彩色图像。索引图像细节不在赘述。

    索引图像

     RGB彩色图像:

    RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。 

    彩色图像

    数字图像空间域处理:

    空间域处理分为灰度变换和空间滤波。

    灰度变换:

    灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法。

    变换函数法:

      • 图像反转

      • 对数变换

      • 幂律(伽马)变换

      • 分段线性变换 

    灰度变换函数曲线图

    直方图处理法:

      • 直方图均衡

      • 直方图匹配

      • 局部直方图处理

      • 直方图统计


        matlab直方图均衡处理

        空间滤波:

        空间滤波,就是直接在灰度值上,做一些滤波操作。滤波一词,其实来源于频域,将某个频率成分滤除的意思。大部分线性的空间滤波器(比如均值滤波器),是在空间上进行一些灰度值上的操作,这个线性空间滤波器与频域滤波器有一一对应的关系(比如均值滤波器其本质就是低通滤波器)。

        通常分为低通滤波(平滑化)、高通滤波(锐化)。

        平滑滤波器:

        在空间域上考虑,所指的平滑滤波器,有平均滤波与加权平均滤波两种形式。


                                                                                            原始图像                                                                                         平均滤波


    加权平均滤波

    统计排序滤波器:

    统计排序滤波器的运用也广泛,其是很典型的非线性滤波器。主要包括了,最大值滤波器,最小值滤波器,中央值滤波器等等。这里作为代表的,主要说中央值滤波器,中央值滤波对于去除椒盐噪声特别有效。

    所谓中央值滤波器,就是将滤波器范围内的像素的灰度值,进行排序,选出中央值作为这个像素的灰度值。同理可解释最大值滤波器与最小值滤波器。


    原始图像


    椒盐噪声


    中值滤波器

    锐化滤波器:

    所谓的锐化,即是将图像的细节强调出来。主要算子----拉普拉斯算子。

    图像锐化

    图像频率域滤波:

    所谓的图像频率,就是这个图空间上的灰度变换的快慢。

    为什么要在频率域中进行图像处理?

    可以利用频率成分和图像外表之间的对应关系。一 些在空间域表述困难的增强任务,在频率域中变得非常普通 。

    滤波在频率域更为直观,它可以解释空间域滤波的某些性质 。

    可以在频率域指定滤波器,做反变换,然后在空间域使用结果滤波器作为空间域滤波器的指导。

    主要变换为傅里叶变换。傅里叶变换是将时域信号分解为不同频率的正弦信号或余弦函数叠加之和。


    时域与频域

    频域滤波器分为:

      • 理想低通滤波器

      • 巴特沃斯低通滤波器

      • 高斯低通滤波器

      • 理想高通滤波器

      • 巴特沃斯高通滤波器

      • 高斯高通滤波器

      • 带阻滤波器

      • 带通滤波器

      • 陷波滤波器

    其他图像处理相关:

    图像处理与重建

    彩色图像处理

    小波和多分辨率处理

    图像压缩

        霍夫曼编码

        Golomb编码

        算术编码

        块变换编码

        小波编码

        余弦变换

    形态学图像处理

        腐蚀、膨胀

        边界提取

        空洞填充

        连通分量的提取

        细化与粗化

    图像分割

        边缘检测

        阈值处理

        区域分割

    目标识别 

    FPGA技术:

    一般地,图像处理大致可以分为低级处理和高级处理:低级处理的数据量大,算法简单,存在着较大的并行性;高级处理的算法复杂,数据量小。在图像处理的实现手段上,图像低级处理阶段,利用软件来实现是一个很耗时的过程,但是利用硬件实现,就可以对大量数据进行并行处理,能够极大的提高处理速度;而图像高级处理阶段,利用软件来实现则具有较高的性价比。因此,图像处理系统中可以利用高速硬件模块(如FPGA)承担图像低级处理任务。这样对大量图像数据进行了低级处理,使系统在减少数据传输量的同时还极大的提高了实时性能。

    通用计算机:

    通用计算机是基于冯.诺依曼结构的,通过高级语言(C,C++等)编写程序代码,整个执行过程是单指令单数据的串行处理过程,在很多情况下该系统结构上的局限性使它对低级图像的处理不能够满足高速处理的要求,它适合各种图像处理算法的验证,适用于一些实时性要求不高的场合。

    并行处理机:

    在许多场合下,单个CPU不能够实现实时数据处理的时候,采用多个CPU同时工作的并行处理为解决此问题提供了可能。各国学者在这方面作了大量的工作,并己经研究出多种并行结构和编程语言,它克服了单个处理器串行工作的局限性,提高了系统的性能。虽然对并行处理进行了大量的研究,但这个领域仍不成熟。处理单元负载不均衡,并行算法编程困难,理论上并行处理所应达到的性能和实际性能相比有较大差距。

    专用集成电路:

    专用集成电路是针对于某一固定算法或应用而专门设计的硬件芯片。许多图像处理算法采用通用处理器和DSP来实现难以满足速度需要,而必须采用ASIC来实现,在各种算法实现方案中使用ASIC来实现是最快的。但是,ASIC在实际应用中也有其缺点:ASIC从设计到应用需要较长的时间周期;ASIC因为属于专用硬件芯片,所以需求数量较少,成本也就非常高;由于ASIC是为专用目的设计的,当设计成型并且流片成功就不能改动,所以在设计中当算法因故需要改变时就要设计者重新设计芯片和硬件电路;当ASIC里存在硬件设计的错误时,并且在投入生产前未能发现的话,唯一解决的办法是把产品回收,而这样做的后果往往是芯片商付出沉重的经济代价。ASIC较低的灵活度往往使其局限于非常有限的应用中并容易产生性能瓶颈,因此由ASIC构建的图像处理系统,缺乏灵活性。

    数字信号处理器:

    数字信号处理器(DSP),是专门为快速实现各种数字信号处理算法而设计的、具有特殊结构的微处理器,通常使用C语言进行编程,其处理速度可达到2000MIPS,比最快的CPU还快10-50倍。数字信号处理器的内部采用专用硬件实现一些数字信号处理常用的运算,所以它进行这些运算速度非常快,如乘加(MAC)运算只需要一个时钟周期。但是从根本上来说,DSP只是对某些固定的运算提供硬件优化,其体系仍是串行指令执行系统,并且这些固定优化运算并不能够满足众多算法的需要,这使得它的使用受到限制。

    现场可编程门阵列(FPGA):

    FPGA器件是当今运用极为广泛的可编程逻辑器件,也被称为可编程ASIC。FPGA器件在结构上具有逻辑功能块排列,可编程的内部连线连接这些功能模块来实现一定的逻辑功能。FPGA器件的功能由逻辑结构的配置数据决定。工作时,这些配置数据存放在片内的SILAM中。使用SRAM的FPGA器件,在工作前需要从芯片外部加载配置数据,配置数据可以存储在片外的EPROM或其他存储体上,设计者可以控制加载过程,在现场修改器件的逻辑功能,即所谓现场编程。利用它用户不仅可以方便地设计出所需的硬件逻辑,而且可以进行静态重复编程和动态在系统重配置,使系统的硬件功能可以像软件一样编程来修改,从而可以实时地进行灵活而方便的更新和开发,大大提高了系统设计的灵活性和通用性。与此同时,FPGA自身也在迅速发展,其集成度、工作速度不断提高,包含的资源越来越丰富,可实现的功能也越来越强。

    FPGA与图像处理
    FPGA能在设计上实现硬件并行和流水线(pipeline)技术,而这些都不能在DSP上实现。因此,对于实时图像处理而言,与本质上仍然是依靠串行执行指令来完成相应图像处理算法的DSP系统相比,FPGA有很强的灵活性,可以根据需要进行重构配置,有较强的通用性,适于模块化设计;同时其开发周期短,系统易于维护和扩展,适合实时的信号处理,能够大大提高图像数据的处理速度,满足系统的实时性要求,因此采用FPGA器件是个不错的选择。

    文章来源:卿萃科技FPGA极客空间 微信公众号

    版权所有权归卿萃科技,转载请注明出处。

    作者:卿萃科技ALIFPGA



    展开全文
  • 图像处理的算法转换为FPGA系统设计的过程称为算法映射。这里将介绍将软件图像处理算法转换为FPGA的映射技术。 算法结构 映射过程的首要目标便是确定算法设计的结构,这里主要介绍在FPGA中常用的两种算法设计结构...
  • 数字图像处理技术在当代社会发展迅速,发挥着不可替代的作用,被广泛应用于航空航天、通信、医学及工业生产等领域中。随着现代科技的不断发展、技术的不断进步,人们对数字图像处理的速度和质量提出了越来越高的要求...
  • 注:本博文将讲解一个FPGA设计图像处理系统实例,此实例的功能为高速追踪乒乓球。读者可以参考本博文的算法思路、工程框架,但博主并不提供工程。 当前,实用的图像处理系统都要求高速处理。目前广泛采用软件进行...
  • 基于DSP FPGA实时图像处理硬件平台系统的设计,胡健楠,胡绍海,目前,数字图像处理广泛应用于各个领域。本设计是基于DSP FPGA的硬件平台进行实时图像处理的设计,分为外部接口板和图像处理硬件平�
  • 实时图像处理技术,尤其是基于多核DSP+FPGA架构的实时图像处理技术,因为该种方案本身所具有种种优点,又成为了现今各项图像处理新技术研究中的备受关注的焦点 红外图像 细胞图像 图像拼接 2.总体设计方案: FPGA...
  • 随着处理器的性能以每两年翻一番的速度不断提升,以及多核CPU和FPGA等并行处理技术日益受到关注,视觉系统设计人员现在可以应用复杂的算法来可视化数据,并创建出更加智能的系统。性能的提高意味着设计
  • 准备学习做图像处理,首先要对图像处理里的一些基本概念有一定的了解,不然不论是Verilog还是MATLAB代码实现没有任何意义,因此总结一些有关图像处理的基本知识。数字图像处理又称为计算机图像处理,它是指将图像...
  • 一高性能FPGA作为核心的高速图像采集处理卡,较好的满足了大多数图像处理系统中数据量大,实时性强的要求,同时在FPGA中用硬件描述语言实现了图像处理的预处理算法,相对于软件实现预处理算法具有极大的速度优势,...
  • 使用FPGA实现各种算法时,状态机是很常用的方法,在SysGen中有两种非常简便的方法构建状态机,一是使用Mcode,以switch-case语句轻松实现,二是使用SysGen自带状态机模块。  状态机 假设我们要从01序列中检测出...
  • 计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息。目前主要有CPU、GPU、ASIC、DSP、FPGA等计算平台。 常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的计算能力有限,对于...
  • 对于集FPGA和ARM于一体的Zynq系列平台来说,图像处理是Zynq平台主要的应用方向之一。图像采集部分是图像处理系统的重要组成部分,它通过图像传感器将外部的图像信息采集进来,转换为数字信号存储到系统的帧存储器中...
  • 数字图像处理是指将图像信号转换成数字信号并对其进行处理的过程。数字图像处理在当代社会发展中发挥着不可替代的作用,它广泛应用于几乎所有与成像有关的领域,如航空航天、生物医学工程、工业检测、机器人视觉、...
  • Linux OS下的FPGA图像加速处理Linux_GUI加速(1)_GUI系统概述前言Linux GUI子系统概述Linux GUI子系统的构成及工作流程我们能做些什么 Linux_GUI加速(1)_GUI系统概述 开始前的几点说明: (1) 本文会尽量从初学者的...
  • M/D-CAP3U是天津雷航光电科技有限公司推出的一款复合加速计算平台,由Xilinx的28nm制程的FPGA — XC7K325T-3FFG900I和NVidia的16nm制程的GPU — TX2互联构成。 产品细节 FPGA的前端接口 支持CameraLink Base输入1路 ...
  • 机器视觉系统的研究具有重大意义以及广阔的市场前景,而高速以及一体化、个性化是机器视觉系统的发展方向,就需要有一款嵌入式通用高速图像采集处理硬件平台来适应机器视觉的发展。目前国内的机器视觉厂商主要还是以代...
1 2 3 4 5 ... 20
收藏数 2,472
精华内容 988