关于EMGU CV的那些事——3.不同角点检测算法比较

最近几个月一直忙着研究,现在将这几个月的学习过程一一分享出来~

博主之前用C#和EmguCV测试了不同的角点检测算法并比较了他们的性能和用时。Harris不具备尺度不变性,Fast是harris的简化版,速度快但是没有旋转不变性和尺度不变性。Sift依旧好用但是速度慢,Surf简化了Sift的一些步骤提高了速度但依旧不能达到实时效果(30FPS)。Orb使用改进的fast检测子和brief描述子,保证性能的同时大大提高了速度。最终我们选用Orb算法。(算法的具体原理,博主在这里学到了很多知识,感谢Ronny)

这里提供三个个程序,EMGU_STUDY_1.0 ,EMGU_STUDY_2.0,ORB_FEATURE_MATCHING。

在第一个程序中,我们手动选择图像,使用上述5中算法分别检测角点画在图像上并显示用时。关于EMGU CV的那些事——3.不同角点检测算法比较_第1张图片

关于EMGU CV的那些事——3.不同角点检测算法比较_第2张图片

第二个程序中,我们从摄像头中读取图像,使用Fast,Orb算法实时检测角点画在图像上,结束时显示用时(需先点击界面右上角打开摄像头)。


第三个程序中,我们使用ORB算法(参数可在界面上设置:minRatio是指利用knnmatch函数找到的最佳两个匹配候补点的汉明距离之比,maxDistance是指匹配点对中匹配点的欧几里德距离)检测两幅图像中的角点,使用BF匹配算法查找最佳的匹配点对,然后将匹配点对画在图像上。


从下一节开始我将使用C++和OpenCV继续我的学习,毕竟OpenCV的学习资料比EmguCV多了很多,我也不用花很多时间在查看EmguCV的API文档上。暂时不会使用到Unity了而且从下节开始我将记录如何实现另类版本的PTAM。

你可能感兴趣的:(EMGU,CV)