OpenCV实战(18)——特征匹配
0. 前言
在关键点检测一节中,我们学习了如何检测图像中的关键点,其目的是用于执行局部图像分析。这些关键点需要足够独特,以便在具有相同对象的不同图像中能够检测到相同的点。
基于关键点执行图像分析需要构建丰富的表示来唯一地描述这些关键点,本节将重点介绍如何从关键点中提取描述符,描述符通常是描述关键点及其邻域的二进制、整数或浮点数的一维或二维向量。一个好的描述符应该足够独特,以便唯一地表示图像中的每个关键点;同时其应该具有足够的鲁棒性,以应对可能的光照或视点变化,能够以相似的方式表示相同的点。并且描述符的结构也应该是紧凑的,以便进行操作。
关键点最常见的用途之一是图像匹配,例如,执行图像匹配用于关联同一场景中的两张不同图像或检测图像中的目标对象。在本节中,我们将学习基本的匹配算法。
1. 特征匹配算法
特征点匹配操作可以将一个图像中的点与另一个图像(或图像集)中的点进行对应,当图像点对应于现实世界中相同场景元素(或对象点)时,表示图像点相互匹配。
仅仅单个像素并不足以决定两个关键点的相似性,因此必须在匹配过程中考虑每个关键点周围的图像块。如果两个图像块对应于相同的场景元素,那么它们的像素将具有相似的值。最简单的特征点匹配方法是像素块的直接逐像素比较,虽然在某些情况下,它可以取得良好的结果,但这并不是最可靠的方法。
大多数情况下,图像块定义为以关键点位置为中心的正方形(边长为奇数),可以通过比较图像块内相应的像素强度值来测量两个正方形图像块之间的相似性,一种流行的解决方案是使用平方差和 (