OpenCV Canny Detector
理论 Canny边缘检测是由John F. Canny在1986年开发的。许多人也将其称为最佳检测器,Canny算法旨在满足三个主要标准。 好的检测:算法能够尽可能多地标识出图像中的实际边缘。 好的定位:标识出的边缘要与实际图像中的实际边缘尽可能接近。 最小响应:图像中的边缘只能标识一次,并且可能存在的图像雜訊不应标识为边缘。 步骤 降噪:使用高斯滤波来达到,下面是一个大小为 $5$ 的高斯核的例子: $$ K = \frac{1}{159}\begin{bmatrix} 2 & 4 & 5 & 4 & 2\\ 4 & 9 & 12 & 9 & 4\\ 5 & 12 & 15 & 12 & 5\\ 4 & 9 & 12 & 9 & 4\\ 2 & 4 & 5 & 4 & 2 \end{bmatrix} $$ 找到图像的亮度梯度:为此,我们遵循一个类似于Sobel的程序: 应用一对卷积masks(在 $x$ 和 $y$ 方向上): $$ G_x = \begin{bmatrix} -1 & 0 & +1\\ -2 & 0 & +2\\ -1 & 0 & +1 \end{bmatrix}, G_y=\begin{bmatrix} -1 & -2 & -1\\ 0 & 0 & 0\\ +1 & +2 & +1 \end{bmatrix} $$ 寻找梯度强度和方向: $$ G=\sqrt{G_x^2+G_y^2}\\ \theta = \arctan(\frac{G_y}{G_x}) $$ 方向被四舍五入为四个可能的角度之一(即 $0\degree$ 、 $45\degree$ 、 $90\degree$ 或 $135\degree$ )。 过滤非最大值:在高斯滤波过程中,边缘有可能被放大了。这个步骤使用一个规则来过滤不是边缘的点,使边缘的宽度尽可能为1个像素点:如果一个像素点属于边缘,那么这个像素点在梯度方向上的梯度值是最大的。否则不是边缘,将灰度值设为 $0$ 。 $$ M_T(m, n) = \begin{cases} M(m, n)& \text{if } M(m, n) \lt T\\ 0 & \text{otherwise} \end{cases} $$...