什么是复杂形状匹配的最佳方法

时间:2014-03-12 15:27:40

标签: c++ algorithm image-processing

我需要知道匹配图像中某个形状(模板)的最佳方法是什么。

我知道有几种方法,但有些方法并没有带来非常好的结果而另一方需要大量的处理时间,所以任何人都尝试用一种快速的方法来进行短时间的匹配。 / p>

例如,这是模板......

enter image description here

我有一个样本,我想比较样本和模板,如果样本与模板相似则返回true,否则返回false。

注意:我尝试过轮廓匹配,级联分类和SURF,但所有这些都不是很好或者处理时间不是很好。

1 个答案:

答案 0 :(得分:12)

与彼此匹配可能是一项相当困难的任务,主要是因为不同的技术具有非常不同的特征,并且可以在某些类别上产生几乎完美的结果,而在其他类别上产生非常差的结果。

这就是说,我不认为你会得到你的问题的答案,至少没有人会说[#引用文件中使用xyx方法],这将解决你的所有问题问题&#34 ;.我试着指出一些例子,希望能帮到你。

模板匹配运算符:将模板与图片上的滑动窗口进行比较,如果您的模板非常类似于您要查找的对象,则可以获得非常好的效果在图像中,无论它多么复杂。可以非常快,它基本上不是任何东西都是不变的,所以如果你打算进行旋转,照明或其他方面的重大变化,这可能对你不起作用。 here你可以找到一些代码。注意你使用的是哪个颜色空间,如果正确使用,不同的颜色空间可以获得非常不同的结果(例如,对于面部分析,在某些情况下HSV可能比RGB更好)

关键点匹配,如SIFT或SURF:我使用了很多非常好的结果。您需要决定要使用的描述符匹配器。 OpenCV有一些很好的例子,here你可以找到一个。不会成为匹配您的对象的最快方式,因为这些描述符可能需要一些时间来提取,如果您不了解您将要工作的条件,那将是很好的:只要能够在模板和图像上正确找到关键点,它通常对比例,旋转和闪电变化都很稳健。

形状匹配:当我参与的图像分类竞赛中,我能够使用简单的HOG描述符获取有关我图像的非常有辨别力的信息时,我感到非常惊讶。 Oriented Gradients的直方图是描述物体形状的相当强大的工具,它使用边缘方向和幅度来描述您的图像。它们可以快速计算(我认为OpenCV具有GPU实现),可配置(您可以决定网格的厚度和细胞数量,从而产生非常不同的信息)。 HOG对旋转不是 不变,从不同角度看到的对象可能会产生不同的直方图,但由于不使用颜色这一事实,它们对光照变化非常稳健。 HOG只是一个例子,有很多形状和轮廓描述符,但基本上它们提供的几乎和我想的一样。

直方图匹配:不是我的第一选择,如果您了解对象和图像的其余部分,它会很有用。例如,如果你知道你在丛林图像中寻找你的粉红色花朵,它是那里唯一的粉红色花朵,那么简单的颜色直方图匹配就可以了。拿起一个滑动窗口,在你的图像上运行它,比较你的直方图,你就可以了。非常快,非常简单,它根本不使用形状,所以无论你的物体有多复杂,你都能找到它。不使用形状使其对旋转稳健,但要注意照明变化。这种方法的一个非常大的局限性是,如果丛林中还有其他粉红色的东西,你就无法区分。

混合方法:在这里您可以充分利用上述技术。正如您所看到的,它们中的大多数在某个环境中运行良好,而在其他环境中运行良好。您可以结合使用您熟悉的技术,获得比零件总和更好的东西。我在HOG和头部姿势估计方面做了很多工作,当我们开始不是以密集的方式而是围绕某些关键点提取HOG时,我们取得了真正的突破。您需要了解您的问题,找出您需要的内容并采用一系列方法。一般来说,混合方法可以更好地工作,也可以慢得多。

希望这对你有所帮助,我不认为,鉴于你给我们的信息,我可以给你一个更好的答案..(可能是其他人可以,这就是为什么我&# 39;我还是学生:))