红外图像处理中平台实时直方图均衡器的SoC实现
O引言
直方图均衡是红外图像处理中简单有效的一种图像增强方法[1]。直方图均衡器在增强目标的同时也放大了背景和噪声信号,因此有人提出了平台直方图均衡算法,该算法能达到增强目标且较好地抑制背景和噪声的目的[2,5],具有很大的应用价值。
传统直方图均衡和平台直方图均衡算法都具有计算量和存储量大的缺点,不利于实时图像处理应用。查找表结构的处理方式可以大幅度减小存储量和计算量,可以实现实时处理。受电子技术发展水平的限制,从公开发表的论文看,以往的实时直方图均衡器大都具有硬件结构过于复杂、成本高、软件操作不灵活等缺陷,在应用中具有很大的局限性[2,4]。
某课题中使用了法国Sofradir公司288 x4的线阵红外探测器,该探测器每列输出288个图像数据,12位图像数据的传输速率为16 MHz/s,每秒大约输出5万多列数据,实时进行灰度变换是课题的基本要求。经过深入研究,在巧妙地引入Altera公司FPGA(现场可编程门阵列)技术的最新成果NiosⅡ软核微处理器后,硬件设计被大幅度简化,最后,平台实时直方图均衡算法能以SOC(片上系统)的方式实现。
1平台直方图均衡算法的原理
图像的灰度直方图就是图像中每一个灰度级与其出现频数间的统计关系。它能给出该图像概貌性的描述,如图像的灰度范围、每一级灰度的频数等,是一个一维的离散函数:
式中:L为该幅图像中的灰度等级数;p(k)为第k个灰度级的概率密度;nk为第k个灰度级中所包含的像素数;n为该幅图像中的像素数。
平台直方图均衡算法是在直方图均衡时对灰度的权重设上限和下限两个平台,当某一级灰度的像素数大于或小于所设定的上限或下限平台时,权重被箝在最大值或最小值,这样可避免变换后诸如大块云彩等大面积背景占据过大的动态范围,从而为感兴趣的细节部分留出提升空间。
课题要求将4 096的像素级压缩为256级,而原始图像数据不可能占满O~4 095的每一级,若原始图像数据中像素级的最大值为Nmax、最小值为Nmin,那么,通过仿真要将像素级从Nmin~Nmax映射到O一255。
设映射后第i级灰度的像素个数为ni,CDF(i)是累积分布函数,P1和P2分别为设定的上限和下限平台值,其算法如下:
2 平台直方图均衡器的SOC实现
从红外探测器前端信号预处理电路输出的信号有12位数据信号data、像素时钟信号clk_16M、列同步信号clk_l(低电平有效)、帧同步信号clk-f(低电平有效)。图1是其时序图,clk一32M和clk一64M是clk一16M经锁相环2倍频和4倍频的输出时钟。
根据需要,像素在每个灰度等级上的个数统计表只需一个24 bit×4 k存储器即可满足应用要求;灰度查找表只需8 bit×4 k存储器即可满足应用要求。在实时应用场合,像素灰度等级个数统计表和灰度查找表工作在乒乓方式,因此系统总存储量为32 bit×8 k。目前很多价格较低的FPGA中都集成了满足应用要求的可编程存储器资源,因此存储器可集成在.FPGA中。如果能将算法中的逻辑控制和算术运算都集成在FP-GA中,那么算法即可以SOC方式实现。
算法中涉及到大量的除法运算,除法运算器将消耗FPGA大量的逻辑资源和布线资源(以Altera公司的:FPGA为例,一个16位的并行除法器约消耗l 000个LE(逻辑单元)和芯片大部分布线资源),为了提高速度性能和电路运行的稳定性,加上几级流水线,逻辑资源和布线资源的消耗量将成倍增加。过度的逻辑资源尤其是布线资源的消耗会使电路的速度性能大幅度降低,有时甚至不能适配器件,使设计失败。显然,这种设计方案是不合理的。Ahera公司最新推出的NiosⅡ软核微处理器提供了很好的解决方案。该处理器能以极小的硬件代价换取很高的性能(600~700个LE的逻辑资源和少量的布线资源消耗),目前,FPGA的容量都比较大,设计中根本消耗不了那么多资源,芯片中剩余的硬件资源往往比NiosⅡ软核微处理器所消耗的硬件资源多,所以设计经常不会增加硬件成本。它不同于传统的微处理器,有如下特点:
a)提供大量免费IP核,例如微处理器核NiosⅡ、定时/计数器、串口、DMA、SDRAM,SRAM,SBRAM、.Flash控制器等,用户可以根据需要选择IP核搭建自己的嵌入式系统,系统具有很大的灵活性。
b)提供了界面友好的硬件和软件设计开发环境,硬件设计流程与传统的FPGA设计相同,软件设计支持标准c语言编程,开发环境提供了大量的库函数供用户调用,支持JTAG调试,软件调试方法与现有流行微处理器的调试方法相同,除此之外,配合硬件环境,可以完成很多设计仿真,这项功能是大部分传统微处理器不具备的。 c)支持嵌入式操作系统的移植。
d)支持32级中断。
使用NiosⅡ软核微处理器后,可避开外扩高性能微处理器的复杂硬件设计,平台实时直方图均衡器的实现方案如图2所示。
图2中,统计表1、统计表2、查找表1和查找表2都是双口RAM,都工作在乒乓方式。将16 MHz的像素时钟经FPGA的锁相环倍频到32 MHz和64 MHz,在像素时钟的下降沿锁存列同步、帧同步和数据信号,并将锁存信号和倍频时钟给时序控制器,将锁存的帧同步信号在其下降沿二分频产生高低电平信号用来区分奇帧和偶帧。
图2的工作过程如下:当工作在奇帧时,统计表1双口RAM实时完成像素灰度等级个数的统计工作,统计表2不工作;查找表l完成实时灰度查找工作,查找表2不工作。统计表的工作过程如下:当锁存的列同步信号为低电平时,将锁存的数据信号作为双口RAM读端口和写端口的地址信号,用clk_16M的反相信号作为双口RAM的读使能信号,用clk_64M作为双口RAM的驱动时钟信号;当clk_16M为高电平且clk一32M为低电平时,在clk一64M的上升沿将读出的像素灰度个数加1,当clk_16M为高电平且clk一32M为高电平时,用clk_32M作为写使能信号,在clk-64M的上升沿将灰度个数写入灰度统计表1的双口RAM中。经过上面的操作,即可完成一次像素灰度个数的统计工作。此时,将锁存的数据信号作为查找表l双口RAM的读端口地址信号,用elk_16M作为双口RAM的读驱动时钟,用锁存的列同步信号的反相信号和该反相信号延时一个像素时钟周期的信号相与后的信号作为双口RAM的读使能信号(因为双口RAM带一级流水线,所以不能简单地将列同步的反相信号作为读使能信号),实时地输出变换的灰度数据,列同步和帧同步的输出同样要考虑双口RAM的流水线。当帧同步信号为高电平时,时序控制器向NiosⅡ发出中断信号1,NiosⅡ接收到中断信号1后,读出统计表1中的像素灰度个数统计值,完成灰度查找表的解算并将解算的灰度查找表写入查找表1中,同时将统计表1中的数据清0。当工作在偶帧时,各模块的工作与奇帧相反。NiosⅡ的串口用来接收设定的平台命令和平台值。串口工作在中断状态下,具有最高的中断优先级。串口以"起始字符+平台命令+平台值24位数据+结束字符+校验和"的通信协议进行数据接收,接收完后,串口发送口以"起始字符+接收正确与否命令+结束字符+校验和"的传输协议向上位机发回告信号。
3设计中应注意的问题和实验结果
设计中发现有两个问题必须引起高度注意:
a)统计表的读写端口信号受红外探测器前端电路输出信号和NiosⅡ信号的切换控制,如果控制不当,很容易产生逻辑混乱。建议每次切换时先将使能控制信号置为无效状态,然后将时钟信号置为一个固定的高电平,切换使能控制信号,再切换时钟驱动信号和数据信号。而且每次NiosⅡ在读统计表中的值之前,最好有一个小的延时程序,第1个数据读2遍。由于系统每次切换的时间约1 s,NiosⅡ完成一次灰度解算和清0不需要这么长时间,每次完成解算和清0后,读写端口控制信号由探测器前端电路输出信号控制。经过这种处理,系统能稳定地工作,不会出现逻辑混
评论