图像匹配能够应用的场合非常多,如目标跟踪,检测,识别,图像拼接等,而角点匹配最核心的技术就要属角点匹配了,所谓角点匹配是指寻找两幅图像之间的特征像素点的对应关系,从而确定两幅图像的位置关系。
角点匹配可以分为以下四个步骤:
1、提取检测子:在两张待匹配的图像中寻找那些最容易识别的像素点(角点),比如纹理丰富的物体边缘点等。
2、提取描述子:对于检测出的角点,用一些数学上的特征对其进行描述,如梯度直方图,局部随机二值特征等。检测子和描述子的常用提取方法有:sift,harris,surf,fast,agast,brisk,freak,brisk,brief/orb等。
3、匹配:通过各个角点的描述子来判断它们在两张图像中的对应关系,常用方法如 flann等。
4、消噪:去除错误匹配的外点,保留正确的匹配点。常用方法有KDTREE,BBF,Ransac,GTM等。
二、SIFT匹配方法的提出
为了排除因为图像遮挡和背景混乱而产生的无匹配关系的关键点,SIFT的作者Lowe提出了比较最近邻距离与次近邻距离的SIFT匹配方式:取一幅图像中的一个SIFT关键点,并找出其与另一幅图像中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离得到的比率ratio少于某个阈值T,则接受这一对匹配点。因为对于错误匹配,由于特征空间的高维性,相似的距离可能有大量其他的错误匹配,从而它的ratio值比较高。显然降低这个比例阈值T,SIFT匹配点数目会减少,但更加稳定,反之亦然。
Lowe推荐ratio的阈值为08,但作者对大量任意存在尺度、旋转和亮度变化的两幅进行匹配,结果表明ratio取值在0 4~0 6 之间最佳,小于0 4的很少有匹配点,大于0 6的则存在大量错误匹配点,所以建议ratio的取值原则如下:
ratio=0 4:对于准确度要求高的匹配;
ratio=0 6:对于匹配点数目要求比较多的匹配;
ratio=0 5:一般情况下。
三、常见的SIFT匹配代码
1、vlfeat中sift toolbox中的vl_ubcmatchc使用的是普通的欧氏距离进行匹配(该SIFT代码贡献自Andrea
Vedaldi)。
2、Lowe的C++代码中使用的是欧氏距离,但是在matlab代码中为了加速计算,使用的是向量夹角来近似欧氏距离:先将128维SIFT特征向量归一化为单位向量(每个数除以平方和的平方根),然后点乘来得到向量夹角的余弦值,最后利用反余弦(acos函数)求取向量夹角。实验证明Lowe的办法正确率和耗时都很不错。
同样,也可以采用knnsearch函数求最近点和次近点:knnsearch采用euclidean距离时得到的结果与lowe采用的近似方法结果几乎一致,正好印证了模拟欧氏距离的效果。
3、Rob Hess的OpenSIFT采用了KDTREE来对匹配进行优化。
4、CSDN大神v_JULY_v实现了KDTREE+BBF对SIFT匹配的优化和消除错误匹配:从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
- 结构之法 算法之道 - 博客频道 - CSDNNET。
5、OpenCV中features2d实现的SIFT匹配有多种matcher:VectorDescriptorMatcher,BFMatcher(Brute-force descriptor matcher),FernDescriptorMatcher,OneWayDescriptorMatcher,FlannBasedMatcher 等等。目前只知道采用knnsearch,提供了多种距离度量方式,具体区别不懂。
我也用这个,好像是如果要把c的代码编译成mexw32的可执行程序,就需要在c代码中有_mexFunction这个函数。
在mexutilc里面是一系列的工具函数,这个文件里面没有mexFunction函数。其他的可编译的文件,如imsmoothc里面就有这个函数。而其他好多文件的编译都需要用到这个mexutilc,所以没办法用。
我试了一下把mexutilc文件里面的东西拷到那些需要用到mexutilc的文件里面,并且改了一下,再mex它们,就成功了。但是整个程序运行起来还是有点问题,不知道是不是因为有改动的原因。MATLAB可以通过使用EEGLAB工具箱读取和处理CAP文件数据。首先,确保正确安装了EEGLAB工具箱。然后,可以使用EEGLAB函数导入CAP文件并将其转换为EEG数据结构。导入CAP文件的步骤如下:1 打开EEGLAB工具箱,点击“File”-> “Import Data”-> “From Biosemi cap File…”。2 选择要导入的CAP文件,并选择EEG信道配置以匹配导入数据。3 在“Channel location file”中选择相应的位置文件,以便定位电极位置。4 完成导入后,数据将自动转换为EEG数据结构,并可以使用EEGLAB工具箱中的各种可视化和分析功能进行处理。需要注意的是,由于CAP文件具有与其他EEG文件类型不同的特殊格式,因此需要使用EEGLAB工具箱以正确的方式读取和处理CAP文件。在使用MATLAB处理EEG数据时,可以使用许多其他工具和库,如FieldTrip和SIFT。这些工具和库对MATLAB的EEG处理能力进行了增强,并提供了许多附加功能和分析选项。你本科毕业还是研究生,要是本科找个代码实现以下就可以了,要是研究生好歹得自己改进一下吧。写论文没人关系你程序怎么编的,算法要描述清楚,Lowe的两篇论文必须看啊,然后遥感学报上有篇李晓明的也可以看看,其他 的就随便选点吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)