资源简介
这是基于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个文件信息
相关资源
- 计算机视觉摄像机定标,点的投影和
- SFM三维重建技术
- 点云数据-三维重建
- 基于单目视觉的三维重建_张涛.caj
- CT三维重建代码分析,内包含图,可直
- 医学三维重建ppt演示
- 医学超声图像三维重建
- ADCensus.zip
- VisualSFM_CMVS-PMVS_MeshLab
- DICOM Viewer,三维重建后可导出DICOM格式
- 论文研究-基于视觉的三维重建技术综
- 视差图转换物方点云DSM
- OpenCV实现SfM:双目三维重建
- 可用于基于VTK的Marching Cubes算法的DI
- 图像立体匹配和三维重建软件
- 人脸三维重建完整代码
- 设置cmvs/pmvs的visualSFM傻瓜式三维重建
- OpenCV实现多目三维重建
- marching cubes算法
- 航与用于三维重建的航拍图
- 可直接进行多张照片三维重建,速度
- 申抒含-基于图像的大规模场景三维重
- pcd格式三维点云
- kinectfusion程序
- 双目标定后的三维重建
- 空间点三位重建前方交会
- 基于特征点匹配的三维重建OpenCV+Ope
- 基于相移法的三维重建
- CMP-MVS开源代码
- SFMtoolKit3工程
评论
共有 条评论