现在的图像处理一般步骤:提取原始图像---〉灰度---〉滤波/边缘检测/分割---〉提取特征值
上述步骤为对某一类特定图像的处理,比如人脸识别、指纹识别、车牌识别等等,你采集图像可能是彩色的,而这样的图像色素太多,如果你的图像背景稍微一变化,你的图像就没法处理了,所以图像一般要先灰度,或便成二值图像,灰度完之后,就要滤波,也就是把你要处理的特定图像外的背景去掉,然后才是对你要研究的图像进行算法处理,提取特征值。
想你这种不适对某一特定图像进行处理的,只有把原始图像---〉缩小像素点---〉灰度---〉图像处理
不过在图像处理一步你可以做些手脚:如只是边缘检测,然后只是比较图像轮廓就可以了,其实这也是变相的提取特征值
例子:
现有的实时视频处理系统一般采取以下几种方式来实现图像的处理:
一是用纯硬件方式来实现图像的编码和解码,即采用专用芯片来完成。这种方式的系统实时性好,压缩率高,图像处理的质量也较好,处理速度一般能达到25帧/s以上,缺点是软件处理的灵活性差,一旦处理的程序固定,就无法再重新对其进行更新和升级,且这种系统的造价较高,在市场的推广上也有难度。
二是用纯软件的方式实现编解码运算,其优点在于算法易于更新,且造价低,但由于这种方式主要基于普通的桌面PC机处理器,所以很难取得较高的速度,致使一些较为先进的算法不能实现,造成图像质量下降,时延长,帧率低。
三是基于视频处理的DSP芯片的软件实现,此种方式利用DSP芯片的高速信号处理功能,使用软件实现算法,在运行时大大缩短了执行时间,能获得较高的压缩率和处理速度,同时该方案易于升级,算法也可更新。
因此,本文以DM642图像处理平台为硬件环境,在CCS的软件开发环境下,利用软件和硬件实现从动态的图像中对目标进行特征提取。
1系统总体设计与实现
该系统由视频采集部分、帧缓存控制部分、DSP芯片处理部分和视频显示部分组成。系统框图见图1。
系统流程如下:视频图像先经过视频采集部分将视频图像信号存储于帧缓存器中,采集完成后可编程逻辑器向DSP芯片发送接收信号,DSP芯片接收到“图像采集完成”信号后,利用DMA方式将信号传送到片外存储器中。同时,DSP芯片将按照相应的软件算法对图像进行处理,处理完成后,处理结果被送到视频显示部分,经过视频显示器将处理结果进行实时显示。
图2是视频显示模块的工作流程。首先,三个显示缓存被分配到DSP上SDRAM的.bss段[1],并以较低的分辨率存储,每次800×600×16 =960 kb,其中一些空间未被使用。然后Display Timing [2]模块产生基于程序变量的HSYNC和VSYNC信号,其中VSYNC与EXTINT6[2]相连,HSYNC与EXTINT7相连。检测到信号后,EXTINT6产生一个CPU中断并调用预先在视频驱动中定义的中断服务程序VDIS_isr(),程序执行后即开始等待下一帧图像数据。EXTINT7触发EDMA事件,然后从当前显存中拷贝一行数据至FIFO,此行数据通过TVP3026立刻进行显示。依次进行下去,直到整帧数据全部显示。然后刷新重新等待下一帧。采集显示过程中,EDMA以1600 b/s的速度传送,具有最高的优先级。
2系统设计及实现
2.1系统软件设计
系统硬件设计完成后,要设计特征提取的软件算法,其中关键部分在于图像的分割部分。本文采用局部递归分割算法对图像进行递归分割,得到分割的最终结果。具体步骤如下:
(1)设原始图像f,f(x,y)为其像素点(x,y)灰度值,此时i=1;记T=Otsu(f)为Otsu算法对分割,得到门限T。
计算原始图像f的灰度均值和熵,使得preMean=原始图像的灰度均值,preShang=原始图像的熵。oriMean=preMean,oriShang=preShang。
(2)判断特征区域灰度是否大于背景灰度,把图像分为两类。若特征区域灰度>背景灰度,进入步骤3;若特征区域灰度<背景灰度,进入步骤5。
(3)将图像中大于门限T的像素保留。此时i=2,记Si={(x,y)|f(x,y)>T}。计算Si的灰度均值和熵,使得segMean=Si的灰度均值,segShang=Si的熵。
(4)判断终止条件:IF(preMean-segMean)/oriMean>20%,且(preShang-segShang)/oriShang>10%,Then计算新的递归门限T,T=Otsu(Si),i=i+1,记Si={(x,y)|f(x,y)>T∩Si-1},preMean=oriMean, preShang=oriShang,继续4直至跳出中止条件。
(5)将图像中小于门限T的像素保留。此时i=2,记Si={(x,y)|f(x,y)<T},计算Si的灰度均值和熵,使得segMean=Si的灰度均值,segShang=Si的熵。
(6)判断中止条件:IF(segMean-preMean)/oriMean>20%,且(preShang-segShang)/oriShang>10%,Then计算新的Then,计算新的递归门限T,T=Otsu(Si),i=i+1,记Si={(x,y)|f(x,y)>T∩Si-1}preMean=segMean, preShang=segShang;计算Si的灰度均值和熵,使得segMean=Si的灰度均值,segShang=Si的熵。继续5直至跳出中止条件。
(7)最终递归分割终止,结果如下:
对于特征区域灰度<背景灰度的图像f′(x,y)=255 f(x,y)<T0 f(x,y)≥T,对于特征区域灰度>背景灰度的图像f′(x,y)=255 f(x,y)>T0 f(x,y)≤T。
该算法的另一个优点是由于算法提出了一种基于灰度和熵变化的算法,使得算法对视频图像的各项参数要求不高,并且不需要考虑递归终止的最终条件,算法结合灰度变化和熵变化作为递归终止条件的判断依据是基于直方图的局部递归分割算法的改进。
2.2程序代码优化
优化代码阶段包括C代码的优化、代码编译、代码剖析和代码的进一步优化。优化的标准以达到工程技术指标的要求为准[3]。当C程序向目标DSP平台移植时,需要结合DSP器件的特点,做一些特殊的优化考虑,主要包括两个方面,一是如何合理地安排存储空间,二是如何有选择地做一些手工优化。
(1)存储空间的重排。根据器件型号和系统配置的不同,一个DSP系统的存储空间可以千差万别,而DSP对不同存储单元的访问速度是有区别的,其中对片内寄存器的访问速度最快,对片内RAM的访问速度比对片外RAM的访问速度快。因此,合理配置和使用存储空间,对系统的整体效率影响很大。
(2)局部手工优化。经过上述优化的代码效率将大为提高。若实时性仍不能满足需要,可进一步做手工优化的调整,并且尽可能保持原有代码的可读性。因此,应尽可能选择对效率提高明显的代码段进行手工优化的调整。
针对本文中程序的特点,可以通过以下几个方面对代码进行手工优化:一是块重复和单指令重复;二是特殊寻址方式;三是延迟转移;四是使用并行指令;五是减少函数调用;六是使用寄存器。
3实验与调试
通过软件代码的优化,系统整体的处理周期从6 809 532 ns减少到688765 ns,同时,Cache Overhead从957%减少到5%,缓存间的冲突由于合理的分配而达到较好的配置。这反映在L1D和L1P的相对变化上,实验数据见表1。
以原始图像中的中心区域为例,经过特征区域的分割后,可得出特定区域的特征信息。为了对比方便,对原始图像按照传统的方法进行图像分割,处理结果见图3。由图3对比可以看出,图3(b)中圆圈区域中的微小突起和毛刺特征即为所要得到的图像的细节特征信息。
由实验结果和实验数据表可以看出,因为视频图像数据量大,对其处理和压缩非常花费时间,因此在一个高性能视频系统的开发过程中面临的最大困难就是如何降低图像处理所需的时钟数。程序结构的组织稍有不完美就会使程序的运行时间增加。在循环次数比较大的程序中,内层循环体运行所需时钟数的较小变动也会显著影响系统程序的运行性能。由于对于系统实时性的要求,应该在编程完成时对系统运行程序的时间进行测试,以保证系统实时性的实现。
4结语
目前,DSP芯片图像处理技术在各个领域得到了广泛应用。如在工业检测领域,可以利用高速图像处理技术和DSP硬件系统对流水线上的零部件进行检测;在军事公安领域,可以进行实时监控、动态录像中人像的组合、查询和识别,同时,也可以利用来自卫星的图像用于军事侦察、地形匹配等。今后,利用DSP对视频信息进行实时处理的研究领域仍可进一步的拓展,同时如何使系统的实时性能得以提高和如何应对突发的大数据量也是尚待解决的问题。