一、SIFT算法
- SURF算法是SIFT算法的加速版, 而SIFT(尺度不变特征转换, ScaleInvariant Feature Transform) 是另一种著名的尺度不变特征检测法。
我们知道,SURF相对于SIFT而言,特征点检测的速度有着极大的提升,所以在一些实时视频流物体匹配上有着很强的应用。
而SIFT因为其巨大的特征计算量而使得特征点提取的过程异常花费时间,所以在一些注重速度的场合难有应用场景。
- 但是SIFT相对于SURF的优点就是,由于SIFT基于浮点内核计算特征点,因此通常认为, SIFT算法检测的特征在空间和尺度上定位更加精确,所以在要求匹配极度精准且不考虑匹配速度的场合可以考虑使用SIFT算法。
二、程序
private void button4_Click(object sender, EventArgs e)
{
// 创建检测器
int minHessian = 400;
var MySift = OpenCvSharp.XFeatures2D.SIFT.Create(minHessian);
Mat descriptors1 = new Mat();
Mat descriptors2 = new Mat();
// 计算描述符(特征向量)
KeyPoint[] keyPoint1, keyPoint2;
MySift.DetectAndCompute(srcImage1, null, out keyPoint1, descriptors1);
MySift.DetectAndCompute(srcImage2, null, out keyPoint2, descriptors2);
// 使用BruteForce进行匹配
// 创建特征点匹配器
BFMatcher matcher = new BFMatcher();
// 匹配两幅图中的描述子(descriptors)
DMatch[] matches = matcher.Match(descriptors1, descriptors2);
//【6】绘制从两个图像中匹配出的关键点
Mat imgMatches = new Mat();
Cv2.DrawMatches(srcImage1, keyPoint1, srcImage2, keyPoint2, matches, imgMatches);//进行绘制
// 显示最终的匹配图像
Cv2.ImShow("SIFT匹配", imgMatches);
}
三、结果
四、资料
亦陈不染的博客:
https://blog.csdn.net/m0_55074196/article/details/134181416
网友评论