基于C++的OpenCV4入门基础–边缘检测之 Canny 算子

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。基于C++的OpenCV4入门基础–边缘检测之 Canny 算子,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1,Canny 边缘检测算法
Canny 算法希望在提高边缘的敏感性的同时抑制噪声, 具体而言包括三个基本目标:

错误率低,对边缘的错判率、漏判率低;
定位性能好,检测的边缘点尽可能接近实际边缘的中心;
单一边缘有且应当只有一个准确的响应 ,并尽可能抑制虚假边缘。
Canny 算法的本质是从数学上表达了这三个准则,并试图得到最优解。Canny 算法使用四个指数函数的线性组合形成的最佳边缘算子,可以由高斯函数的一阶导数来近似。

Canny 边缘检测算法是目前最优秀和最流行的边缘检测算法之一。算法不容易受噪声影响,能够识别图像中的弱边缘和强边缘,并能结合强弱边缘的位置关系给出图像整体的边缘信息。但是 Canny 算法编程复杂、运算较慢。

Canny 算法的基本步骤为:

(1)使用高斯滤波对图像进行平滑;
用二维高斯核与灰度图像进行卷积,实现平滑滤波:![在这里插入图片描述]

在这里插入图片描述

(2)用一阶有限差分计算梯度幅值和方向;

梯度向量的幅度 M 和角度 α \alpha α 为:
在这里插入图片描述
具体应用中,可以采用 Sobel 算子、Prewitt算子、Roberts算子等进行梯度幅值的计算。

(3)对梯度幅值进行非极大值抑制(NMS);

为了实现单一边缘仅有唯一响应,沿着梯度方向寻找像素点的局部最大值, 将局部最大值之外的所有梯度值抑制为 0,剔除非边缘的像素点。

(4)用双阈值处理和连通性分析来检测和连接边缘。

应用双阈值 TH、TL 划分强边缘和弱边缘。将边缘处的梯度幅值与阈值比较:如果大于 TH则标记为强边缘,如果在 TL 与 TH 之间则标记为弱边缘,如果小于 TL 则被抛弃。
在这里插入图片描述
在这里插入图片描述

2,API:Canny

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

参数说明:

image:输入图像,8-bit 灰度图像,不适用彩色图像
edges:输出边缘图像,8-bit 单通道图像,大小与输入图像相同
threshold1:第一阈值 TL
threshold2:第二阈值 TH
apertureSize:Sobel 卷积核的孔径,可选项,默认值 3
L2gradient: 计算图像梯度幅值 标志符,默认值为 True 表示 L2 法,False 表示 L1 法
注意事项:
阈值 TL 用于边缘连接,阈值 TH 用于控制强边元的初值,推荐选择阈值比为 1:2~1:3。

3,用法

//canny 边缘提取
void canny_demo(int, void*) {
	Mat edges, dst;
	Canny(src, edges, t1, t1*3, 3, false);
	bitwise_and(src, src, dst, edges);
	imshow("edges", dst);
}

//图像边缘提取
int main() {

	src = imread("F:/code/images/test.png");
	if (src.empty()) {
		printf("fail to read");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);

	//canny 边缘提取
	createTrackbar("threshoold value", "input", &t1, 100, canny_demo);
	canny_demo(0, 0);
	
	waitKey(0);
	destroyAllWindows();

	return 0;
}

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/182007.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!