图像边缘检测—基本思想
边缘检测的本质是微分
实际中常用差分,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);