基于FPGA和Kirsch的自适应阈值彩色图像边缘检测方法与流程

文档序号:11251895
基于FPGA和Kirsch的自适应阈值彩色图像边缘检测方法与流程

本发明涉及数字图像处理技术领域,具体涉及一种基于FPGA和Kirsch的自适应阈值彩色图像边缘检测方法。



背景技术:

物体的边缘是反映其特征的一个重要依据,而数字图像的边缘检测是图像复原、图像增强、区域分割、特征提取等很多图像处理技术的前提。很长时间以来,国内外学者对边缘检测技术的研究都很活跃,从而也就出现了多种多样的边缘检测算法,常用的经典边缘检测算法有很多,例如Sobel算子、Laplace算子、Robert算子、Canny算子等。这些传统算法的阈值选取很重要,不过大多为事先设定好的固定阈值,灵活性受到限制,并且这些算法忽略了颜色信息,对于亮度相同而颜色不同或者有重叠边缘的目标物,容易出现漏检、误检等。

由于受到科学技术发展的限制,边缘检测最初是从基于灰度图像开始着手研究的,随着彩色图像技术的不断发展,有关彩色图像的边缘检测也逐渐发展起来。从1977年第一篇有关彩色图像边缘检测的论文由Nevatia教授发表以后,后续的研究者又陆续提出了很多基于彩色图像的边缘检测算法,如向量统计法、矢量差直方图法、模糊元法等等。这些算法基本可以归为向量法和颜色分量输出合成方法这两大类,但是计算量大,计算复杂度过高。

在以往的彩色图像边缘检测技术中,大多是借助C语言或者MATLAB语言,然后调用各自平台所包含的封装好的函数来实现边缘检测,这种方式不利于了解算法的基本原理,也就不利于算法本身的扩展,并且这种软件实现方式一般借助PC机,处理数据的速度较慢。此外,由于计算机是利用串行方式进行处理,一旦需要处理海量的图像数据时,其实时性较差,处理时间长。



技术实现要素:

为了解决现有技术所存在的技术问题,本发明提供一种基于FPGA和Kirsch的自适应阈值彩色图像边缘检测方法,以Kirsch算子作为边缘检测的基准,借助FPGA平台实现自适应阈值彩色图像的边缘检测,并且以RGB888格式通过VGA进行直观地显示,以此提高彩色图像边缘检测的效果,该方法可以弥补以往技术对图像处理实时性不足的缺点,对边缘的检测更加灵活,有助于提高物体边缘检测的准确性。

本发明采用以下技术方案来实现:基于FPGA和Kirsch的自适应阈值彩色图像边缘检测方法,包括以下步骤:

步骤1、对待检测的彩色图像进行采集,得到YUV格式的图像数据,并将其转换成YCbCr,将亮度分量Y提取出来进行后续处理;

步骤2、采用高斯滤波和中值滤波对图像中的亮度分量Y进行去噪处理;

步骤3、对去噪处理后的图像进行边缘检测,计算梯度值和改进的自适应阈值;将梯度值和改进的自适应阈值进行比较,实现边沿的提取和图像二值化,若梯度值大于改进的自适应阈值,则判断当前像素点为边缘点,取值为1,否则取值为0;

步骤4、对边缘图像进行形态学处理,得到经过形态学处理后的分量Y';

步骤5、将步骤1中未经过处理的颜色分量Cb和Cr经过延时操作后与步骤4中的分量Y'合成Y'Cb'Cr',然后利用YCbCr转RGB888算法合成RGB888格式数据。

优选地,步骤2所述高斯滤波过程为:将步骤1的亮度分量Y经过FPGA中移位寄存器缓存两行数据,同时和当前输入的一行数据构成3行阵列,然后对阵列中每行数据利用D触发器进行延迟后得到3×3像素阵列,将高斯模板与所述3×3像素阵列中的像素点分别进行卷积运算,计算所得到的灰度值即为高斯滤波后的中心像素点的值。

优选地,步骤2所述中值滤波过程为:首先设计一个排序模块对每一行图像数据进行大、中、小排序,得到三组数据;再对排序之后的图像数据通过设计好的排序模块再次排序,提取所有最大值中的最小值MAXmin,所有中值中的中值MEDmed,所有最小值中的最大值MINmax,然后复用排序模块,输出的中值便是最终所需的中值。

优选地,步骤2所述中值滤波为自适应中值滤波,其判断条件为:设定一个阈值THS,然后统计模板像素中绝对值大于该阈值THS的个数CNT,若CNT大于4,则对目标像素进行中值滤波处理;反之则保留原始像素值直接输出。

优选地,步骤3所述边缘检测采用八方向的Kirsch算子,借助3×3像素阵列与Kirsch算子检测模板进行卷积运算后得到梯度值;所述改进的自适应阈值基于中值滤波、Bernsen阈值算法以及加权平均来求取。

优选地,步骤4所述形态学处理的方法为:采取先腐蚀后膨胀的开运算,随后进行先膨胀后腐蚀的闭运算,两种运算的权重比为1:1。

从上述技术方案可知,本发明借助FPGA开发平台,将其作为整个图像采集以及数据处理的核心部分,负责与所有数据的交互。利用FPGA具备的并行处理数据、乒乓操作、流水线设计等特点,使得其作为核心器件在图像处理方面,尤其在数据处理的精度和实时性方面,发挥着很好的功能特点。与此同时,针对物体边界条件的判断采用改进的自适应阈值,具有很强的灵活性和适用性。本发明对滤波处理进行了一定的改进,并且充分利用目标物的亮度和颜色信息,定位物体的边缘,以提高检测效果。

本发明相对于现有技术具有如下的优点及效果:

1、本发明在分析传统边缘检测算子和灰度图像边缘检测的基础上,选择八方向的Kirsch算子,与其他检测算子相比,本发明检测到的边缘轮廓更完整。

2、本发明对边缘检测流程中的中值滤波和自适应阈值的实现,进行了一定的改进,进一步改善边缘检测的效果;本发明可以对目标物进行实时的检测,可以很好的处理大量的图像数据。

3、本发明可以较好的区分出两种不同颜色物体重叠处的边缘,也可以对灰度图像进行边缘检测,具有很强的灵活性。

4、本发明在检测过程中使用的算法基于FPGA,易于实现,针对不同的场合定制不同的IP核,修改起来也很方便,并且对了解有关算法的原理很有帮助。

附图说明

图1是本发明的流程框图;

图2是实施例中待测彩色目标图像;

图3是实施例中利用FPGA实现3×3像素阵列的示意图;

图4是实施例中的Kirsch算子检测模板;

图5是实施例中的VGA模块设计原理图;

图6是实施例中彩色图像的灰度检测结果示意图;

图7是实施例中采用本发明的边缘检测结果示意图。

具体实施方式

下面结合实施例及附图对本发明作进一步的说明,但本发明的实施方式不限于此。

实施例

本发明以FPGA作为时序控制和数据处理的核心,以OV7725作为采集图像数据的来源。如图1所示,为本发明的流程框图,主要分为六个步骤,包括图像颜色分解、图像滤波去噪、计算阈值和Kirsch梯度值、实现图像形态学处理、合成RGB888格式数据、设计VGA电路并显示结果。下面以一张将花朵作为目标对象的彩色图像作为优选的实施例详细介绍本发明的实施过程。如图2所示,该彩色图像包括两种不同颜色的对象,需要检测的主体为红色的花朵,背景是由绿色的枝叶覆盖而成,二者有互相重叠交相辉映的区域。本实施例将通过本发明的方法,对目标对象进行边缘检测,并区分出目标物与背景这二者在重叠处的边缘。

第一步,图像颜色分解。即针对待检测的彩色图像,通过CMOS摄像头进行采集,配置好摄像头的采集参数,得到YUV格式的图像数据;随后将该图像数据转换成YCbCr以便进行后续的处理,将其中表示亮度的Y分量提取出来,送往后续模块进行处理,而剩下的两个颜色分量Cb、Cr不作处理。

图2中的彩色图像经过采集后的图像数据为YUV格式,该格式转换为YCbCr后方便进行后续的处理,转换公式如下所示:

Int_YUV={cmos_Y,cmos_CbCr} (1)

Des_YCbCr={cmos_CbCr,cmos_Y} (2)

其中,{}代表拼接运算符,Int_YUV为采集后的16bit数据,Des_YCbCr为转换后的图像数据,公式(1)的目的是将Int_YUV分解成两个8bit的数据cmos_Y和cmos_CbCr,二者交换顺序之后再通过拼接运算操作赋值给Des_YCbCr。本实施例中,分解后的Y、Cb、Cr各分量皆为8bit的数据,提取其中的Y分量送往后续模块进行处理。

第二步,图像滤波去噪。考虑到采集到的视频图像或多或少会受噪声的影响,因此需要对图像进行去噪处理,此处针对两类常见噪声,采用高斯滤波和中值滤波去除。高斯滤波需要借助3×3的高斯像素阵列,将图像中的Y分量与3×3的高斯模板做卷积,便可以得到经过高斯滤波后的图像数据;中值滤波需要借助3×3的中值像素阵列,利用FPGA的并行处理特点实现快速中值滤波,在此基础上,实现一种改进的自适应中值滤波。去噪处理后的图像数据会被送往下一个模块进行边缘检测的处理。

滤波去噪一般是借助窗口模板来实现,常见的3×3高斯滤波模板如式(3)所示。

本实施例中,将第一步中的Y分量图像数据经过FPGA中移位寄存器缓存两行数据,同时和当前输入的一行数据可构成3行阵列,然后对每行数据利用D触发器进行延迟,便可得到如图3所示的3×3像素阵列。总共9个像素点记为matrix_gauss:{p11,p12,p13:p21,p22,p23:p31,p32,p33},将式(3)中的高斯滤波模板与这9个像素点分别进行卷积运算,计算公式如下:

计算所得到的灰度值即为滤波后的中心像素点的值。最后借助FPGA的特性,实现高斯滤波的主要Verilog HDL代码为:

begin

gauss_value1<=matrix_p11+(matrix_p12<<1)+matrix_p13;

gauss_value2<=(matrix_p21<<1)+(matrix_p22<<2)+(matrix_p23<<1);

gauss_value3<=matrix_p31+(matrix_p32<<1)+matrix_p33;

end

计算中值滤波同样借助3×3模板,首先设计一个排序模块对每一行数据进行大、中、小排序,这样便得到了三组数据;再对排序之后的数据通过设计好的排序模块再次排序,由于总共有9个像素点,故中值具有最多大于4个像素点,最多小于4个像素点的这一特性。在经过两次排序之后,只需提取所有最大值中的最小值MAXmin,所有中值中的中值MEDmed,所有最小值中的最大值MINmax,然后复用大、中、小排序模块,输出的中值便是最终所需的中值。在中值滤波基础上,对滤波的判断条件进行改进,得到一种改进的自适应中值滤波。在本实施例中,其自适应判断过程为:设定一个阈值THS为60,然后统计如图3所示的3×3模板像素中绝对值大于该阈值THS的个数CNT,若CNT大于4,则对该模板中待处理的目标像素点进行中值滤波处理;反之则保留原始像素值直接输出。

第三步,计算阈值和Kirsch梯度值。本步骤对去噪处理后的图像进行边缘检测,主要计算梯度值大小和自适应阈值。边缘检测算子采用八方向的Kirsch算子,借助3×3像素阵列与Kirsch算子检测模板进行卷积运算后,得到梯度值大小;随后将该梯度值和改进的自适应阈值进行比较,实现边沿的提取和图像二值化,若梯度值大于改进的自适应阈值,则判断当前像素点Edge_Kirsch_Bit为边缘点,且取值为1,否则取值为0。

本步骤计算一种改进的自适应阈值作为边缘判断的基准,并实现Kirsch算子的梯度值求取。改进的自适应阈值基于中值滤波、Bernsen阈值算法以及加权平均来求取。通过中值滤波排序模块后,可得到3×3模板中像素数值的大小关系,提取其中的中值A、次最小值B和最小值C,以及将Bernsen阈值设为D,加权系数分别为:m、n、p、q,其中m+n+p+q=1。

Bernsen阈值可按如下公式计算:

其中(m,n)∈[-1,1],F(i,j)为目标像素点(i,j)处的灰度值。

在本实施例中,对应的加权系数分别取:因此该改进的自适应阈值计算公式如下:

本实施例中,采用的Kirsch算子模板如图4所示。借助图3所示的示意图,可得3×3像素阵列matrix_Kirsch:{p11,p12,p13:p21,p22,p23:p31,p32,p33},将该阵列与图4所示的模板分别做卷积运算,可得对应方向上的八个梯度幅值G1到G2,随后计算像素点的总梯度幅值,计算公式如下:

将该梯度幅值与式(6)得到的自适应阈值进行比较即可求出边缘点,二者比较的公式如下:

若梯度幅值大于自适应阈值,判断为边缘点,取值为1,否则判断为非边缘点。

第四步,实现图像形态学处理。经过边缘检测算子处理之后的图像一般为二值图像,其中难免会有一些空洞和断点,本步骤通过形态学处理,可以使图像的轮廓更加理想。本步骤利用选取好的形态学结构元素模板Tmm,对3×3的像素阵列进行逻辑运算,处理后的数据再转换成8bit的数据输出,输出后的数据便为经过形态学处理后的Y'分量。

对得到的边缘图像进行形态学处理,使图像边缘更加细腻和完整,形态学处理方法为膨胀与腐蚀。基本的膨胀和腐蚀运算公式如下:

Edge1=P11|P12|P13|P21|P22|P23|P31|P32|P33 (9)

Edge2=P11&P12&P13&P21&P22&P23&P31&P32&P33 (10)

其中,|和&分别为逻辑或、逻辑与运算符,P11到P33为借助图3所示的示意图,得到的3×3阵列matrix_morph:{p11,p12,p13:p21,p22,p23:p31,p32,p33},通过对式(9)和式(10)进行不同的组合,可以得到不同的处理结果。本实施例中,采取先腐蚀后膨胀的开运算,随后进行先膨胀后腐蚀的闭运算,两种运算的权重比为1:1,处理后的结果Edge_Y_r的位宽为1bit,需要将其转换为8bit的数据,转换公式如下:

Edge_Y={8{Edge_Y_r}} (11)

第五步,合成RGB888格式数据。将第一步中未经过处理的Cb和Cr分量,经过一定时间(如10个时钟周期)的延时操作后与第四步中的Y'分量合成Y'Cb'Cr',然后利用YCbCr转RGB888算法,从而完成对RGB888格式数据的实现。

由于在FPGA中,浮点数的运算会消耗较多资源,并且在计算过程中为了防止负数的出现,因此对原有的转换公式进行化简,本实施例中,最终的转换公式如下所示:

R=(596Y+817Cr-114131)÷512

G=(596Y-200Cb-416Cr+69370)÷512 (12)

B=(596Y+1033Cb-141787)÷512

根据式(12),首先计算括号里面Y、Cb、Cr分量的整乘部分;其次计算各分量位移之后的结果,并赋值给中间变量;最后根据中间变量的结果,考虑到R、G、B皆为8位位宽,取值范围为0~255。在本实施例中作如下处理:如果小于0(移位后的最高位为1),赋0;若大于255,则赋255;如果在0~255之间,则保持原值。以其中的R分量为例,最后的处理如下:

R<=R_r[10]?8'd0:(R_r[9:0]>9'd255)?8'd255:R_r[7:0] (13)

其中,式(13)中的R_r为中间变量,?:为条件操作符。

第六步,设计VGA电路并显示边缘检测结果。经过上述步骤处理后,可得到RGB888格式的图像边缘,为了实时显示彩色图像的边缘检测结果,本发明设计了VGA电路,借助VGA功能模块来显示。

VGA模块的外围电路原理图如图5所示。它的3路DA信号最大为10bit位宽,我们可以灵活地选择使用其中的部分位宽来显示图像数据,比如RGB565格式(5bit的R信号,6bit的G信号,5bit的B信号)输出。本实施例中,不使用的R、G、B信号可以先预留出来,在设计时全部赋值为0,如需使用则直接连接对应信号。对于CLOCK、BLANK和SYNC这三个引脚,根据芯片手册可知:设计中SYNC可不使用,赋值逻辑低电平就行;而CLOCK是和输出的数据总线同步的,由设计中所需显示屏幕的分辨率和刷新率决定;对于BLANK信号在数据总线有效时拉高即可。该芯片的模拟输出IOR、IOG、IOB信号和两个同步信号VGA_HS、VGA_VS都是直接与该VGA模块的插座相连。

VGA模块设计好之后,将第四步和第五步得到的图像数据进行显示,检测结果如图6和图7所示。图2中1和2两处的红色花朵与绿色叶子的边缘在图6中不易被区分出来,且容易将绿色的枝叶边缘误判为红色花朵的边缘;图7却可以较好地区分出1和2两处的边缘。检测结果说明本发明实现了对彩色图像的边缘检测,同时也可以提高对类似目标物边缘检测的有效性。

上述实施例为本发明较佳的实施方式,仅仅是对发明构思的实现形式举例说明,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的实质与原理下所作的多种变化、修饰、替代、变形等,均可视为等效的置换方式,都包含在本发明的保护范围之内。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1