我将Open CV用于图像处理应用程序,该应用程序涉及图像中的轮廓估计。我想知道的是,对图像进行阈值处理(就像他们在这里所做的那样)或使用Canny边缘算法(这里)是否会产生更好的结果。这是涉及算法分析,还是我遗漏了什么?
Canny边缘检测明显。它做了一大堆事情来确保结果只有强大的优势。阈值化只需要查看强度,看看每个值是小是大,我们就可以分别得到"边缘"点然而,根据场景的复杂性,阈值处理和边缘检测会产生相同的结果。例如,如果你有一个干净的图像,其中有多个清晰的对象,前景和背景之间有明显的强度差异,那么边缘检测或阈值处理都可以。如果你有一个更复杂的图像,不同区域的对比度不同,或者你有多个强度不同的对象,那么阈值处理不会给你带来好的结果,因为你不可避免地会包含不属于任何合适对象的像素。这就是为什么边缘检测更好,因为它是一个局部算子,阈值是全局。阈值处理将集合原理应用于图像中的每个像素。边缘检测将图像分解为多个补丁,并判断每个补丁中是否发生了什么。
如果你想从中得到一些东西,它们之间的区别在于,阈值处理更多地用于对象提取,而边缘检测是处理管道中的预处理步骤,如轮廓估计、对象检测和识别以及特征分析。阈值化是一种非常快速和肮脏的方式,可以查看是否发生了什么,或者提取出"活跃"的东西,而边缘检测更多地用于计算机视觉相关的任务。
与其解释Canny边缘检测如何更好,我将向您介绍一些文献。
- 德雷克塞尔大学的这一页对我来说是一件很棒的事情:http://dasl.mem.drexel.edu/alumni/bGreen/www.pages.drexel.edu/_weg22/can_tut.html
- 本页来自Computer Vision Online,内容更为深入:http://homepages.inf.ed.ac.uk/rbf/HIPR2/canny.htm
希望这能有所帮助!