• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 电子设计 > 电源技术 > 电源技术 > 基于FPGA的 像裁剪电路的设计与实现

基于FPGA的 像裁剪电路的设计与实现

录入:edatop.com    点击:

摘要:本文提出了一种基于FPGA的图像裁剪电路的设计方法,利用像素的抽取改变图像的分辨率,从而达到图像裁剪的效果。与传统的方法相比,这种方法简单易行,开发成本低,图像的清晰度能满足一定的要求。此方法数据处理速度快,尤其适用于动态图像的处理。
关键词:现场可编程门阵列:图像裁剪;分辨率

0 概述
    图像处理电路是信息控制系统中必不可少的环节,广泛应用于生产生活中,如住宅小区的安全监控系统、生产线的质量监控系统、电视机的机顶盒等,因此图像的处理电路的开发受到了人们的重视。裁剪压缩是图像处理技术中一个重要的内容,传统的方法往往采用DSP芯片或插值算法来实现图像的裁剪压缩功能,这种方法存在电路设计复杂、开发成本高的问题。本文提出了一种基于FPGA的设计方法,利用像素的抽取改变图像的分辨率,从而达到图像裁剪的效果。这种设计方法简单易行,图像的清晰度能满足一定的要求。特别是由于不需要数学运算,所以此方法数据处理速度快,尤其适用于一般要求的动态图像的处理。

1 电路设计方案
    本设计是一个基于FPGA的数字图像的裁剪电路,电路框图如图1所示。其中FPGA中包含了三个功能模块电路的设计:

 


    (1)SDRAM的控制模块:预处理的图像存在SDRAM存储器中,通过SDRAM的控制模块,将图像信息读出并进行相应的处理,提供给下一个电路模块使用。
    (2)图像裁剪电路:包括像素的抽取和缓存电路,采用改变图像分辨率的方法,将有效的像素提取出来提供给显示电路,使图像进行4:3或2:3等多比例变化,以达到不同的视觉效果。
    (3)显示控制电路:根据VGA显示屏的特点,产生时序驱动信号控制图像数据显示。 [p]

2 设计实现
2.1 SDRAM控制模块的设计
    预处理的图像需要放在存储器中,对于大部分的FPGA来说器件内部都含有4k的内存,但考虑到图像的容量及今后对动态图像处理功能的扩展,本设计选用了存储容量为8M外存的SDRAM。8M的SDRAM在存储空间上划分了4个BANK区块,每个BANK有16位数据宽。SDRAM虽然存储的容量大,但是其内部结构复杂,对该器件的读写使用必须设计专门的控制器进行控制操作。由于本设计采用的图像色彩为30位,RGB各10位,显然用一个16位宽度BANK不能存储一个像素,因此采用了2个BANK合并存储像素,如图2。这样一来,在SDRAM控制电路上需要仿真成四个虚拟的数据端口(两个写端口+两个读端口),在同一时刻将一个像素RGB从两个BANK中同时写入或读出,合并之后形成一个完整的数据。

 


    根据这样的存取原则,一个具有640×480个像素、色彩为30位的图像,就需要同时BANKl和BANK2中存入640×480个16位的信息,SDRAM控制模块读入数据的端口程序如下所示,读出数据同理。
    SDRAM_Control_4PortSDRAM0(
    .WRl_DATA({R[9:0],G[9:5]}),
    .WRl(E N),
    .WRl_ADDR(0),----BANKl的地址
    .WRl_MAX_ADDR(640*480),
    .WRl_LENGTH(9'h100),
    .WRl_LOAD(RST_0),
    .WR1_CLK(P1X_CLK),
    .WR2_DATA({G[4:0],B[9:0]}),
    .WR2(E N),
    .WR2_MAX_ADDR(22'h100000+640*480),
    .WR2_LENGTH(9'hl00),
    .WR2_LOAD(RST_0),
    .WR2_CLK(PIX_CLK);
2.2 图像裁剪模块
    在图像的裁剪处理上,有两种方案可选,第一种为线性插值算法。这是一种广泛使用的图像插值算法,通常使用8邻域采样加权产生新像素:


        第二种为抽取算法,即通过变换分辨率的方法实现,例如将原来的640×480的分辨率变换为320×240或120×60的分辨率,这样图像的宽高比近似为4:3或16:8。比较两种算法,第二种算法通过直接丢弃部分原始数据达到分辨率的压缩,虽然有图像信息损失,但在图像显示满足要求的前提下,这种电路的实现更加便捷、方便,因此本设计采用了第二种算法。
2.2.1 像素的抽取
    根据VGA的显示原理,储存在SDRAM中的640×480个像素,受显示控制电路中行同步信号的控制,每个行周期读出640个像素,并同步显示。采用抽取法实现分辨率的压缩,必须丢弃行和列的部分像素。以变换320×240分辨率为例,具体的设计方法是,将分辨率为640×480的原图像每隔一行进行行标记,在标记的行里,每隔1个像素进行列标记,最后将行列都被标记过的像素取出,提供给显示控制电路。
    由于SDRAM存储器本身具有逐行读取、读取显示同步的特点,为了达到对行像素的隔行提取,本设计采用快读慢显的方式。例如原640× 480的分辨率采用25MHz的频率作为SDRAM数据读取频率和VGA的像素显示频率,现在采用50MHz作为SDRAM数据读取频率,VGA的像素显示频率仍然采用25MHz,即读取两行,保存一行并显示。在提取的行像素里每隔1个像素对列像素进行提取,则得到所需要的行列像素。 [p]
2.2.2 双端口RAM控制模块
    VGA显示器要求行像素读取和显示同步,由于抽取出来的行列像素在时序上是不连续的,电路必须加存储器对提取的像素进行缓存。数据缓存模块可以选用任何存储单元,根据像素存取的特点,本设计选用了双端口的RAM对有效像素进行乒乓操作。双端口RAM乒乓操作的原理如图3所示。

 
    在第N个周期,将输入的数据流缓存到“数据缓存模块1”,与此同时,“数据缓存模块2”中缓存的数据通过“输出数据流选择单元”的选择,送到显示电路。在第N+1个周期,将输入的数据流缓存到“数据缓存模块2”,与此同时,“数据缓存模块l”中缓存的数据通过“输出数据流选择单元”的切换,送到显示电路。乒乓操作的最大特点是:通过“输入数据流选择单元”和“输出数据流选择单元”按节拍相互配合切换,将经过缓存的数据流没有时间停顿地传送到输出端,因此非常适合对时序不连续的像素进行流水线式处理。
    根据双口RAM乒乓操作的原理,被抽取出来的像素,一行被缓存的同时,另一行则被顺序地读取出来,保证了像素显示的连续与同步。双端口RAM的输入输出信号的端口程序如下:
    WIRE [29:0] DATA a,DATA b;
    WIRE I_a=I;
    WIRE I_b=~I;
    WIRE[9:0]COIANTER a=(I) ADDRESSl:COUNlER;
    WIRE[9:0]COUNTER b=(!I) ADDRESSl:COUNTER;
    RAM U2(
    .DATA a (INDATA),
    .WREN a (I a),
    .ADDRESS a(COUNTER a),
    .CLOCK A(CLK),
    .Q a(DATA a),
    .DATA b (INDATA),
    .WREN b(I_b),
    .ADDRESS b(COUNTER b,
    .CLOCK B (CLK),
    .Q_b(DATA_b));
2.3 VGA显示控制模块
    显示控制器主要用于输出VGA显示器所需要的RGB数据信号和控制信号,根据输入时钟,显示控制器可以产生VGA所需要的控制信号,包括场同步、行同步和复合消隐信号等。输出像素则与输入像素相同。图4为VGA的控制模块的仿真波形。

 

 

3 电路调试结果与分析
    图5是分辨率为640×480的原图像,图6是分辨率为320×240,比例为4:3的图像。从处理后的图像效果可以看出,图像清晰,信息量丰富,能够满足图像的一般要求。

 

 

4 结论
    本论文提出了一种基于FPGA的图像裁剪电路的设计方法,通过改变图像的分辨率达到压缩图像的效果。这种设计方法不仅具备了FPGA开发电路所具有的开发周期短、设计效率高、扩展性和升级性良好、设计灵活等特点,而且与通常所用的插值算法相比,电路结构简单、设计简便,从测试的效果来看,图像清晰,能够满足一般图像的要求。

射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...

天线设计工程师培训课程套装,资深专家授课,让天线设计不再难...

上一篇:光纤灯与LED灯在照明中的应用
下一篇:基于飞思卡尔MC9S08QG4的便携式自动呼吸控制系统的设计

射频和天线工程师培训课程详情>>

  网站地图