我正在研究特征检测器算法。我研究了我拥有的选项:SIFT、SURF、BRISK、FREAK 等。就基础数学而言,所有这些选项似乎都相当复杂。相反,我想一次迈出一步,因此我正在寻找一种不需要像 SURF 一样好的简单方法。您会推荐学习和实施哪种算法?
4 回答
首先要记住的是检测器和描述符之间的区别。检测器是一种用于检测图像中兴趣点的算法,这些兴趣点通常是斑点状结构的角或中心。然后,如果您需要在图像中匹配这些点,您可以计算描述符,这是表示兴趣点周围补丁的某种值向量。
这应该有助于消除一些混乱。例如,“跟踪的好特征”,又名最小特征角检测器,是一个兴趣点检测器。FREAK 是一个特征描述符。SIFT、SURF 和 BRISK 包括检测器和描述符。但是,一般来说,您可以混合和匹配检测器和描述符。
所以对于初学者来说,你应该看看像 GFTT 和 Harris 这样的角点检测器,以及拉普拉斯 blob 检测器。大多数最近的兴趣点检测器是检测角点或斑点的更快方法。
对于描述符,从 SIFT 开始。这可能看起来有点吓人,但这是第一个起作用的描述符,它是所有其他描述符的灵感和基准。
If you are trying to start simple, then perhaps the simplest feature descriptor is to take a NxN square around the detected feature and concat all the pixel values. This doesn't work well in practice because it is very sensitive to small changes in lighting, rotation, scale, etc -- but you can test your implementation with two translated versions of an image.
The simplest feature descriptor that "actually works" seems to be the BRIEF descriptor (http://cvlabwww.epfl.ch/~lepetit/papers/calonder_eccv10.pdf), which randomly compares pairs of nearby pixel values to build up a binary descriptor. Note that it isn't scale- or rotation-invariant however: for that you need one of the many extensions such as AKAZE, BRISK, FREAK, or ORB.
在我看来,SIFT。请参阅 vlfeat.org 了解他们开发的可免费使用的代码,并且他们有几个教程可以轻松实现。
我认为您可以尝试 GFTT:基于 shi-tomasi 定义和方程的 tracj 的良好功能。它很旧,我认为也很容易阅读。