资源简介
基于特征点匹配的三维重建,OpenCV+OpenGL,具体实现参考博主博客
代码片段和文件信息
#include “header.h“
// sift is 50 times slower but get 7 times more matched points
// FAST detect more points than SURF
// STAR/MSER generate very few keypoints
#define DETECTOR_TYPE “FAST“ // FASTSIFTSURFSTARMSERGFTTHARRIS...see the create function
#define DEscriptOR_TYPE “SIFT“ // SURFSIFTBRIEF...BRIEF seemed to has bug
#define MATCHER_TYPE “Flannbased“ // BruteForceFlannbasedBruteForce-L1...
#define MAXM_FILTER_TH 20// threshold used in GetPair
#define HOMO_FILTER_TH 100 // threshold used in GetPair
#define NEAR_FILTER_TH 10// diff points should have distance more than NEAR_FILTER_TH
// choose the corresponding points in the stereo images for 3d reconstruction
void GetPair( Mat &imgL Mat &imgR vector &ptsL vector &ptsR )
{
Mat descriptorsL descriptorsR;
double tt = (double)getTickCount();
Ptr detector = FeatureDetector::create( DETECTOR_TYPE ); // factory mode
vector keypointsL keypointsR;
detector->detect( imgL keypointsL );
detector->detect( imgR keypointsR );
PtrriptorExtractor> de = DescriptorExtractor::create(DEscriptOR_TYPE);
//SurfDescriptorExtractor de(42true);
de->compute( imgL keypointsL descriptorsL );
de->compute( imgR keypointsR descriptorsR );
tt = ((double)getTickCount() - tt)/getTickFrequency(); // 620*555 pic about 2s for SURF 120s for SIFT
PtrriptorMatcher> matcher = DescriptorMatcher::create( MATCHER_TYPE );
vector> matches;
matcher->knnMatch( descriptorsL descriptorsR matches 2 ); // L:query R:train
vector passedMatches; // save for drawing
DMatch m1 m2;
vector ptsRtemp ptsLtemp;
for( size_t i = 0; i < matches.size(); i++ )
{
m1 = matches[i][0];
m2 = matches[i][1];
if (m1.distance < MAXM_FILTER_TH * m2.distance)
{
ptsRtemp.push_back(keypointsR[m1.trainIdx].pt);
ptsLtemp.push_back(keypointsL[i].pt);
passedMatches.push_back(m1);
}
}
Mat HLR;
HLR = findHomography( Mat(ptsLtemp) Mat(ptsRtemp) CV_RANSAC 3 );
cout<<“Homography:“< Mat ptsLt;
perspectiveTransform(Mat(ptsLtemp) ptsLt HLR);
vector matchesMask( passedMatches.size() 0 );
int cnt = 0;
for( size_t i1 = 0; i1 < ptsLtemp.size(); i1++ )
{
Point2f prjPtR = ptsLt.at((int)i10); // prjx = ptsLt.at((int)i10) prjy = ptsLt.at((int)i11);
// inlier
if( abs(ptsRtemp[i1].x - prjPtR.x) < HOMO_FILTER_TH &&
abs(ptsRtemp[i1].y - prjPtR.y) < 2) // restriction on y is more strict
{
vector::iterator iter = ptsL.begin();
for (;iter!=ptsL.end();iter++)
{
Point2f diff = *iter - ptsLtemp[i1];
float dist = abs(diff.x)+abs(diff.y);
if (dist < NEAR_FILTER_TH) break;
}
if (iter != ptsL.end()) continue;
ptsL.push_back(ptsLtemp[i1]);
ptsR.push_back(ptsRtemp[i1]);
cnt++;
if (cnt%1 == 0) matchesMask[i1] = 1; // don‘t want to
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-07-20 16:07 三维重建备份\
目录 0 2018-11-14 15:09 三维重建备份\Reconstuction3d\
目录 0 2018-07-20 16:07 三维重建备份\Reconstuction3d\.vs\
目录 0 2018-07-20 16:07 三维重建备份\Reconstuction3d\.vs\Reconstuction3d\
目录 0 2018-07-20 16:07 三维重建备份\Reconstuction3d\.vs\Reconstuction3d\v14\
文件 48128 2016-08-08 00:10 三维重建备份\Reconstuction3d\.vs\Reconstuction3d\v14\.suo
文件 3686454 2018-10-26 14:56 三维重建备份\Reconstuction3d\1.bmp
文件 3686454 2018-10-26 14:56 三维重建备份\Reconstuction3d\2.bmp
目录 0 2018-08-27 20:00 三维重建备份\Reconstuction3d\Debug\
文件 2209656 2018-06-26 08:48 三维重建备份\Reconstuction3d\Debug\Reconstuction3d.ilk
文件 4443136 2018-06-26 08:48 三维重建备份\Reconstuction3d\Debug\Reconstuction3d.pdb
文件 128635 2016-07-21 22:03 三维重建备份\Reconstuction3d\GLUT工具包.rar
目录 0 2018-11-14 14:49 三维重建备份\Reconstuction3d\Reconstuction3d\
文件 54853632 2018-11-14 15:09 三维重建备份\Reconstuction3d\Reconstuction3d.sdf
文件 1349 2018-06-25 21:41 三维重建备份\Reconstuction3d\Reconstuction3d.sln
文件 22528 2016-07-22 17:51 三维重建备份\Reconstuction3d\Reconstuction3d.suo
文件 52224 2018-11-14 15:09 三维重建备份\Reconstuction3d\Reconstuction3d.v12.suo
文件 3686454 2018-10-26 14:56 三维重建备份\Reconstuction3d\Reconstuction3d\1.bmp
文件 3686454 2018-10-26 14:56 三维重建备份\Reconstuction3d\Reconstuction3d\2.bmp
文件 9154 2018-11-14 14:49 三维重建备份\Reconstuction3d\Reconstuction3d\cvFuncs.cpp
文件 7068 2018-07-21 09:39 三维重建备份\Reconstuction3d\Reconstuction3d\cvFuncs2.cpp
文件 1516 2011-06-01 21:09 三维重建备份\Reconstuction3d\Reconstuction3d\cvFuncs3.cpp
文件 7086 2018-06-28 10:57 三维重建备份\Reconstuction3d\Reconstuction3d\glFuncs.cpp
文件 21440 1998-08-18 16:24 三维重建备份\Reconstuction3d\Reconstuction3d\glut.h
文件 220160 2004-10-23 11:25 三维重建备份\Reconstuction3d\Reconstuction3d\glut32.dll
文件 81680 2004-10-23 11:25 三维重建备份\Reconstuction3d\Reconstuction3d\glut32.lib
文件 2691 2016-07-21 22:05 三维重建备份\Reconstuction3d\Reconstuction3d\header.h
文件 5938 2014-11-26 20:59 三维重建备份\Reconstuction3d\Reconstuction3d\main.cpp
文件 1609 2014-11-26 21:09 三维重建备份\Reconstuction3d\Reconstuction3d\ReadMe.txt
文件 6469 2018-11-14 14:39 三维重建备份\Reconstuction3d\Reconstuction3d\Reconstuction3d.cpp
文件 10517 2018-06-26 08:53 三维重建备份\Reconstuction3d\Reconstuction3d\Reconstuction3d.vcxproj
............此处省略33个文件信息
相关资源
- 基于相移法的三维重建
- CMP-MVS开源代码
- SFMtoolKit3工程
- VisualSFM代码
- 三维重建经典论文集
- 三维重建源代码
- 点云三维重建
- Multi-View Stereo.pdf
- VisualSFM+MeshLab三维重建
- 用于三维重建方面的三维点云文件
- sfm三维重建.rar
- SfM三维重建:BA优化
- 有关于三维重建的英文文献,在CVPR
- J3D多目三维重建系统V1.9
- 基于窗口的稀疏点匹配及三维重建
- PCL点云库MovingLeastSquares用法demo
- 三维重建移动立方体法(Marching Cube
- 基于HALCON的双目立体视觉系统实现.
- CT图像三维重建().doc
- 基于改进的光线投射算法的三维重建
- 基于双目视觉的深度计算和三维重建
- VTK三维立体显示代码.doc
- 知名的斯坦福兔子的三维点云数据,
- 基于opencv的三维重建程序
- 建模题目---血管的三维重建
- 三维重建算法原理的书籍
- 多基线立体匹配技术的三维重建
- 双目视觉特征点匹配三维重建
- 三维重建的原理以及算法
- 三维影像重建软件
评论
共有 条评论