摘要:本文提出了一种数字图像边缘提取及处理办法,可以对一幅静态或动态的黑白或彩色图像,进行实时的边缘提取处理,然后针对是否是边缘像素的判断滤去其余部分,对于边缘部分赋以特殊像素值,从而显示出一幅仅有边缘部分的黑白分明的特殊效果的图像。此方法的优点是灵敏度高,适用于高分辨率状态的显示,且可以根据参数大小进行调整,而硬件实现起来也不复杂。
关键词:图像邻域、像素矩阵、边缘提取
Key words:
Image neighbor field、pixel matrix、edge extraction 基本原理: 一幅数字图像由有限大小的像素组成,像素反映了图像特定位置处的色彩和亮度信息。
为了更好地显现画质,需要对原始图像的像素矩阵进行一些特殊的处理,通过特殊算法来完成原始图像在亮度、色度等方面的调节,使图像看上去更加鲜艳生动,富于表现力。
某些特殊邻域比如医疗器械或者军事设施中,观测者所关心的是成像图像中的边缘部分,而对其它部分如色彩、小细节区域不感兴趣。另外在消费类电子设备的设计中,有时需要首先分离出每帧图像的边缘部分,以便作后续的边缘提升或分区域处理,或者希望仅显示图像的边缘,滤去色彩、小细节等图像元素,以达到一种特殊的视觉效果。这些情况下就涉及到如何图像中的边缘提取出来,剔除不需要的像素,仅仅保留边缘像素值再加以显示。
目前有一种边缘检测的方法,其方法是计算某一图像邻域的中心周围四个像素值的差和来进行边缘判断。此法虽然简单,但仅适用于对灵敏度要求不高或显示设备本身分辨率不高的情况。当显示设备分辨率在“1366×768”或以上时,此法就体现出能够检测出的边缘有限,仅能体现大致轮廓,灵敏度不够高的缺点了。
针对以上问题,本文提出一种边缘提取及处理办法,可以对一幅静态或动态的黑白或彩色图像,进行实时的边缘提取处理,然后针对是否是边缘像素的判断滤去其余部分,对于边缘部分赋以特殊像素值,从而显示出一幅仅有边缘部分的黑白分明的特殊效果的图像。此方法的优点是灵敏度高,适用于高分辨率状态的显示,且可以根据参数大小进行调整,而硬件实现起来也不复杂。
本方法包括以下步骤:
1)、在像素矩阵中选择中心像素fx,其对应的亮度分量记为yxx;
2)、围绕fx这一中心点在其邻域窗口内选择多个邻域像素fij(i,j=1,2,…n)组成一个n×n大小的像素矩阵,相应的亮度分量记为y ij(i,j=1,2,…n),n的取值为大于等于5的奇数;
3)、计算fx的边缘提取因子gx,
gx = | (yx,x+ yx-1,x-1) - (yx+1,x+1+ yx+2,x+2) | +
| (yx+1,x + yx+2,x-1) - (yx,x+1+ yx-1,x+2) |;
4)、比较gx与预设的边缘提取参数Edge_coeff的大小,判断fx是否处于图像的边缘;
Edge_coeff的取值范围可依据像素精度和对边缘检测的灵敏度的要求而定,灵敏度要求越高则Edge_coeff的取值越小;
5)、针对4)的比较结果,若gx大于等于Edge_coeff,则将yx,x赋为亮度分量的最大值;反之则将yx,x赋为亮度分量的最小值,从而完成黑或白的重新赋值,然后显示输出。
以上叙述中,图像的像素数据可以是像素的亮度或灰度值。图像数据可以是YUV色域空间的Y通道数据。图像可以是静止的,也可以是视频或电影中的单帧图像。
实验结果: 下面是本文所述方法的实验结果。以Lena图为例,对进行原边缘提取算法及本文所述算法的处理,效果如图1(a)至(d)所示。
(a)Lena原图
(b)原算法处理后的Lena图
(c)本文算法处理后的Lena图(较小提取参数)
(d)本文算法处理后的Lena图(较大提取参数) 结论: 以上论述提供了一种图像的边缘提取及处理办法,可以对一幅静态或动态的黑白或彩色图像,进行实时的边缘提取处理,然后针对是否是边缘像素的判断滤去其余部分,对于边缘部分赋以特殊像素值,从而显示出一幅仅有边缘部分的黑白分明的特殊效果的图像。
此方法的优点是灵敏度高,适用于高分辨率状态的显示,且可以根据参数大小进行调整,从而达到特殊情况下的显示需求,产生一种边缘分明的特殊图像效果。 硬件实现: 下面谈一谈该方法的硬件实现。
根据视频电子标准协会(VESA)的规定,对于视频标清及高清信号的像素时钟,至少需要达到135MHZ左右的频率。为了满足这一频率要求,需要运用到流水(Pipeline)设计方法,综合考虑面积和速度两方面的因素进行设计。下面就简要谈谈如何应用可编程逻辑器件(FPGA)的硬件平台,通过硬件描述语言实现上述多功能滤波器。
我们选择的主器件是Xilinx的sparte 3E系列XC3S500E芯片,内含20个ram块,10476个逻辑单元,4656个Slices。加上前后色域空间转换处理模块,综合后的规模是为3158个Slices,静态时序分析的结果为135MHZ。系统框图见图1所示。
图1
此项设计的难点有二:一是如何搭建一个实时的像素矩阵数据流,一次同时输出n×n的矩阵数据;二是如何采用流水的方式在延时若干拍后实时地输出边缘检测处理后的像素数据。
对于第一个问题,可以调用Xilinx提供的Ram内核,运用Coregen工具在器件内部规划出一个n行或n-1行的存储空间,在第n行的第n个数据到达以后,就可以同时输出n×n个矩阵数据到后面的处理模块。输出一个矩阵后,新的数据又进入存储空间,使数据得到刷新。以7×7矩阵为例,其存储模块的功能仿真波形见图2所示,可以看到在延迟一行加一个像素时钟后,模块就开始按时钟输出y11到y77共49个待处理数据。
图2
第二个问题的解决可充分利用能够有效提高电路运行速度的流水线实现方法。如果不考虑滤波迭代,则整个处理过程是 “ 单流向 ” 的,没有数据的迭代或循环,前一个步骤的输出是下一个步骤的输入,所以可以采用流水线的实现方法来提高系统的工作频率。
首先将边缘检测处理过程分为若干步骤,每一步骤对应一些状态标志寄存器或中间寄存器,由此搭建一个有着若干节拍的流水结构,最后在总的延迟拍数后实现实时的(即按图像像素时钟频率来输出)数据输出流。不论是5×5的还是7×7的矩阵邻域,或者更大些的邻域,从输入矩阵数据到输出此矩阵的中间值,都是只需最多8拍即可完成。从而有效提高电路工作的频率范围,满足目前视频电子标准中所有标清、高清分辨率格式下的像素时钟的频率要求。