边缘检测

边缘检测步骤:
1)、滤波:边缘检测一般是使用图像的一阶或二阶导数求极值来确定图像的边缘。由于导数对图像的噪声很敏感,因此用滤波器来改善或消除噪声的影响。常见的处理方法是采用高斯滤波(归一化)。
2)、图像边缘增强:增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。可通过梯度的幅值来确定。
3)、检测:经过增强的图像,往往邻域中很多点的梯度值比较大,但在特定的环境中,并不是要找的边缘点。所以采取某种方法进行取舍。
边缘检测算子
1、canny算子
canny边缘检测步骤:
1、消除噪声
使用高斯平滑滤波器卷积降噪。
2、计算梯度幅值和方向Gx与Gy为转置关系
3、非极大值抑制
排除边缘像素,仅仅保留一些候选边缘
4、滞后阈值
使用两个阈值对候选边缘像素进行判断(高阈值和低阈值)
1),若像素超过高阈值,则像素保留我边缘像素
2)、若像素低于低阈值,则像素排除
3)、若像素的位置位于两者之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
python-opencv

cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> edges

参数说明:
image:单通道图像
threshold 1/2:阈值
L2gradient,计算图像梯度的幅值。
cv2.Canny(img,100,150)
Sobel算子:
Canny算子是Sobel算子的升级版。用来计算灰度图像的近似梯度。
计算方法:
分别在X和Y两个方向求导。
这里写图片描述
Sobel函数

help(cv2.Sobel)
Help on built-in function Sobel:

Sobel(...)
    Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) -> dst

参数说明:
src:输入的灰度图像
ddepth:输出图像的深度,输出原图深度可取 -1
dx:X方向的差分阶数
dy:Y方向的差分阶数
ksize:核大小,默认为3
scale:缩放因子

将X方向和Y方向的合起来:

addWeighted(...)
    addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst

参数说明:
alpha,beta 权重参数
gamma:是加到最后结果上的值

import cv2
img=cv2.imread("G:\python_cv2\dataset\Fanbb.jpg",0)

#canny_edg=cv2.Canny(img,50,150)
sobel_edgX=cv2.Sobel(img,cv2.CV_8U,1,0)
sobel_edgY=cv2.Sobel(img,cv2.CV_8U,0,1)
dst_sobel=cv2.addWeighted(sobel_edgX,0.5,sobel_edgY,0.5,0)
cv2.imshow("sobel",dst_sobel)
cv2.imshow("sobel_edgX",sobel_edgX)
cv2.imshow("sobel_edgY",sobel_edgY)
cv2.imshow("orignal",img)
cv2.imshow("Canny",canny_edg)
cv2.waitKey()
cv2.destroyAllWindows()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值