图像特征点描述与匹配技术详解
1. 特征匹配基础
在图像特征匹配中,识别出的匹配结果会存储在 cv::DMatch
实例的向量中。 cv::DMatch
数据结构包含两个索引,分别指向两组关键点向量中的元素,同时还包含一个实数值,表示两个匹配描述符之间的距离。这个距离值在比较两个 cv::DMatch
实例时用于定义 <
运算符。
为了让匹配结果更易读,在绘制匹配结果时,我们通常会限制显示的匹配线条数量。例如,只显示距离最小的 25 个匹配。这可以通过 std::nth_element
函数实现,该函数会将第 N 个元素放置在第 N 个位置,并将所有较小的元素放在该元素之前,之后再清除向量中剩余的元素。
2. 模板匹配
模板匹配是图像分析中的常见任务,用于检测图像中特定模式或对象的出现。具体做法是定义一个小的对象图像作为模板,然后在给定图像中搜索相似的出现位置。通常,搜索会限制在一个感兴趣的区域内。
cv::matchTemplate
函数是实现这一任务的核心。它会将模板在搜索区域上滑动,并在每个像素位置计算相似度。该函数的输入是一个小尺寸的模板图像和一个待搜索的图像,输出是一个 cv::Mat
类型的浮点值矩阵,表示每个像素位置的相似度得分。如果模板大小为 MxN,图像大小为 WxH,那么结果矩阵的大小将为 (W - M + 1)x(H - N + 1)。
以下是一个典型的模板匹配代码示例: