一种基于高低阈值的Canny算子的边缘检测方法

文档序号:29814333发布日期:2022-04-27 09:27阅读:94来源:国知局
一种基于高低阈值的Canny算子的边缘检测方法
一种基于高低阈值的canny算子的边缘检测方法
技术领域
1.本发明涉及数字图像处理领域,具体提供一种基于高低阈值的canny算子的边缘检测方法。


背景技术:

2.边缘特征是图像的基本特征,它能在保留物体形状信息的前提下大大减少所要处理的信息,边缘特征的提取精度影响着后续针对所提取特征处理的精度,因此边缘检测是图像处理和计算机视觉中的基本问题。灰度图像边缘是指图像局部区域灰度变化最显著的部分,图像的灰度变化可以用梯度来表示。当前,常用的边缘提取方法主要分为两类:一阶差分边缘检测算法(如sobel、prewitt算法)和二阶差分边缘检测算法(如laplacian算子)。传统的边缘检测算法如sobel(可分为检测水平方向和垂直方向的两个算子),canny,roberts(利用局部差分的方法寻找的算子),prewitt(边缘细化的算子),log等等,但是大多数算子都有其一定的局限性。sobel算子对边缘定位精度不够,roberts对边缘定位精确度高但易丢失图像的边缘信息,不利于边缘提取,并且该算子没有对输入图像进行平滑处理,易受噪声影响。prewitt算子易检测出伪边缘,这对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果并不好。而log算法对噪声比较敏感。与传统的微分算法相比,canny算法可实现精度更高的边缘提取与定位。
3.但传统的canny边缘检测算法存在对噪声图像的去噪效果不佳,以及双阈值需要预先设定等问题。国内外学者针对此提出许多改进方法。例如,陈顺、孟青青等人在改进otsu算法的基础上,提出一种结合图像增强和改进canny算子的图像边缘检测算法,降低了影响噪声,增强了图像的对比度。段军、张博等人提出一种采用统计滤波去噪和基于灰度的迭代法计算阈值的边缘检测算法。李凌提出改进的canny边缘检测算法,采用复合形态滤波取代高斯滤波,保持边缘强度与细节,降低噪声的影响;采用sobel算子加入45
°
和135
°
方向模板来计算梯度幅值,边缘定位效果更佳;为使边缘检测更连续,依据图像的灰度均值和方差选取阈值。刘素行采用自适应中值滤波进行去噪处理,在原有基础上增加45
°
和135
°
方向,利用有限差分来计算梯度幅值方向;采用非极大值抑制来细化图像边缘,采用otsu算法计算图像的高低阈值。


技术实现要素:

4.本发明的目的在于提出一种基于高低阈值的canny算子的边缘检测方法,以解决现有技术中所存在的一个或多个技术问题,至少提供一种有益的选择或创造条件。
5.本发明提出了一种基于canny的算法构架,首先用开关中值滤波代替高斯滤波对图像去除噪声,对去噪后的图像计算每个像素点的梯度幅值和方向,而后对梯度图像采用非极大值抑制得单像素宽度的边缘图像,然后利用k-means聚类和otsu算法确定高低阈值并处理图像边缘,最后利用面积形态学开运算处理干扰边缘得到最终的边缘图像。该算法经实验证实,定位精度更高,自适应性强以及干扰点的去除效果更好。
6.为了实现上述目的,根据本发明的一方面,本发明提出了一种基于高低阈值的canny算子的边缘检测算法,包括以下步骤:
7.步骤1,对源图像进行平滑滤波处理,并用开关中值滤波代替高斯滤波对图像去除噪声;
8.步骤2,对步骤1中平滑滤波处理并去噪声后的图像采用sobel算子计算图像梯度幅值和方向;
9.步骤3,对步骤2得到的梯度幅值进行非极大值抑制得单像素宽度的边缘图像
10.步骤4,采用k-means聚类算法得到高、低梯度值的聚类中心;
11.步骤5,采用otsu算法得到梯度的最佳阈值,在高聚类中心、最佳阈值和低聚类中心之间取高、低阈值;
12.步骤6,利用高、低阈值处理步骤3得到的单像素宽度的边缘图像,并得到二值化边缘;
13.步骤7,采用面积形态学开运算对二值化边缘的干扰边缘去除,并得到最终边缘图像。
14.具体的,在步骤1中,对源图像进行平滑滤波处理,并用开关中值滤波代替高斯滤波对图像去除噪声的方法的具体步骤如下:
15.步骤1.1:选用二维高斯函数对图像进行平滑滤波处理,高斯函数的计算公式为:
[0016][0017]
其中,h(x,y,σ)是二维高斯函数,σ表示平滑程度,π表示圆周率,x表示中心点的横坐标,y表示中心点的纵坐标;exp(
·
)表示以自然常数e为底的指数函数。
[0018]
步骤1.2:对噪声进行检测:
[0019]
一幅图像v,其椒盐噪声检测的表达式为公式(2):
[0020][0021]
式中:g
(i,j)
表示v中第i行、第j列像素点的灰度值;a
min
和a
max
分别表示以点(i,j)为中心的3x3窗口内的最小灰度均值和最大灰度均值;f
(i,j)
表示第i行、第j列的像素点是否为噪声点。
[0022]
步骤1.3:对噪声点进行标记:
[0023]
当g
(i,j)
介于a
min
和a
max
之间时,标记f
(i,j)
为1,反之该点为噪声点,标记f
(i,j)
为0。
[0024]
步骤1.4:采用开关中值滤波算法对图像进行处理:
[0025]
根据开关中值滤波的原理,对f
(i,j)
标记为1的像素点保持其灰度值不变,对f
(i,j)
标记为0的像素点灰度值使用其所在位置的中值来代替。
[0026]
具体的,在步骤2中,对基于平滑后的图像采用sobel算子计算图像梯度幅值和方向的方法的具体步骤如下:
[0027]
步骤2.1:sobel算子结合高斯平滑和微分求导,计算图像灰度的近似梯度。
[0028]
步骤2.2:sobel算子对水平和垂直两个方向上求导,得x方向和y方向梯度图像:
[0029]
水平变化:将图像i与一个奇数大小的内核g
x
进行卷积。当内核大小为3时,g
x
的计算结果为公式(3):
[0030][0031]
垂直变化:将图像i与一个奇数大小的内核gy进行卷积。当内核大小为3时,gy的计算结果为公式(4):
[0032][0033]
步骤2.3:在图像i的每一点上,求出近似梯度:
[0034]
步骤2.4:在图像i的每一点上,求出梯度方向:
[0035]
具体的,在步骤3中,对平滑图像的梯度幅值进行非极大值抑制得单像素宽度的边缘图像的方法的具体步骤如下:
[0036]
步骤3.1:检测平滑图像中每一个像素点的梯度幅值和梯度方向;
[0037]
步骤3.2:根据梯度方向,对梯度幅值进行非极大值抑制消除边缘误检,保留相同梯度方向具有最大梯度幅度的像素点的梯度幅值,并将非极大值点的灰度值设置为零,最后得到单像素宽度的边缘图像。
[0038]
具体的,在步骤4中,采用k-means聚类算法得到高、低梯度值的聚类中心的方法的具体步骤如下:
[0039]
步骤4.1:在待分类的图像梯度数据中选取k个聚类中心,即c1,c2,...,ck,然后按照待分类的图像梯度数据到k个聚类中心距离的大小分为相应位置所在的类。
[0040]
步骤4.2:采用误差平方和作为目标函数来衡量分类效果,误差平方和v
sse
表达式为公式(7):
[0041][0042]
式中:cs表示第s个聚类中心的值;c0表示第s个聚类中心的数据点。
[0043]
步骤4.3:使v
sse
值最小,则对v
sse
求偏导并令其为0,公式如下:
[0044][0045]
由(8)式可得其中ms为第s个聚类中心包含的数据个数。
[0046]
步骤4.4:当聚类中心的值取该类数据的均值时,可使v
sse
的局部值最小,所以将各个类数据的均值作为新的聚类中心的值并重新分类。
[0047]
然后求解各类数据的均值,重复以上步骤,直到各均值基本不发生变化,此时v
sse
值为全局最小值,各均值均为最佳的聚类中心。
[0048]
具体的,在步骤5中,采用otsu算法得到梯度的otsu阈值,在高聚类中心、otsu阈值和低聚类中心之间取高、低阈值的方法的具体步骤如下:
[0049]
步骤5.1:将图像分为前景和背景两个部分,分割阈值记为t;
[0050]
步骤5.2:前景部分的像素点占整个图像的比值标记为v0,平均灰度标记为u0;
[0051]
步骤5.3:背景部分的像素点占整个图像的比值标记为v1,平均灰度标记为u1;
[0052]
步骤5.3:整个图像总平均灰度标记为u,类间方差标记为d;图像中小于阈值t的像素点个数标记为n0,大于阈值t的像素点个数标记为n1。
[0053]
步骤5.4:求解划分图像边缘点和非边缘点的最佳阈值t:
[0054]
u=v0*u0+v1*u1ꢀꢀꢀꢀꢀ
(9)
[0055]
d(t)=v0(t)(u
0-u)2+v1(t)(u
1-u)2ꢀꢀꢀꢀ
(10)
[0056]
将式(9)带入式(10)中,得:
[0057]
d(t)=v0(t)v1(t)(u
0-u1)2ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(11)
[0058]
遍历全图,当d(t)为全局最大值时,t值为最佳阈值。
[0059]
步骤5.5:步骤4中引入k-means算法得到高低梯度值的聚类中心ch和c
l
,则高阈值th必在[t,ch]区间中取得,低阈值t
l
必在[c
l
,t]区间中取得。
[0060]
步骤5.6:引入低聚类中心偏移因子u
l
和高聚类中心偏移因子uh,才可准确得到高、低阈值以达到最佳分离效果,其中u
l
和uh的取值范围为[0,1],则高、低阈值分别为:
[0061]
th=c
h-uh(c
h-t)
ꢀꢀꢀꢀꢀꢀ
(12)
[0062]
t
l
=c
l
+u
l
(t-c
l
)
ꢀꢀꢀꢀꢀꢀ
(13)
[0063]
具体的,在步骤6中,利用高、低阈值处理图像边缘,并得到二值化边缘的方法的具体步骤如下:
[0064]
步骤6.1:根据步骤5得到最佳高、低阈值,将梯度值大于高阈值的像素点置为1,梯度值小于低阈值的像素点置为0;
[0065]
步骤6.2:梯度值处于高、低阈值之间的像素点,查找其8邻域是否存在大于高阈值的梯度值,若存在则置为1,反之置为0,最终得到连接性较好的二值化边缘。
[0066]
具体的,在步骤7中,采用面积形态学开运算对二值化边缘的干扰边缘进行去除,并得到最终边缘图像的方法的具体步骤如下:
[0067]
步骤7.1:二值图像中,位置p处的连通域cg(p)为
[0068][0069]
式中:pg(p,q)表示去噪后图像g在位置p和位置q之间的连续路径。路径中的连通元素定义为8连通。
[0070]
步骤7.2:面积形态学开运算的表达式为:
[0071][0072]
式中:|cg(p)|表示像素值为1且连通的区域面积;s表示设定的面积阈值;表示开运算操作。由式(15)可知,面积形态学开运算的结果是将像素值为1的连通域中面积小于s的像素值置为0。
[0073]
步骤7.3:边缘检测过程中,因虚假的边缘面积几乎小于100pixel,与真正的边缘面积相差大,所以对连通域面积过小的边缘认定其为干扰边缘,采用面积形态学开运算对二值化边缘的干扰边缘进行去除,并得到最终的边缘图像。
[0074]
本发明的有益效果是:
[0075]
本发明提出了一种基于高低阈值的canny算子的边缘检测方法的构架,在保留图像细节的同时又能很好的去噪,经实验证实,该改进的算法定位精度高、自适应性强以及干扰点去除效果好。
附图说明
[0076]
通过对结合附图所示出的实施方式进行详细说明,下面描述中的附图仅仅是本发明的一些实施例,在附图中:
[0077]
图1为本实施例中的基于高低阈值的canny算子的边缘检测方法的流程图;
[0078]
图2为本实施例中的不同算法在椒盐噪声的除噪对比图;
[0079]
图3为本实施例中的不同算法处理得到的二值化边缘图像;
[0080]
图4为本实施例中的最终边缘检测的图像。
具体实施方式
[0081]
下面结合附图和具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
[0082]
为了实现上述目的,根据本发明的一方面,本发明提出了一种基于高低阈值的canny算子的边缘检测方法,图1为本实施例中的基于高低阈值的canny算子的边缘检测方法的流程图,如图1所示,该方法包括以下步骤:
[0083]
步骤1,对源图像进行平滑滤波处理,并用开关中值滤波代替高斯滤波对图像去除噪声;
[0084]
步骤2,对步骤1中平滑滤波处理并去噪声后的图像采用sobel算子计算图像梯度幅值和方向;
[0085]
步骤3,对步骤2得到的梯度幅值进行非极大值抑制得单像素宽度的边缘图像
[0086]
步骤4,采用k-means聚类算法得到高、低梯度值的聚类中心;
[0087]
步骤5,采用otsu算法得到梯度的最佳阈值,在高聚类中心、最佳阈值和低聚类中心之间取高、低阈值;
[0088]
步骤6,利用高、低阈值处理步骤3得到的单像素宽度的边缘图像,并得到二值化边缘;
[0089]
步骤7,采用面积形态学开运算对二值化边缘的干扰边缘去除,并得到最终边缘图像。
[0090]
具体的,在步骤1中,对源图像进行平滑滤波处理,并用开关中值滤波代替高斯滤波对图像去除噪声的方法的具体步骤如下:
[0091]
步骤1.1:选用二维高斯函数对图像进行平滑滤波处理,高斯函数的计算公式为:
[0092]
[0093]
其中,h(x,y,σ)是二维高斯函数,σ表示平滑程度,π表示圆周率,x表示中心点的横坐标,y表示中心点的纵坐标;exp(
·
)表示以自然常数e为底的指数函数。
[0094]
步骤1.2:对噪声进行检测:
[0095]
一幅图像v,其椒盐噪声检测的表达式为公式(2):
[0096][0097]
式中:g
(i,j)
表示v中第i行、第j列像素点的灰度值;
[0098]amin
和a
max
分别表示以点(i,j)为中心的3x3窗口内最小灰度均值和最大灰度均值;
[0099]f(i,j)
表示第i行、第j列的像素点是否为噪声点。
[0100]
步骤1.3:对噪声点进行标记:
[0101]
当g
(i,j)
介于a
min
和a
max
之间时,标记f
(i,j)
为1,反之该点为噪声点,标记f
(i,j)
为0。
[0102]
步骤1.4:采用开关中值滤波算法对图像进行处理:
[0103]
根据开关中值滤波的原理,对f
(i,j)
标记为1的像素点保持其灰度值不变,对f
(i,j)
标记为0的像素点灰度值使用其所在位置的中值来代替。
[0104]
具体的,在步骤2中,对基于平滑后的图像采用sobel算子计算图像梯度幅值和方向的方法的具体步骤如下:
[0105]
步骤2.1:sobel算子结合高斯平滑和微分求导,计算图像灰度的近似梯度。
[0106]
步骤2.2:sobel算子对水平和垂直两个方向上求导,得x方向和y方向梯度图像:
[0107]
水平变化:将图像i与一个奇数大小的内核g
x
进行卷积。当内核大小为3时,g
x
的计算结果为公式(3):
[0108][0109]
垂直变化:将图像i与一个奇数大小的内核gy进行卷积。当内核大小为3时,gy的计算结果为公式(4):
[0110][0111]
步骤2.3:在图像i的每一点上,求出近似梯度:
[0112]
步骤2.4:在图像i的每一点上,求出梯度方向:
[0113]
具体的,在步骤3中,对平滑图像的梯度幅值进行非极大值抑制得单像素宽度的边缘图像的方法的具体步骤如下:
[0114]
步骤3.1:检测平滑图像中每一个像素点的梯度幅值和梯度方向;
[0115]
步骤3.2:根据梯度方向,对梯度幅值进行非极大值抑制消除边缘误检,保留相同梯度方向具有最大梯度幅度的像素点的梯度幅值,并将非极大值点的灰度值设置为零,最
后得到单像素宽度的边缘图像。
[0116]
具体的,在步骤4中,采用k-means聚类算法得到高、低梯度值的聚类中心的方法的具体步骤如下:
[0117]
步骤4.1:在待分类的图像梯度数据中选取k个聚类中心,即c1,c2,...,ck,然后按照待分类的图像梯度数据到k个聚类中心距离的大小分为相应位置所在的类。
[0118]
步骤4.2:采用误差平方和作为目标函数来衡量分类效果,误差平方和v
sse
表达式为:
[0119][0120]
式中:cs表示第s个聚类中心的值;c0表示第s个聚类中心的数据点。
[0121]
步骤4.3:使v
sse
值最小,则对v
sse
求偏导并令其为0,公式如下:
[0122][0123]
由(8)式可得其中ms为第s个聚类中心包含的数据个数。
[0124]
步骤4.4:当聚类中心的值取该类数据的均值时,可使v
sse
的局部值最小,所以将各个类数据的均值作为新的聚类中心的值并重新分类。
[0125]
然后求解各类数据的均值,重复以上步骤,直到各均值基本不发生变化,此时v
sse
值为全局最小值,各均值均为最佳的聚类中心。
[0126]
具体的,在步骤5中,采用otsu算法得到梯度的otsu阈值,在高聚类中心、otsu阈值和低聚类中心之间取高、低阈值的方法的具体步骤如下:
[0127]
步骤5.1:将图像分为前景和背景两个部分,分割阈值记为t;
[0128]
步骤5.2:前景部分的像素点占整个图像的比值标记为v0,平均灰度标记为u0;背景部分的像素点占整个图像的比值标记为v1,平均灰度标记为u1;
[0129]
步骤5.3:整个图像总平均灰度标记为u,类间方差标记为d;图像中小于阈值t的像素点个数标记为n0,大于阈值t的像素点个数标记为n1。
[0130]
步骤5.4:求解划分图像边缘点和非边缘点的最佳阈值t:
[0131]
u=v0*u0+v1*u1ꢀꢀꢀꢀꢀꢀꢀ
(9)
[0132]
d(t)=v0(t)(u
0-u)2+v1(t)(u
1-u)2ꢀꢀꢀꢀꢀꢀꢀ
(10)
[0133]
将式(9)带入式(10)中,得:
[0134]
d(t)=v0(t)v1(t)(u
0-u1)2ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(11)
[0135]
遍历全图,当d(t)为全局最大值时,t值为最佳阈值。
[0136]
步骤5.5:步骤4中引入k-means算法得到高低梯度值的聚类中心ch和c
l
,则高阈值th必在[t,ch]区间中取得,低阈值t
l
必在[c
l
,t]区间中取得。
[0137]
步骤5.6:引入低聚类中心偏移因子u
l
和高聚类中心偏移因子uh,才可准确得到高、低阈值以达到最佳分离效果,其中u
l
和uh的取值范围为[0,1],则高、低阈值分别为:
[0138]
th=c
h-uh(c
h-t)
ꢀꢀꢀꢀꢀ
(12)
[0139]
t
l
=c
l
+u
l
(t-c
l
)
ꢀꢀꢀꢀꢀꢀ
(13)
[0140]
具体的,在步骤6中,利用高、低阈值处理图像边缘,并得到二值化边缘的方法的具体步骤如下:
[0141]
步骤6.1:根据步骤5得到最佳高、低阈值,将梯度值大于高阈值的像素点置为1,梯度值小于低阈值的像素点置为0;
[0142]
步骤6.2:梯度值处于高、低阈值之间的像素点,查找其8邻域是否存在大于高阈值的梯度值,若存在则置为1,反之置为0,最终得到连接性较好的二值化边缘。
[0143]
具体的,在步骤7中,采用面积形态学开运算对二值化边缘的干扰边缘进行去除,并得到最终边缘图像的方法的具体步骤如下:
[0144]
步骤7.1:二值图像中,位置p处的连通域cg(p)为
[0145][0146]
式中:pg(p,q)表示去噪后图像g在位置p和位置q之间的连续路径。路径中的连通元素定义为8连通。
[0147]
步骤7.2:面积形态学开运算的表达式为:
[0148][0149]
式中:|cg(p)|表示像素值为1且连通的区域面积;s表示设定的面积阈值;表示开运算操作。由式(15)可知,面积形态学开运算的结果是将像素值为1的连通域中面积小于s的像素值置为0。
[0150]
步骤7.3:边缘检测过程中,因虚假的边缘面积几乎小于100pixel,与真正的边缘面积相差大,所以对连通域面积过小的边缘认定其为干扰边缘,采用面积形态学开运算对二值化边缘的干扰边缘进行去除,并得到最终的边缘图像。
[0151]
实验1,步骤1中采用开关中值滤波对图像去除噪声,与采用高斯滤波去噪的处理结果对比如下:在图2中,图2中的(a)为原图,图2中(b)为椒盐噪声图,图2中(c)为高斯滤波去噪图,图2中(d)为开关中值滤波去噪图。
[0152]
实验2,步骤6中利用高、低阈值处理图像边缘,并得到二值化边缘图像与直接用ostu算法得到的二值化边缘图像如图3(a)和图3(b)所示:由图3可知,otsu算法的阈值选取较本实施例所用的k-means聚类算法得到高、低梯度值的聚类中心,然后在高聚类中心、otsu阈值和低聚类中心之间取高、低阈值的方法而言,图像的边缘细节保留不足,导致目标轮廓不连续且边缘细节信息丢失;而本实施例提出的算法既保留边缘细节,又有较好的适用性,如图3(a)所示。
[0153]
实验3,在步骤7中采用面积形态学开运算对二值化边缘的干扰边缘进行去除,并得到最终边缘图像如图4所示:在图4中,图4中(a)为原图,图4中(b)为最终边缘图像。
[0154]
由图4和图3(a)对比可知,对于得到的二值化边缘图像进行干扰边缘的去除,其边缘细节检测效果更好,定位精度更高。
[0155]
以上所述仅是本发明的实施方式,尽管本发明对几个所述实施例进行描述,但并非旨在局限于这些实施例。对于本技术领域的普通技术人员来说,在不脱离本发明原理的基础上,可对本发明进行改进,所有的改进都列入本发明权力要求的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1