图像边缘检测:边缘检测基本思想、基本边缘检测算子、Canny算子

图像边缘检测—基本思想

边缘检测的本质是微分

实际中常用差分,x方向和y方向

图像边缘检测—算本算子

Robert算子卷积核

 

Sobel算子卷积核

图像边缘检测—Laplace算子

图像边缘检测—LoG算子

Canny算子

已有问题:噪声;断裂;虚检(渐变灰度)

Canny算子核心优点:边缘可自动连通

算法步骤:

平滑图像同时计算微分;

计算梯度(幅度和方向);

梯度幅值进行非极大值抑制;

自动边缘连接

Canny算子计算步骤1:同时平滑与微分

使用高斯函数的一阶导数同时完成平滑和微分

Canny算子计算步骤2:梯度计算

进一步可得梯度幅值和方向:

方向离散化:离散化为上下左右和斜45°共4个方向

Canny算子计算步骤3:梯度幅值非极大值抑制

细化梯度幅值图像中的屋脊带,只保留幅值局部变化最大的点

使用一个3*3领域作用于幅值阵列的所有点。在每一点上,领域的中心像素与沿梯度方向的两个梯度幅值的插值结果进行比较,仅保留极大值点

Canny算子计算步骤4:边缘连接

对上一步得到的图像使用低、高阈值阈值化,得到三幅图像

T1对应假边缘,去除

T3对应真边缘,全部保留

T2连接:临接像素中是否有属于T3的像素

相关函数

Sobel算子

CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,
                                                  int dx, int dy, int ksize = 3,
                                                  double scale = 1, double delta = 0,
                                                  int borderType = BORDER_DEFAULT );

拉普拉斯滤波

CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,
                                                        int ksize = 1, double scale = 1, double delta = 0,
                                                        int borderType = BORDER_DEFAULT );

Canny算子

    CV_EXPORTS_W void Canny(InputArray image, OutputArray edges,
                                                     double threshold1, double threshold2,
                                                     int apertureSize = 3, bool L2gradient = false);

猜你喜欢

转载自blog.csdn.net/qq_40008456/article/details/89644633