这段代码主要做了以下几件事情:
- 读取两幅图像
- 使用FAST方法找出图像中的特征点
- 手写ORB方法计算特征点的描述子
- 使用汉明距离(Hamming distance)进行描述子的匹配
- 显示匹配的结果
下面我们会逐行解释每一句代码:
-
包含头文件:这一部分包含了所有需要的库。
-
ComputeORB 函数:该函数接受输入图像、FAST检测器找到的特征点,然后计算每个特征点的ORB描述子。ORB描述子是一种快速的特征描述子,由于它的二值性质,可以使用Hamming距离进行匹配。
-
BfMatch 函数:这个函数接收两组描述子,然后进行暴力匹配(Brute-force matching),找到最佳匹配的描述子。
-
main 函数:该函数首先读取两幅图像,并将它们缩小到原始大小的一半。然后使用FAST方法在每幅图像上找出特征点,并显示它们。
在找到特征点后,代码计算每个特征点的ORB描述子。然后,使用BfMatch函数找到匹配的描述子。最后,使用cv::drawMatches函数显示匹配的结果。
-
ComputeORB 函数:该函数首先检查特征点是否在图像边界以内。如果特征点在图像边界之外,则不计算描述子。然后,计算每个特征点的m01和m10值,这两个值与特征点的方向有关。之后,使用旋转矩阵旋转每个特征点,保证特征的旋转不变性。