资源简介

本原码是用C语言实现的SIFT算法,可以提取SIFT特征和利用SIFT特征进行图像拼接和全景图构造,只需进行一些简单的OPENCV配置,就可以顺利运行。

资源截图

代码片段和文件信息

// SIFT.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include“kdtree.h“
#include“minpq.h“
#include“utils.h“
#include“imgfeatures.h“
#include“xform.h“
#include“sift.h“
#include
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include


using namespace std;
//在k-d树上进行BBF搜索的最大次数
/* the maximum number of keypoint NN candidates to check during BBF search */
#define KDTREE_BBF_MAX_NN_CHKS 200

//目标点与最近邻和次近邻的距离的比值的阈值,若大于此阈值,则剔除此匹配点对
//通常此值取0.6,值越小找到的匹配点对越精确,但匹配数目越少
/* threshold on squared ratio of distances between NN and 2nd NN */
#define NN_SQ_DIST_RATIO_THR 0.49
//窗口名字符串
#define IMG1 “图1“
#define IMG2 “图2“
#define IMG1_FEAT “图1特征点“
#define IMG2_FEAT “图2特征点“
#define IMG_MATCH1 “距离比值筛选后的匹配结果“
#define IMG_MATCH2 “RANSAC筛选后的匹配结果“
#define IMG_MOSAIC_TEMP “临时拼接图像“
#define IMG_MOSAIC_SIMPLE “简易拼接图“
#define IMG_MOSAIC_BEFORE_FUSION “重叠区域融合前“
#define IMG_MOSAIC_PROC “处理后的拼接图“

int open_image_number;//打开图片个数
IplImage *img1 *img2;//IplImage格式的原图
IplImage *img1_Feat *img2_Feat;//画上特征点之后的图

bool verticalStackFlag;//显示匹配结果的合成图像中,两张图是纵向排列的标志
IplImage *stacked;//显示匹配结果的合成图像,显示经距离比值法筛选后的匹配结果
IplImage *stacked_ransac;//显示匹配结果的合成图像,显示经RANSAC算法筛选后的匹配结果

struct feature *feat1 *feat2;//feat1:图1的特征点数组,feat2:图2的特征点数组
int n1 n2;//n1:图1中的特征点个数,n2:图2中的特征点个数
struct feature *feat;//每个特征点
struct kd_node *kd_root;//k-d树的树根
struct feature **nbrs;//当前特征点的最近邻点数组

CvMat * H;//RANSAC算法求出的变换矩阵
struct feature **inliers;//精RANSAC筛选后的内点数组
int n_inliers;//经RANSAC算法筛选后的内点个数即feat2中具有符合要求的特征点的个数

IplImage *xformed;//临时拼接图,即只将图2变换后的图
IplImage *xformed_simple;//简易拼接图
IplImage *xformed_proc;//处理后的拼接图

   //    int img1LeftBound;//图1中匹配点外接矩形的左边界
   //    int img1RightBound;//图1中匹配点外接矩形的右边界
   //    int img2LeftBound;//图2中匹配点外接矩形的左边界
   //    int img2RightBound;//图2中匹配点外接矩形的右边界

   //图2的四个角经矩阵H变换后的坐标
CvPoint leftTop leftBottom rightTop rightBottom;



void CalcFourCorner() {
//计算图2的四个角经矩阵H变换后的坐标
double v2[] = { 001 };//左上角
double v1[3];//变换后的坐标值
CvMat V2 = cvMat(3 1 CV_64FC1 v2);
CvMat V1 = cvMat(3 1 CV_64FC1 v1);
cvGEMM(H &V2 1 0 1 &V1);//矩阵乘法
leftTop.x = cvRound(v1[0] / v1[2]);
leftTop.y = cvRound(v1[1] / v1[2]);
//cvCircle(xformedleftTop7CV_RGB(25500)2);

//将v2中数据设为左下角坐标
v2[0] = 0;
v2[1] = img2->height;
V2 = cvMat(3 1 CV_64FC1 v2);
V1 = cvMat(3 1 CV_64FC1 v1);
cvGEMM(H &V2 1 0 1 &V1);
leftBottom.x = cvRound(v1[0] / v1[2]);
leftBottom.y = cvRound(v1[1] / v1[2]);
//cvCircle(xformedleftBottom7CV_RGB(25500)2);

//将v2中数据设为右上角坐标
v2[0] = img2->width;
v2[1] = 0;
V2 = cvMat(3 1 CV_64FC1 v2);
V1 = cvMat(3 1 CV_64FC1 v1);
cvGEMM(H &V2 1 0 1 &V1);
rightTop.x = cvRound(v1[0] / v1[2]);
rightTop.y = cvRound(v1[1] / v1[2]);
//cvC

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     35328  2015-12-31 13:48  SIFT\.vs\SIFT\v14\.suo

     文件     159744  2015-12-08 23:27  SIFT\Debug\SIFT.exe

     文件     710992  2015-12-08 23:27  SIFT\Debug\SIFT.ilk

     文件    2158592  2015-12-08 23:27  SIFT\Debug\SIFT.pdb

     文件    3342336  2015-12-08 23:27  SIFT\ipch\SIFT-3a32c33c\SIFT-39e111a2.ipch

     文件    3342336  2015-12-08 23:19  SIFT\ipch\SIFT-3a32c33c\SIFT-bb67ab9c.ipch

     文件      49152  2015-12-30 20:32  SIFT\Release\SIFT.exe

     文件     537539  2015-12-30 20:32  SIFT\Release\SIFT.iobj

     文件     132464  2015-12-30 20:32  SIFT\Release\SIFT.ipdb

     文件    1781760  2015-12-30 20:32  SIFT\Release\SIFT.pdb

     文件       4685  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.log

     文件     572254  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.obj

     文件    3407872  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.pch

     文件       1810  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\CL.command.1.tlog

     文件      18744  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\CL.read.1.tlog

     文件       1402  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\CL.write.1.tlog

     文件       2432  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\link.command.1.tlog

     文件       5160  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\link.read.1.tlog

     文件        756  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\link.write.1.tlog

     文件        190  2015-12-08 23:27  SIFT\SIFT\Debug\SIFT.tlog\SIFT.lastbuildstate

     文件      11967  2015-12-08 23:27  SIFT\SIFT\Debug\stdafx.obj

     文件     732160  2015-12-08 23:27  SIFT\SIFT\Debug\vc140.idb

     文件    1544192  2015-12-08 23:27  SIFT\SIFT\Debug\vc140.pdb

     文件      30625  2012-07-26 14:48  SIFT\SIFT\IMG1.png

     文件      19484  2012-07-26 14:48  SIFT\SIFT\IMG2.png

     文件      20269  2015-12-10 09:32  SIFT\SIFT\imgfeatures.h

     文件      22965  2015-12-08 22:05  SIFT\SIFT\kdtree.h

     文件       5839  2015-12-08 22:05  SIFT\SIFT\minpq.h

     文件       1489  2015-12-08 15:19  SIFT\SIFT\ReadMe.txt

     文件       1135  2015-12-08 21:04  SIFT\SIFT\Release\SIFT.Build.CppClean.log

............此处省略42个文件信息

评论

共有 条评论