首页 > 其他 > 详细

openCV入门----边缘检测(一):基于一阶导数的梯度算子

时间:2015-10-27 02:10:09      阅读:712      评论:0      收藏:0      [点我收藏+]

首先要了解一下梯度的概念,在高等数学中,对于连续的二维函数f(x,y),其点在(x,y)处的梯度是一个二维列向量

V?=?[f对x偏导数?f对y偏导数]’

那么梯度的幅值就是

???????????????|V|?=?sqrt(f对x偏导数^2?+?f对y偏导数^2)

从而对于离散的二维离散的函数f(i,j),微分往往可以用差分表示,如下式:

??????????????|?V’|?=?sqrt([f(i+1,j)?-?f(i,j)]^2?+?[f(i,j+1)?-?f(i,j)]^2)

在图像处理中,往往将梯度幅值看作是梯度!两者不加以区分。为了方便计算,可以将上述根式近似为绝对值的形式:

??????????????|?V’|?=?|f(i+1,j)?-?f(i,j)|?+?|f(i+1,j)?-?f(i,j)|

在实际应用中,往往使用另一种近似梯度-----Robert交叉梯度

??????????????|?V’|?=?|f(i+1,j+1)?-?f(i,j)|?+?|f(i,j+1)?-?f(i+1,j)|

?

?

常用的两种一阶导数的图像增强算子:

Robert算子:

[-1,?0;?0,?1]:检测接近45度边缘?----G1

[0,?-1;?1,?0]:检测接近-45度边缘?----G2

最终的robert交叉梯度图像为G?=?G1?+?G2

?

Sobel算子:

[-1,?-2,?-1;?0,?0,?0;?1,?2,?1]:对水平边缘有较大响应?-----G1

[-1,?0,?1;?-2,?0,?2;?-1,?0,?1]:对竖直边缘有较大响应?-----G2

Sobel梯度图像?G?=?G1?+?G2

(注:因为对于图像出来,人们更喜欢使用奇数尺寸的模板,于是sobel算子用得更为普遍)

Sobel算子在openCV中的使用:

cvSobel(?const?CvArr*?scr?,?

?????????????CvArr*?dst?,

?????????????int????xorder,

?????????????int????yorder,

?????????????int????aperture_size?=?3);?

<!--EndFragment-->

?

*Xorder,yorder:

?

?

X方向,y方向上的导数阶数,通常只用到0,1,最多2

*aperture_size:

扩展?Sobel?核的大小,必须是?1,?3,?5?或?7。?除了尺寸为?1,?其它情况下,?aperture_size?×aperture_size?可分离内核将用来计算差分。对?aperture_size=1的情况,?使用?3x1?或?1x3?内核?(不进行高斯平滑操作)。这里有一个特殊变量?CV_SCHARR?(=-1),对应?3x3?Scharr?滤波器,可以给出比?3x3?Sobel?滤波更精确的结果。这里的scharr滤波器实际上使用了下图所示的模板,与普通3*3模板不同的是微分权重系数不同


?????????????????????????????????? bubuko.com,布布扣
?

?

结果比对:


bubuko.com,布布扣
?Sobel普通3*3模板边缘检测效果


bubuko.com,布布扣
?scharr模板边缘检测效果

?

<!--EndFragment-->

openCV入门----边缘检测(一):基于一阶导数的梯度算子

原文:http://lps-683.iteye.com/blog/2251903

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!