Open CV 中用于轮廓估计的 Canny Edge 与阈值

Canny Edge vs Thresholding for contour estimation in Open CV

我正在将 Open CV 用于涉及图像轮廓估计的图像处理应用程序。我想知道的是对图像进行阈值处理(就像他们的做法 here) or using Canny Edge Algorithm (here)是否会产生更好的结果。这涉及算法分析还是我遗漏了什么?

显然是 Canny 边缘检测。它做了一大堆事情来确保结果中只有强边缘。阈值处理只是查看强度并查看每个值是更小还是更大,我们分别得到 "edge" 分。 但是,根据场景的复杂程度,阈值化和边缘检测会产生相同的结果。例如,如果您有一个干净的图像,其中包含多个清晰的对象,这些对象在前景和背景之间具有明显的强度差异,那么边缘检测或阈值处理都可以。如果您有一个更复杂的图像,其中不同区域的对比度不同,或者如果您有多个具有不同强度的对象,那么阈值处理不会给您带来好的结果,因为您将不可避免地包含不属于任何适当区域的像素对象。这就是边缘检测更好的原因,因为它是 local 运算符,而阈值是 global。阈值处理对图像中的每个像素 应用一组原则。边缘检测将您的图像分解为小块,并确定每个小块中是否发生了某些事情。


如果要从中有所借鉴的话,两者的区别在于阈值化更多的是用于对象提取,而边缘检测是处理流水线中的一个预处理步骤,比如轮廓估计,对象检测识别和特征分析。阈值是一种相当快速和肮脏的方式来查看是否正在发生某些事情,或者提取出 "active" 东西,而边缘检测更多地用于计算机视觉相关任务。


我不会解释 Canny 边缘检测如何更好,而是让您参考一些文献。


希望对您有所帮助!