SIFT特征提取 应用篇

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

SIFT特征具有缩放、旋转特征不变性,下载了大牛的matlab版SIFT特征提取代码,解释如下:

1.调用方法:

将文件加入matlab目录后,在主程序中有两种操作:

op1:寻找图像中的Sift特征:

[image, descrips, locs] = sift('scene.pgm'); showkeys(image, locs);

op2:对两幅图中的SIFT特征进行匹配:

match('scene.pgm','book.pgm');


由于scene和book两图中有相同的一本书,但orientation和size都不同,可以发现所得结果中Sift特征检测结果非常好。


2.代码下载地址:

http://www.cs.ubc.ca/~lowe/keypoints/
3.想用自己的图片进行调用:
 
 
i1=imread('D:\Images\New\Cars\image_0001.jpg');i2=imread('D:\Images\New\Cars\image_0076.jpg');i11=rgb2gray(i1);i22=rgb2gray(i2);imwrite(i11,'v1.jpg','quality',80);imwrite(i22,'v2.jpg','quality',80);match('v1.jpg','v2.jpg');
experiment results:
 
 
scene

book

compare_result

compare result

EXP2:

未找到匹配特征的两幅图



C代码:

// FeatureDetector.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "highgui.h"#include "cv.h"#include "vector"#include "opencv\cxcore.hpp"#include "iostream"#include "opencv.hpp"#include "nonfree.hpp"#include "showhelper.h"using namespace cv;using namespace std;int _tmain(int argc, _TCHAR* argv[]){ //Load Image  Mat c_src1 =  imread( "..\\Images\\3.jpg"); Mat c_src2 = imread("..\\Images\\4.jpg"); Mat src1 = imread( "..\\Images\\3.jpg", CV_LOAD_IMAGE_GRAYSCALE); Mat src2 = imread( "..\\Images\\4.jpg", CV_LOAD_IMAGE_GRAYSCALE); if( !src1.data || !src2.data ) { std::cout<< " --(!) Error reading images " << std::endl; return -1; } //sift feature detect SiftFeatureDetector detector; std::vector<KeyPoint> kp1, kp2; detector.detect( src1, kp1 ); detector.detect( src2, kp2 ); SiftDescriptorExtractor extractor; Mat des1,des2;//descriptor extractor.compute(src1,kp1,des1); extractor.compute(src2,kp2,des2);  Mat res1,res2;  int drawmode = DrawMatchesFlags::DRAW_RICH_KEYPOINTS; drawKeypoints(c_src1,kp1,res1,Scalar::all(-1),drawmode);//在内存中画出特征点 drawKeypoints(c_src2,kp2,res2,Scalar::all(-1),drawmode); cout<<"size of description of Img1: "<<kp1.size()<<endlcout<<"size of description of Img2: "<<kp2.size()<<endlBFMatcher matcher(NORM_L2)vector<DMatch> matches; matcher.match(des1,des2,matches); Mat img_match; drawMatches(src1,kp1,src2,kp2,matches,img_match);//,Scalar::all(-1),Scalar::all(-1),vector<char>(),drawmode); cout<<"number of matched points: "<<matches.size()<<endl; imshow("matches",img_match); cvWaitKey(); cvDestroyAllWindows(); return 0;}


Python代码:

http://blog.csdn.net/abcjennifer/article/details/7639681



关于sift的其他讲解:

http://blog.csdn.net/abcjennifer/article/details/7639681

http://blog.csdn.net/abcjennifer/article/details/7372880

http://blog.csdn.net/abcjennifer/article/details/7365882



关于computer vision的更多讨论与交流,敬请关注本博客和新浪微博Sophia_qing




           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值