資源簡(jiǎn)介
基于特征點(diǎn)匹配的三維重建,OpenCV+OpenGL,具體實(shí)現(xiàn)參考博主博客
代碼片段和文件信息
#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? {
m1?=?matches[i][0];
m2?=?matches[i][1];
if?(m1.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? {
Point2f?prjPtR?=?ptsLt.at((int)i10);?//?prjx?=?ptsLt.at((int)i10)?prjy?=?ptsLt.at((int)i11);
?//?inlier
if(?abs(ptsRtemp[i1].x?-?prjPtR.x)? 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? }
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?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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個(gè)文件信息
評(píng)論
共有 條評(píng)論