Canny 边缘检测算法

Canny:边缘检测算法:其对受白噪声影响的阶跃型边缘是最优的。

目的:
返回一个二值图像,非零数值表示图像中边缘的存在,返回与边缘相关的尺度和方向信息

标准:
检测标准:不丢失重要的边缘,不应有虚假的边缘

定位标准:实际边缘与检测到的边缘位置之间的偏差最小

单响应标准:将多个响应降低为单个边缘响应。这个标准可以解决受噪声影响的边缘问题,以及起到地址非平滑边缘检测算子的作用。

步骤:
A、用高斯滤波器对图像去噪

B、计算像素的梯度

C、在边缘检测的基础上使用非最大抑制NMS&是B步的辅助

D、在检测到的边缘上使用双double阈值去除假阳性&又被称为滞后阈值化处理

E、分析所有的边缘以及其之间的连接,以保留真正的边缘,并消除不明显的边缘。(一般这一步都会省略)

步骤解释:

B、计算梯度

①与正交微分滤波器(Prewitt)做卷积

②生成水平方向上导数图像H和垂直方向上的导数图像V

Canny 边缘检测算法_第1张图片

当幅度超过一个临界值时,需要使用非极大值抑制的方法,删除这些不需要的响应。

C、非极大值抑制:搜索局部极大值,抑制非极大值。

Canny 边缘检测算法_第2张图片

<2>与每个角度相关的像素被分别处理。若垂直于梯度的相邻两个像素中的任何一个有较大数值,其幅度将被设置为0。

意义:这样的话,边缘幅值分布极大值处的梯度可以保留,而那些远离极大值的梯度将被抑制。

D双double阈值去除假阳性&滞后阈值化处理—基本属于收尾阶段

为了防止出现给定阈值的漏检或者误检现象(幅值<阈值,但是有边缘/标记为边缘但是实际上不存在此边缘),给定两个阈值x1,x2,其中x1

import cv2
import numpy as np

v2.imread("img.jpg", 0) 
cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300)) 
cv2.imshow("canny", cv2.imread("canny.jpg"))
cv2.waitKey()
cv2.destroyAllWindows()

结果为:
Canny 边缘检测算法_第3张图片

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