1、边缘
1.1 边缘定义
以图像像素值突变最大的方向作为边缘法线,与边缘法线垂直的就是边缘。
边缘强度:局部图像上的像素值突变程度(图像局部一阶梯度和二阶梯度值)。
1.2 边缘类别
跃迁类型 屋脊类型
2、边缘提取
2.1 基于梯度的边缘提取
步骤:先高斯模糊去噪(选用3×3的核),再基于梯度提取边缘(使用robert算子、sobels算子、prewitt算子),最后对图像梯度进行阈值处理,大于T的保留,小于T的舍弃。
缺点:单一阈值使得边缘图像不够连贯。
2.2 Canny边缘提取
步骤:
1、滤波处理(高斯滤波)。
2、使用梯度算子获取梯度值G、梯度方向。
3、非最大抑制:保留与垂直方向上,梯度值最大的像素点,如下左1、2图上,当红框的像素点值,是在橙色箭头方向上最大的,则保留。
在实际应用中为减少运算量,只会对如下、、等角度的梯度进行非最大抑制。
4、高低阈值链接,分别设定高低阈值T1、T2,一般T1/T2 = 2~3,将像素值大于T1的像素点全部保留,小于T2的全部舍弃,T1到T2之间的如果在其八邻域内有高阈值保留像素点,则保留,反之丢弃。
代码示例:
static void cannny_track_bar(int b, void* image_data) {
//canny
Mat image = *((Mat*)image_data);
Mat edge1;
Canny(image, edge1, b, b*2, 3);
imshow("canny", edge1);
}
void edge_catch(Mat& image)
{
namedWindow("canny", WINDOW_FREERATIO);
int t = 50;
createTrackbar("canny bar", "canny", &t, 100, cannny_track_bar,(void*)&image);
cannny_track_bar(50, &image);
}
结果: