图像边缘检测

图像边缘检测

边缘检测概述

⚫边缘检测可以提取图像重要轮廓信息, 减少图像内容, 可以用于分割图像、做特征提取等

⚫边缘检测的一般步骤:

滤波----(滤出噪声対检测边缘的影响)

增强----(可以将像素邻域强度变化凸显出来—梯度算子)

检测----(阈值方法确定边缘)

⚫常用边缘检测算子:

Canny算子
Sobel算子
Scharr算子
Laplacian算子
Roberts 算子
Prewitt算子… …

1)Canny边缘检测

Canny边缘检测算子是John F.Canny于1986 年开发出来的一个多级边缘检测算法,Canny边缘检测算法以Canny的名字命名, 被很多人推崇为当今最优的边缘检测的算法。

Canny边缘检测步骤:

 消除噪声: 一般情况使用高斯平滑滤波器卷积降噪

 计算梯度幅值和方向: 安装Sobel滤波器的步骤操作

 非极大值抑制: 排除非边缘像素

 滞后阈值: 滞后阈值需要两个阈值(高阈值和低阈值):
在这里插入图片描述

Canny边缘检测函数—cv2.Canny()

在这里插入图片描述
⚫ src: 输入原图像(一般为单通道8位图像)
⚫ dst: 输出边缘图像要求和src一样的尺寸和类型(单通道)
⚫ threshold1: 滞后阈值低阈值(用于边缘连接)

⚫ threshold2: 滞后阈值高阈值(控制边缘初始段)推荐高低阈值比值在2:1到3:1之间
⚫ apertureSize: 表示Sobel算子孔径大小, 默认值3
⚫ L2gradient: 计算图像梯度幅值的标识
代码示例:

img = cv2 .imread('A.jpg')
gray = cv2.cvtColor(img, CV2.COLOR BGR2GRAY)
gray = cv2.GaussianBlur (gray, (3,3)0)
edged = cv2.Canny (gray,100255)

Canny边缘效果:

图像边缘检测_第1张图片

2)Sobel算子

Sobel算子是一个主要用于边缘检测的离散微分算子, 它结合了高斯平滑和微分求导, 用来计算图像灰度函数的近似梯度。

Sobel算子计算过程:

分别在x和y两个方向求导:
图像边缘检测_第2张图片

Sobel边缘检测函数—cv2.Sobel()

在这里插入图片描述
⚫ src: 输入原图像
⚫ dst: 输出图像要求和src一样的尺寸和类型
⚫ ddepth: 输出图像的深度, 支持如下组合:
若src.depth0 = CV 8U,取ddepth =-1/CV 16S/CV 32F/CV 64F。
若src.depth0 = CV 16U/CV 16S,取ddepth =-1/CV 32F/CV 64F。
若src.depth0 = CV 32F, 取ddepth =-1/CV 32F/CV 64F。
若src.depth0 = CV 64F,取ddepth = -1/CV 64F

⚫ dx: X方向上的差分阶数
⚫ dy: Y方向上的差分阶数

⚫ ksize: 默认值3, 表示Sobel核大小, 1,3,5,7
⚫ scale: 计算导数值时的缩放因子, 默认值1, 表示不缩放

⚫ delta(δ): 表示在结果存入目标图之前可选的delta值, 默认值0

⚫ borderType: 边界模式, 一般采用默认

代码示例:

img = cv2.imread("2 .png" ,0)
img = cv2 .blur (img, (5 , 5) )
x = cv2.Sobel(img,cv2.CV 16s,1,0,ksize=3)
y = cv2.Sobel (img,cv2.CV 16s,0,1,ksize=3)absx = cv2.convertScaleAbs(x) # 转回uint8
absY = cv2.convertscaleAbs (y)
dst = cv2 .addweighted(absx,0 .5,absY,0.5,0)cv2 .imshow("absx",absx)
cv2 .imshow("absy",absY)
cv2.imshow("Result",dst)
cv2 .waitKey(0)
cv2.destroyAllWindows ()

3)Laplacian算子

Laplacian算子是n维欧几里德中的一个二阶微分算子。Laplacian算子的定义:
在这里插入图片描述
Laplacian边缘检测函数— cv2.Laplacian()
在这里插入图片描述
⚫ src: 输入原图像(单通道8位图像)
⚫ dst: 输出边缘图像要求和src一样的尺寸和通道数

⚫ ddepth: 目标图像的深度
⚫ Ksize: 用于计算二阶导数的滤波器孔径大小, 须为正奇数, 默认值1
⚫ scale: 可选比例因子, 默认值1
⚫ delta: 可选参数δ, 默认值0

⚫ borderType: 边界模式, 一般采用默认值

代码示例:

img = cv2 .blur (img, (3 , 3))
Laplacian = cv2.Laplacian (img, cv2.CV 16s, ksize=3)
Result = cv2.convertScaleAbs (Laplacian) # 转回uint8

图像边缘检测_第3张图片

你可能感兴趣的:(计算机视觉,opencv,人工智能)