资源简介
这是基于opencv编写的三维重建代码,是初学opencv和三维重建的优秀参考资料

代码片段和文件信息
#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 “SURF“ // SURFSIFTBRIEF...BRIEF seemed to has bug
#define MATCHER_TYPE “Flannbased“ // BruteForceFlannbasedBruteForce-L1...
#define MAXM_FILTER_TH .8 // threshold used in GetPair
#define HOMO_FILTER_TH 60 // threshold used in GetPair
#define NEAR_FILTER_TH 40 // 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 draw to many matches
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-07-02 22:50 rec3D\
目录 0 2011-07-02 22:51 rec3D\method2\
文件 19937 2011-06-01 10:14 rec3D\method2\ScreenShot029.jpg
文件 28493 2011-06-01 10:15 rec3D\method2\ScreenShot032.jpg
文件 18411 2011-06-01 10:16 rec3D\method2\ScreenShot033.jpg
文件 44183 2011-06-01 10:18 rec3D\method2\ScreenShot035.jpg
文件 56406 2011-06-01 10:19 rec3D\method2\ScreenShot037.jpg
文件 57780 2011-06-01 13:10 rec3D\method2\ScreenShot042.jpg
文件 64871 2011-06-01 13:10 rec3D\method2\ScreenShot043.jpg
文件 129125 2011-06-01 21:44 rec3D\method2\ScreenShot053.jpg
文件 45313 2011-06-01 21:47 rec3D\method2\ScreenShot054.jpg
文件 44387 2011-06-01 21:49 rec3D\method2\ScreenShot055.jpg
文件 55437 2011-06-01 21:49 rec3D\method2\ScreenShot056.jpg
目录 0 2011-07-02 22:52 rec3D\rec3D\
文件 881 2011-05-22 09:55 rec3D\rec3D.sln
文件 152576 2011-07-02 22:45 rec3D\rec3D.suo
文件 8899 2011-07-02 22:42 rec3D\rec3D\cvFuncs.cpp
文件 6539 2011-07-02 22:42 rec3D\rec3D\cvFuncs2.cpp
文件 1516 2011-06-01 21:09 rec3D\rec3D\cvFuncs3.cpp
文件 17774 2011-07-02 22:44 rec3D\rec3D\disp.jpg
文件 7015 2011-07-02 22:40 rec3D\rec3D\glFuncs.cpp
文件 27780 2004-10-23 11:23 rec3D\rec3D\glut.h
文件 220160 2004-10-23 11:25 rec3D\rec3D\glut32.dll
文件 81680 2004-10-23 11:25 rec3D\rec3D\glut32.lib
文件 2631 2011-06-01 21:58 rec3D\rec3D\header.h
文件 4769 2011-06-01 21:46 rec3D\rec3D\main-algo3bkup.cpp
文件 5237 2011-07-02 22:43 rec3D\rec3D\main.cpp
文件 47104 2011-07-02 22:44 rec3D\rec3D\rec3D.exe
文件 4162 2011-06-01 21:58 rec3D\rec3D\rec3D.vcproj
文件 1413 2011-07-02 22:45 rec3D\rec3D\rec3D.vcproj.YanKe-PC.YanKe.user
文件 67588 2011-05-25 17:28 rec3D\ScreenShot013.jpg
............此处省略7个文件信息
相关资源
- 三维重建(旋转)由已知对应图像点
- 基于图像三维重建软件visualSFM
- 基于Kinect的三维重建
- 图像配准和三维重建应用程序
- Imaris三维重建软件手册
- 基于双目立体视觉的三维重建
- 基于视频的三维重建研究
- 中科院自动化所三维重建PPT(完整版
- KinectFusion 和 ElasticFusion 三维重建方法
- 基于双目视觉的图像三维重建
- 知名的斯坦福兔子的三维点云数据,
- 斯坦福兔子 ply和pcd格式模型
- Marching cubes算法实现对切片集的三维重
- 2001年A题血管三维重建
- 简单的三维重建系统
- 基于点云数据的三维重建
- 相机标定完整工程
- 泊松重建的工程源代码亲测可运行
- 计算机视觉摄像机定标,点的投影和
- SFM三维重建技术
- 点云数据-三维重建
- 基于单目视觉的三维重建_张涛.caj
- CT三维重建代码分析,内包含图,可直
- 医学三维重建ppt演示
- 医学超声图像三维重建
- ADCensus.zip
- VisualSFM_CMVS-PMVS_MeshLab
- DICOM Viewer,三维重建后可导出DICOM格式
- 论文研究-基于视觉的三维重建技术综
- 视差图转换物方点云DSM
评论
共有 条评论