边缘检测是计算机视觉中的一种图像处理技术,涉及识别图像中对象的轮廓。
Canny 边缘检测是边缘检测的最佳技术之一。它旨在检测清晰、清晰的边缘,同时减少噪音并避免错误边缘。它使用双阈值方法来检测图像中的边缘:高阈值和低阈值。
img = cv2.Canny('photo.jpg') img_edges = cv2.Canny(img, 100, 200) // 100 is the low threshold // 200 is the high threshold
阈值决定什么成为边缘,什么不成为边缘。为了做出这个决定,我们使用梯度值:
梯度值不是原始图像值。它们是通过检查图像中像素强度变化的程度从原始图像中计算得出的数字。我们使用梯度值是因为原始图像值不能直接告诉我们边缘在哪里。
一个简单的例子来说明像素强度的变化:如果两个相邻像素具有非常不同的值(例如 50 和 200,梯度值为 150),则存在很大的变化 - 它可能是边缘。但如果两个相邻像素具有相似的值(例如 50 和 52,梯度值为 2),则变化很小,成为边缘的可能性也很小。
计算出梯度值后,将它们与阈值进行比较,以确定什么是强边缘、潜在边缘或非边缘。
通过使用一种称为迟滞边缘跟踪的方法,该方法决定连接的边缘并应保持VS丢弃。该算法的工作原理是查看每个潜在边缘像素的 8 个邻居(直接相邻的像素 - 顶部、底部、左侧、右侧和对角线)。任何直接或间接连接到强边缘的像素都包含在最终结果中。
50 80 110 90 70 250 190 120 60 180 150 70 40 60 80 50
想象一下上面的渐变图:
应用阈值(低 = 100,高 = 200)后,强边缘像素(> 200)立即保留为边缘。这里,只有像素 250 被标记为强边缘。
潜在边缘像素 (100–200) 为 110、190、120、180 和 150。现在我们有了潜在边缘池,我们执行边缘跟踪来决定哪些要保留,哪些要丢弃。该算法检查是否有任何潜在边直接或间接连接到强边 (250)。
例如:
弱边缘像素(
以上是Canny 边缘检测的详细内容。更多信息请关注PHP中文网其他相关文章!