我刚刚研究了 SURF,我正在研究它的实现,但我仍然不明白为什么我们使用描述符。
我了解什么是关键点及其目的,但是当我们提取关键点时,为什么我们需要使用描述符?它们在认可中的重要性和作用是什么?
我刚刚研究了 SURF,我正在研究它的实现,但我仍然不明白为什么我们使用描述符。
我了解什么是关键点及其目的,但是当我们提取关键点时,为什么我们需要使用描述符?它们在认可中的重要性和作用是什么?
要理解的一件重要的事情是,在提取关键点之后,您只能获得有关它们的位置的信息,有时还会获得它们在图像中的覆盖区域(通常近似为圆形或椭圆形)。虽然关于关键点位置的信息有时可能很有用,但它并不能说明关键点本身。
根据用于提取关键点的算法(SIFT、Harris 角点、MSER),您将了解提取的关键点的一些一般特征(例如,它们以斑点、边缘、突出角为中心...),但您不会知道有何不同或类似的一个关键点是另一个。
这是两个简单的例子,只有位置和关键点区域对我们没有帮助:
如果您有一张图像 A(白色背景上的熊)和另一张图像 B,A 的精确副本但翻译了几个像素:提取的关键点将是相同的(在该熊的同一部分)。这两个图像应该被识别为相同或相似。
但是,如果我们拥有的唯一信息是他们的位置,并且由于翻译而改变,那么您无法比较图像。
如果您有一个图像 A(假设这次是鸭子)和另一个图像 B,与 A 中的鸭子完全相同,但大小是其两倍:提取的关键点将是相同的(鸭子的相同部分)。这些也是相同(相似)的图像。
但是它们所有的大小(区域)都会不同:图像 B 中的所有关键点的大小都是图像 A 中的关键点的两倍。
所以,描述符来了:它们是比较关键点的方法。他们以向量格式(恒定长度)总结了关键点的一些特征。例如,可能是它们在最明显方向上的强度。它为关键点所指的图像区域分配数字描述。
描述符的一些重要内容是:
它们应该独立于关键点位置
如果在不同位置提取相同的关键点(例如由于平移),则描述符应该相同。
它们应该对图像转换具有鲁棒性
一些例子是对比度的变化(例如在晴天和阴天的同一地点的图像)和视角的变化(从右中和左中的建筑物的图像,我们仍然希望将其识别为同一建筑物) .
当然,没有一个描述符对所有的变换都是完全健壮的(如果它很强大,也不能对任何一个单独的变换,例如视角的大变化)。
不同的描述符被设计为对不同的变换具有鲁棒性,这有时与计算它们所需的速度相反。
它们应该是独立于规模的
描述符应考虑比例。如果一个关键点的“突出”部分是一条10px的垂直线(半径为8px的圆形区域内),另一个关键点的突出部分是一条5px的垂直线(半径为4px的圆形区域内)--应该为这些关键点分配类似的描述符。
现在,您计算了所有关键点的描述符,您可以比较这些关键点。一个简单的图像匹配示例(当您知道图像属于同一对象,并且想要识别不同图像中描绘场景相同部分的部分,或者想要识别两个图像之间的透视变化时) ,您会将一个图像的每个关键点描述符与另一个图像的每个关键点描述符进行比较。由于描述符是数字向量,您可以将它们与欧几里得距离这样简单的东西进行比较。当然,还有一些更复杂的距离可以用作相似度度量。但是,最后,你会说描述符之间距离最小的关键点是匹配的,例如不同图像中的相同“位置”或“对象部分”。
对于关键点/描述符的更复杂使用,您应该看看这个问题——尤其是我的答案中的“低级本地方法”和@Maurits答案中的“词袋”方法。此外,这些答案中提供的链接很有用。
让我们想一个理想的描述符来理解这个想法。理想的描述符是从像素空间到其他空间的函数,这样相同的对象具有相同的结果,而不同的对象具有不同的结果。
例如,如果您使用相同的对象但使用不同的曝光水平拍摄两张图像,您将获得图像的倍增版本。一个描述符将获取像素并通过它们的均值和标准偏差水平对其进行归一化,这将具有相同的结果,即这两个对象是相同的。这很好,因为它允许我们正确匹配
因此,您的描述符需要正确匹配相同的对象。