立体匹配:关于Middlebury提供的源码的简化使用
Middlebury提供的源码,虽然花了不到一个小时就运行起来啦。但说实话,它那循环读取脚本命令来执行算法真是让我费了不少头脑,花了近三天时间,我才弄明白了它的运行机制。你说,我就想提取一下算法,你给我整这么多圈子干啥。于是,在我明白了它的运行机制以后,就将无关的代码通通咔嚓了。剩下了最重要的两个类。
以下是我的操作过程。
1.1
新建解决方案SolutionXYZ、工程ExecutionXYZ及TestData目录。
为工程配置OpenCV库、pnglib库及jpeglib库
对VS2013还需要在C/C++->Preprocessor->Preprocessor Definitions中添加指令_CRT_SECURE_NO_WARNINGS
添加本人的CCC目录到工程内,没有则不用添加。
1.2
将<MiddEval3-SDK-1.6.zip>中的MiddEval3\code路径下的imageLib目录解压到工程内
将imageLib中Error.h文件中的snprintf改为_snprintf方可
1.3
将<StereoMatch_1_0.exe>中的StereoMatch目录解压到工程内。
删除StereoMatch目录下的StereoMatch.dsp、StereoMatch.dsw、License.txt、Makefile、README-StereoMatch.txt。
删除StereoMatch目录下的Convert.cpp、Convert.h、Convolve.h、Convolve.cpp、Copyright.h、Error.h、Image.cpp、Image.h、ImageIO.cpp、ImageIO.h、RefCntMem.cpp、RefCntMem.h、main.cpp、StereoIO.h、StereoIO.cpp、Verbose.h、ParameterIO.cpp、ParameterIO.h
1.4
将<Stereo-patch.zip>内的StcEvaluate.cpp解压到StereoMatch目录内覆盖原有文件
将<LASW.zip>内除Makefile文件外的所有文件解压到StereoMatch目录内覆盖原有文件
将<bp-extensions.tgz>内的StcOptBPSync.cpp, StcOptBP.cpp, node.h, node.cpp, bpregions.h, bpregions.cpp解压到StereoMatch目录内覆盖原有文件
将StereoMatch目录内的所有文件都打开并保存一遍。
在StereoMatcher.h中添加
void OptBP();
void OptBPSync();
在StereoParameters.h的eSymmetric =6,后添加
eBPSync = 7,
eBPAccel = 8,
在StcOptimize.cpp的opt_fn == eSimulAnnl的添加
||opt_fn == eBPAccel||opt_fn == eBPSync
在StcOptimize.cpp的OptSymmetric();break;的添加
case eBPAccel:
OptBP(); // run the optimization
break;
case eBPSync:
OptBPSync(); // run the optimization
break;
1.5
将所有StereoMatch目录中的所有文件中的"Image.h"改为"./../imageLib/Image.h"
将所有StereoMatch目录中的所有文件中的"Error.h"改为"./../imageLib/Error.h"
将所有StereoMatch目录中的所有文件中的"Convert.h"改为"./../imageLib/Convert.h"
将所有StereoMatch目录中的所有文件中的"ImageIO.h"改为"./../imageLib/ImageIO.h"
将所有StereoMatch目录中的所有文件中的"Convolve.h"改为"./../imageLib/Convolve.h"
将所有StereoMatch目录中的所有文件中的所有#include "ParameterIO.h"及#include "Verbose.h"都删除
将所有类的protected成员改为public成员
暂且注释掉parser_flg.c中的所有代码
由vs2010和2013仍不支持const常量作为数组维数,所以BP算法还没法使用。为编译成功,将bpregions.cpp和node.cpp全部注释,将StcOptBP.cpp和StcOptBPSync.cpp中的相应函数的函数体注释。
1.6
在StereoParameters.h中添加如下代码:
enum EVerbosityLevel
{
eVerboseQuiet = 0, // no output except for errors
eVerboseWarning = 1, // include warning messages
eVerboseSummary = 2, // print brief summary of algorithm and result
eVerboseProgress = 3, // report progress through steps of algorithm
eVerboseFileIO = 4, // report reading and writing of files
eVerboseTiming = 5, // print timing information
eVerbosePredictionError = 6, // print prediction error for all frames
eVerboseScriptFile = 10, // echo commands from script file
eVerboseInnerLoops = 15, // show inner iterations
eVerboseDumpFiles = 25, // dump intermediate results as image files
eVerboseAllMessages = 99 // include all information
};
enum EStereoMatchStatus
{ // Match status computed by symmetric matcher (values in m_status)
eUnknownMatch = 0,
eCertainMatch = 1,
eAmbiguousMatch = 2,
eOccludedMatch = 3,
};
struct CStereoFrame
{ // An input image and its associated meta-data (depth map, ground truth, ...):
CByteImage input_image; // input image (gray or color)
CByteImage depth_image; // depth image (input/output)
CByteImage truth_image; // ground truth depth image
CByteImage resampled_image; // resampled image (for reprojection error)
float predict_err; // prediction error (visible pixels)
float predict_visible; // fraction of pixels visible
};
将StereoMatcher.h中的enum EstereoMatchStatus{…}和struct CstereoFrame{…}删除
将StereoParameters.h中代码void PIOInitialize(CParameterIO& prw)删除或注释
将StereoParameters.cpp中代码void PIOInitialize(CParameterIO& prw){…}删除或注释
将StereoParameters.cpp代码都加到StereoParameters.h中并删除StereoParameters.cpp
1.7
可选操作。
将所有Stc**.cpp中的”./../imageLib/***.h”,并补加这些头文件到”StereoMatcher.h”文件中
将StereoMatcher.cpp中代码全部转移到StereoMatcher.h中后将其删除
对文件编号:
1.1StcPreProcess.cpp
1.2StcRawCosts.cpp
1.3StcAggregate.cpp
1.4StcOptimize.cpp
1.5StcRefine.cpp
1.6StcEvaluate.cpp
2.1StcDiffusion.cpp
2.2LASW.cpp
2.2LASW.h
3.1StcOptDP.cpp
3.2StcOptSO.cpp
3.3StcSimulAnn.cpp
3.4StcGraphCut.cpp
编译出错时再对头文件名进行更改。
1.8
在TestData目录内新建目录:map, sawtooth, venus。然后将< imagedirs.zip>中对应目录内的imx.pgm, imy.pgm, dispx.pgm, dispy.pgm文件复制过来,并都统一命名为:im0.pgm, im1.pgm, disp0.pgm, disp1.pgm
1.9
接下就是实现<Scripts.zip>、<LASWscripts.zip>及<bp-extensions.zip>中的exp7_bps.txt和exp8_bpa.txt的功能。
添加scripts.h和main.cpp
#include "CCC/COMCV.h" #include "StereoMatch/StereoMatcher.h" #include <fstream> #include <iomanip> //输出参数 void writeParams(CStereoMatcher &s, string &path) { ofstream out(path); out << "preproc_addnoise_stddev " << s.preproc_addnoise_stddev;//0.000000 out << endl << "disp_step " << s.disp_step;//1.000000 out << endl << "disp_scale " << s.disp_scale;//8.000000 out << endl << "diff_lambda " << s.diff_lambda;//0.150000 out << endl << "diff_beta " << s.diff_beta;//0.500000 out << endl << "diff_scale_cost " << s.diff_scale_cost;//0.010000 out << endl << "diff_mu " << s.diff_mu;//0.500000 out << endl << "diff_sigmaP " << s.diff_sigmaP;//0.400000 out << endl << "diff_epsP " << s.diff_epsP;//0.010000 out << endl << "aggr_gamma_proximity " << s.aggr_gamma_proximity;// 5.500000 out << endl << "aggr_gamma_similarity " << s.aggr_gamma_similarity;// 5.000000 out << endl << "opt_smoothness " << s.opt_smoothness;//1.000000 out << endl << "opt_grad_thresh " << s.opt_grad_thresh;//5.000000 out << endl << "opt_grad_penalty " << s.opt_grad_penalty;//1.000000 out << endl << "opt_sa_start_T " << s.opt_sa_start_T;//10.000000 out << endl << "opt_sa_end_T " << s.opt_sa_end_T;//0.010000 out << endl << "opt_min_margin " << s.opt_min_margin;//0.700000 out << endl << "eval_bad_thresh " << s.eval_bad_thresh;//1.000000 out << endl << "eval_error_scale " << s.eval_error_scale;//0.000000 out << endl << "eval_disp_gap " << s.eval_disp_gap;//2.000000 out << endl << "eval_textureless_thresh " << s.eval_textureless_thresh;//4.000000 )<< s.eval_empty_color;//0x00ffc0ff out << endl << "eval_partial_shuffle " << s.eval_partial_shuffle;//0.000000 out << endl << "rms_error_all" << s.rms_error_all; out << endl << "rms_error_nonocc " << s.rms_error_nonocc;//1.898849 out << endl << "rms_error_occ " << s.rms_error_occ;//17.536930 out << endl << "rms_error_textured " << s.rms_error_textured;//1.895457 out << endl << "rms_error_textureless " << s.rms_error_textureless;//2.254724 out << endl << "rms_error_discont " << s.rms_error_discont;//6.221545 out << endl << "bad_pixels_all " << s.bad_pixels_all;//0.074057 out << endl << "bad_pixels_nonocc " << s.bad_pixels_nonocc;//0.017140 out << endl << "bad_pixels_occ " << s.bad_pixels_occ;//0.971484 out << endl << "bad_pixels_textured " << s.bad_pixels_textured;//0.016978 out << endl << "bad_pixels_textureless " << s.bad_pixels_textureless;//0.035714 out << endl << "bad_pixels_discont " << s.bad_pixels_discont;//0.114071 out << endl << "fraction_matched " << s.fraction_matched;//0.100000 out << endl << "predict_err_near " << s.predict_err_near;//-;//1.000000 out << endl << "predict_err_middle " << s.predict_err_middle;//-;//1.000000 out << endl << "predict_err_match " << s.predict_err_match;//-;//1.000000 out << endl << "predict_err_far " << s.predict_err_far;//-;//1.000000 out << endl << "final_energy " << s.final_energy;//611911.437500 out << endl << "total_time " << s.total_time;//1.681000 out.close(); } //相同参数 void comParam(CStereoMatcher &s) { s.verbose = eVerboseSummary; s.evaluate_only = s.evaluate_only; s.frame_ref = ; s.frame_match = ; s.eval_predict_type = ePredictNone; s.eval_error_scale = ; s.disp_min = ; s.disp_scale = ; s.eval_disp_gap = ; s.eval_ignore_border = ; } //与目录相关的参数 void dirParam(CStereoMatcher &s, string &dir) { string im0path, im1path, trupath; cout << endl << dir.substr(dir.find_last_of(); ) == "map") { s.disp_max = ; im0path = dir + "/im0.pgm"; im1path = dir + "/im1.pgm"; trupath = dir + "/disp0.pgm"; } ) == "sawtooth") { s.disp_max = ; im0path = dir + "/im0.ppm"; im1path = dir + "/im1.ppm"; trupath = dir + "/disp0.pgm"; } ) == "venus") { s.disp_max = ; im0path = dir + "/im0.ppm"; im1path = dir + "/im1.ppm"; trupath = dir + "/disp0.pgm"; } CStereoFrame fr0, fr1; ReadImage(fr0.input_image, im0path.c_str()); ReadImage(fr1.input_image, im1path.c_str()); ReadImage(fr0.truth_image, trupath.c_str()); s.m_frame.push_back(fr0); s.m_frame.push_back(fr1); } //测试方案一 void costSSD9(CStereoMatcher &s, string &dir) { //0.此函数内的公共设置 s.aggr_window_size = ; s.aggr_minfilter = ; ] = { , , , , , , }; //1.测试一 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/SAD09.pgm", dir + "/SAD09t50.pgm", dir + "/SAD09t20.pgm", dir + "/SAD09t10.pgm", dir + "/SAD09t05.pgm", dir + "/SAD09t02.pgm", dir + "/SAD09t01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out1[i].c_str()); writeParams(s,out1[i].substr(, out1[i].find_last_of(".")) + ".txt"); ; } //2.测试二 s.match_fn = eSD; s.match_interval = ; ] = { dir + "/SSD09.pgm", dir + "/SSD09t50.pgm", dir + "/SSD09t20.pgm", dir + "/SSD09t10.pgm", dir + "/SSD09t05.pgm", dir + "/SSD09t02.pgm", dir + "/SSD09t01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out2[i].c_str()); writeParams(s, out2[i].substr(, out2[i].find_last_of(".")) + ".txt"); } //3.测试三 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/SAD09b.pgm", dir + "/SAD09bt50.pgm", dir + "/SAD09bt20.pgm", dir + "/SAD09bt10.pgm", dir + "/SAD09bt05.pgm", dir + "/SAD09bt02.pgm", dir + "/SAD09bt01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out3[i].c_str()); writeParams(s, out3[i].substr(, out3[i].find_last_of(".")) + ".txt"); } //4.测试四 s.match_fn = eSD; s.match_interval = ; ] = { dir + "/SSD09b.pgm", dir + "/SSD09bt50.pgm", dir + "/SSD09bt20.pgm", dir + "/SSD09bt10.pgm", dir + "/SSD09bt05.pgm", dir + "/SSD09bt02.pgm", dir + "/SSD09bt01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out4[i].c_str()); writeParams(s, out4[i].substr(, out4[i].find_last_of(".")) + ".txt"); } } //测试方案二 void costSSDMF9(CStereoMatcher &s, string &dir) { //0.此函数内的公共设置 s.aggr_window_size = ; s.aggr_minfilter = ; ] = { , , , , , , }; //1.测试一 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/SADmf09.pgm", dir + "/SADmf09t50.pgm", dir + "/SADmf09t20.pgm", dir + "/SADmf09t10.pgm", dir + "/SADmf09t05.pgm", dir + "/SADmf09t02.pgm", dir + "/SADmf09t01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out1[i].c_str()); writeParams(s, out1[i].substr(, out1[i].find_last_of(".")) + ".txt"); ; } //2.测试二 s.match_fn = eSD; s.match_interval = ; ] = { dir + "/SSDmf09.pgm", dir + "/SSDmf09t50.pgm", dir + "/SSDmf09t20.pgm", dir + "/SSDmf09t10.pgm", dir + "/SSDmf09t05.pgm", dir + "/SSDmf09t02.pgm", dir + "/SSDmf09t01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out2[i].c_str()); writeParams(s, out2[i].substr(, out2[i].find_last_of(".")) + ".txt"); } //3.测试三 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/SADmf09b.pgm", dir + "/SADmf09bt50.pgm", dir + "/SADmf09bt20.pgm", dir + "/SADmf09bt10.pgm", dir + "/SADmf09bt05.pgm", dir + "/SADmf09bt02.pgm", dir + "/SADmf09bt01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out3[i].c_str()); writeParams(s, out3[i].substr(, out3[i].find_last_of(".")) + ".txt"); } //4.测试四 s.match_fn = eSD; s.match_interval = ; ] = { dir + "/SSDmf09b.pgm", dir + "/SSDmf09bt50.pgm", dir + "/SSDmf09bt20.pgm", dir + "/SSDmf09bt10.pgm", dir + "/SSDmf09bt05.pgm", dir + "/SSDmf09bt02.pgm", dir + "/SSDmf09bt01.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out4[i].c_str()); writeParams(s, out4[i].substr(, out4[i].find_last_of(".")) + ".txt"); } } //测试方案三 void costGlobal(CStereoMatcher &s, string &dir) { //0.此函数内的公共设置 ] = { , , , , , }; //1.DP测试 s.aggr_iter = ; s.opt_fn = eDynamicProg; s.opt_occlusion_cost = ; s.opt_smoothness = ; //1.1 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/DPm1o20s0020.pgm", dir + "/DPm1o20s0020t50.pgm", dir + "/DPm1o20s0020t20.pgm", dir + "/DPm1o20s0020t10.pgm", dir + "/DPm1o20s0020t05.pgm", dir + "/DPm1o20s0020t02.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out11[i].c_str()); writeParams(s, out11[i].substr(, out11[i].find_last_of(".")) + ".txt"); ; } //1.2 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/DPm1o20s0020b.pgm", dir + "/DPm1o20s0020bt50.pgm", dir + "/DPm1o20s0020bt20.pgm", dir + "/DPm1o20s0020bt10.pgm", dir + "/DPm1o20s0020bt05.pgm", dir + "/DPm1o20s0020bt02.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out12[i].c_str()); writeParams(s, out12[i].substr(, out12[i].find_last_of(".")) + ".txt"); } //2.SO测试 s.aggr_iter = ; s.opt_fn = eScanlineOpt; s.opt_smoothness = ; //2.1 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/SOm1s0020.pgm", dir + "/SOm1s0020t50.pgm", dir + "/SOm1s0020t20.pgm", dir + "/SOm1s0020t10.pgm", dir + "/SOm1s0020t05.pgm", dir + "/SOm1s0020t02.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out21[i].c_str()); writeParams(s, out21[i].substr(, out21[i].find_last_of(".")) + ".txt"); } //2.2 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/SOm1s0020b.pgm", dir + "/SOm1s0020bt50.pgm", dir + "/SOm1s0020bt20.pgm", dir + "/SOm1s0020bt10.pgm", dir + "/SOm1s0020bt05.pgm", dir + "/SOm1s0020bt02.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out22[i].c_str()); writeParams(s, out22[i].substr(, out22[i].find_last_of(".")) + ".txt"); } //3.GC测试 s.aggr_iter = ; s.opt_fn = eGraphCut; s.opt_smoothness = ; //3.1 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/GCm1s0020.pgm", dir + "/GCm1s0020t50.pgm", dir + "/GCm1s0020t20.pgm", dir + "/GCm1s0020t10.pgm", dir + "/GCm1s0020t05.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out31[i].c_str()); writeParams(s, out31[i].substr(, out31[i].find_last_of(".")) + ".txt"); } //3.2 s.match_fn = eAD; s.match_interval = ; ] = { dir + "/GCm1s0020b.pgm", dir + "/GCm1s0020bt50.pgm", dir + "/GCm1s0020bt20.pgm", dir + "/GCm1s0020bt10.pgm", dir + "/GCm1s0020bt05.pgm" }; ; i < ; i++) { s.match_max = match_max[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out32[i].c_str()); writeParams(s, out32[i].substr(, out32[i].find_last_of(".")) + ".txt"); } } //测试方案四 void aggr(CStereoMatcher &s, string &dir) { //0.此函数内的公共设置 s.match_fn = eAD; s.opt_fn = eWTA; //1.测试一 s.aggr_fn = eBox; s.aggr_iter = ; s.aggr_minfilter = ; ] = { dir + "/SAD03.pgm", dir + "/SAD05.pgm", dir + "/SAD07.pgm", dir + "/SAD09.pgm", dir + "/SAD11.pgm", dir + "/SAD13.pgm", dir + "/SAD15.pgm", dir + "/SAD17.pgm", dir + "/SAD19.pgm", dir + "/SAD21.pgm", dir + "/SAD23.pgm", dir + "/SAD25.pgm", dir + "/SAD27.pgm", dir + "/SAD29.pgm" }; ; i < ; i++) { s.aggr_window_size = * i + ; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out1[i].c_str()); writeParams(s, out1[i].substr(, out1[i].find_last_of(".")) + ".txt"); ; } //2.测试二 s.aggr_fn = eBox; s.aggr_iter = ; ] = { dir + "/SADmf03.pgm", dir + "/SADmf05.pgm", dir + "/SADmf07.pgm", dir + "/SADmf09.pgm", dir + "/SADmf11.pgm", dir + "/SADmf13.pgm", dir + "/SADmf15.pgm", dir + "/SADmf17.pgm", dir + "/SADmf19.pgm", dir + "/SADmf21.pgm", dir + "/SADmf23.pgm", dir + "/SADmf25.pgm", dir + "/SADmf27.pgm", dir + "/SADmf29.pgm" }; ; i < ; i++) { s.aggr_window_size = * i + ; s.aggr_minfilter = * i + ; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out2[i].c_str()); writeParams(s, out2[i].substr(, out2[i].find_last_of(".")) + ".txt"); ; } //3.测试三 s.aggr_fn = eBinomial; s.aggr_minfilter = ; ] = { dir + "/SADbf02.pgm", dir + "/SADbf04.pgm", dir + "/SADbf06.pgm", dir + "/SADbf08.pgm", dir + "/SADbf10.pgm", dir + "/SADbf12.pgm", dir + "/SADbf14.pgm", dir + "/SADbf16.pgm", dir + "/SADbf18.pgm", dir + "/SADbf20.pgm", dir + "/SADbf22.pgm", dir + "/SADbf24.pgm", dir + "/SADbf26.pgm", dir + "/SADbf28.pgm" }; ; i < ; i++) { s.aggr_iter = * i + ; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out3[i].c_str()); writeParams(s, out3[i].substr(, out3[i].find_last_of(".")) + ".txt"); } //4.测试四 s.aggr_fn = eDiffusion; s.aggr_minfilter = ; s.diff_lambda = 0.15; ] = { dir + "/SADdiff010.pgm", dir + "/SADdiff020.pgm", dir + "/SADdiff030.pgm", dir + "/SADdiff040.pgm", dir + "/SADdiff050.pgm", dir + "/SADdiff060.pgm", dir + "/SADdiff070.pgm", dir + "/SADdiff080.pgm", dir + "/SADdiff090.pgm", dir + "/SADdiff100.pgm", dir + "/SADdiff110.pgm", dir + "/SADdiff120.pgm", dir + "/SADdiff130.pgm", dir + "/SADdiff140.pgm", dir + "/SADdiff150.pgm" }; ; i < ; i++) { s.aggr_iter = * i + ; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out4[i].c_str()); writeParams(s, out4[i].substr(, out4[i].find_last_of(".")) + ".txt"); } //5.测试五 s.aggr_fn = eMembrane; s.aggr_minfilter = ; s.diff_lambda = 0.15; s.aggr_iter = ; ] = { dir + "/SADmemb09.pgm", dir + "/SADmemb08.pgm", dir + "/SADmemb07.pgm", dir + "/SADmemb06.pgm", dir + "/SADmemb05.pgm", dir + "/SADmemb04.pgm", dir + "/SADmemb03.pgm", dir + "/SADmemb02.pgm", dir + "/SADmemb01.pgm", dir + "/SADmemb00.pgm" }; ; i < ; i++) { s.diff_beta = 0.9 - 0.1 * (float)i; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out5[i].c_str()); writeParams(s, out5[i].substr(, out5[i].find_last_of(".")) + ".txt"); } } //测试方案五 void lambda(CStereoMatcher &s, string dir) { //0.此函数内的公共设置 ] = { , , , , , , , }; //1.DP测试 s.match_fn = eAD; s.aggr_iter = ; s.opt_fn = eDynamicProg; //1.1 s.opt_occlusion_cost = ; ] = { dir + "/DPm1o20s0005.pgm", dir + "/DPm1o20s0010.pgm", dir + "/DPm1o20s0020.pgm", dir + "/DPm1o20s0050.pgm", dir + "/DPm1o20s0100.pgm", dir + "/DPm1o20s0200.pgm", dir + "/DPm1o20s0500.pgm", dir + "/DPm1o20s1000.pgm" }; ; i < ; i++) { s.opt_smoothness = opt_smoothness[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out11[i].c_str()); writeParams(s, out11[i].substr(, out11[i].find_last_of(".")) + ".txt"); ; } //1.2 s.opt_occlusion_cost = ; ] = { dir + "/DPm1o50s0005.pgm", dir + "/DPm1o50s0010.pgm", dir + "/DPm1o50s0020.pgm", dir + "/DPm1o50s0050.pgm", dir + "/DPm1o50s0100.pgm", dir + "/DPm1o50s0200.pgm", dir + "/DPm1o50s0500.pgm", dir + "/DPm1o50s1000.pgm" }; ; i < ; i++) { s.opt_smoothness = opt_smoothness[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out12[i].c_str()); writeParams(s, out12[i].substr(, out12[i].find_last_of(".")) + ".txt"); } //1.3 s.opt_occlusion_cost = ; ] = { dir + "/DPm1o80s0005.pgm", dir + "/DPm1o80s0010.pgm", dir + "/DPm1o80s0020.pgm", dir + "/DPm1o80s0050.pgm", dir + "/DPm1o80s0100.pgm", dir + "/DPm1o80s0200.pgm", dir + "/DPm1o80s0500.pgm", dir + "/DPm1o80s1000.pgm" }; ; i < ; i++) { s.opt_smoothness = opt_smoothness[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out13[i].c_str()); writeParams(s, out13[i].substr(, out13[i].find_last_of(".")) + ".txt"); } //2.SO测试 s.match_fn = eAD; s.aggr_iter = ; s.opt_fn = eScanlineOpt; ] = { dir + "/SOm1s0005.pgm", dir + "/SOm1s0010.pgm", dir + "/SOm1s0020.pgm", dir + "/SOm1s0050.pgm", dir + "/SOm1s0100.pgm", dir + "/SOm1s0200.pgm", dir + "/SOm1s0500.pgm", dir + "/SOm1s1000.pgm" }; ; i < ; i++) { s.opt_smoothness = opt_smoothness[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out2[i].c_str()); writeParams(s, out2[i].substr(, out2[i].find_last_of(".")) + ".txt"); } //3.GC测试 s.match_fn = eAD; s.aggr_iter = ; s.opt_fn = eGraphCut; ] = { dir + "/GCm1s0005.pgm", dir + "/GCm1s0010.pgm", dir + "/GCm1s0020.pgm", dir + "/GCm1s0050.pgm", dir + "/GCm1s0100.pgm", dir + "/GCm1s0200.pgm", dir + "/GCm1s0500.pgm", dir + "/GCm1s1000.pgm" }; ; i < ; i++) { s.opt_smoothness = opt_smoothness[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out3[i].c_str()); writeParams(s, out3[i].substr(, out3[i].find_last_of(".")) + ".txt"); } //4.SA测试 s.match_fn = eAD; s.aggr_iter = ; s.opt_fn = eSimulAnnl; s.opt_sa_start_T = ; s.opt_max_iter = ; ] = { dir + "/SAm1s0005.pgm", dir + "/SAm1s0010.pgm", dir + "/SAm1s0020.pgm", dir + "/SAm1s0050.pgm", dir + "/SAm1s0100.pgm", dir + "/SAm1s0200.pgm", dir + "/SAm1s0500.pgm", dir + "/SAm1s1000.pgm" }; ; i < ; i++) { s.opt_smoothness = opt_smoothness[i]; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out4[i].c_str()); writeParams(s, out4[i].substr(, out4[i].find_last_of(".")) + ".txt"); } } //测试LASW void lasw(CStereoMatcher &s, string dir) { s.match_max = ; s.match_fn = eAD; s.opt_fn = eWTA; s.aggr_fn = eASWeight; s.aggr_iter = ; s.aggr_window_size = ; s.aggr_gamma_proximity = 17.5; s.aggr_gamma_similarity = 5.0; s.aggr_color_space = eCIELab; string out = dir + "/AD_asw_35.pgm"; s.ComputeCorrespondence(); s.Evaluate(); WriteImage(s.m_frame[].depth_image, out.c_str()); writeParams(s, , out.find_last_of(".")) + ".txt"); ; } //执行 void execute() { vector<string> dirs = cv_GetListFolders("./../TestData", "*", true); ; i < dirs.size(); i++) { CStereoMatcher s; comParam(s); dirParam(s, dirs[i]); //costSSD9(s, dirs[i]); //costSSDMF9(s, dirs[i]); //costGlobal(s, dirs[i]); //aggr(s, dirs[i]); //lambda(s, dirs[i]); lasw(s, dirs[i]); } }
立体匹配:关于Middlebury提供的源码的简化使用的更多相关文章
- 立体匹配:关于Middlebury提供的源码的简化后的结构
- 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
开发微信/易信公共平台时,调试往往很麻烦,一般只能在手机上边试边改, 或在服务器写日志.当你的服务器脚本有Bug时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...
- easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)
前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...
- Sencha Touch+PhoneGap打造超级奶爸之喂养记(一) 源码免费提供
起源 非常高兴我的宝宝健康平安的出生了.对于初次做奶爸的我,喜悦过后,面临着各中担心,担心宝宝各项指标是否正常.最初几天都是在医院待着,从出生那一天开始,护士妹妹隔一段时间就会来问宝宝的喂奶,大小便, ...
- Sencha Touch+PhoneGap打造超级奶爸之喂养记(一) 源码免费提供(转)
起源 非常高兴我的宝宝健康平安的出生了.对于初次做奶爸的我,喜悦过后,面临着各中担心,担心宝宝各项指标是否正常.最初几天都是在医院待着,从出生那一天开始,护士妹妹隔一段时间就会来问宝宝的喂奶,大小便, ...
- mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
Mono 3.4修复了很多bug,继续加强稳定性和性能(其实Mono 3.2.8 已经很稳定,性能也很好了),但是从http://download.mono-project.com/sources/m ...
- Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...
- require() 源码解读
2009年,Node.js 项目诞生,所有模块一律为 CommonJS 格式. 时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS ...
- Apache Spark源码剖析
Apache Spark源码剖析(全面系统介绍Spark源码,提供分析源码的实用技巧和合理的阅读顺序,充分了解Spark的设计思想和运行机理) 许鹏 著 ISBN 978-7-121-25420- ...
随机推荐
- codevs-1447取出整数的一部分
说实在的,这个题目真不想写了…… 1447 取出整数的一部分 题目描述 Description 假如有一个整数(int):145678,现在我做截取该数一部份的操作,如输入4,返回前4位即1456;如 ...
- [转]StringUtils方法
摘自http://blog.sina.com.cn/s/blog_4550f3ca0100qrsd.html org.apache.commons.lang.StringUtils中方法的操作对象是j ...
- AngularJs初步学习笔记(part1)
一.摘要: angular是采用JavaScript编写的前端mvc框架,帮助开发者编写现代化的单页面应用.它尤其适用编写有大量CRUD操作的,具有Ajax风格的客户端应用. 二.总结: Angula ...
- WCF 遇到 由于线程退出或应用程序请求,已放弃 I/O 操作 ListenerContextInputStream
异常类型:IOException 异常消息:An exception has been thrown when reading the stream. 异常信息: at System.ServiceM ...
- jQuery实现表单验证
表单是网页的一个重要组成部分.本节做一个简单的表单提交网页然后利用jQuery实现表单的验证.后续的表单完善以及功能的完善会在以后的博客中给出. 效果图: 代码: <!DOCTYPE html ...
- SNM2无法编辑HostGroup项
经常遇到SNM2的工具无法更新,无法编辑,或者加载急慢的情况.解决方法就是在SNM2重新添加Array,然后再重新登录试试
- 【VB技巧】VB ListView 控件功能使用详解
来源:http://lcx.cc/?i=494 ListView控件 在工具箱上击鼠标右键,选择快捷菜单的Components(部件)项,在控件列表中选择Microsoft Windows Commo ...
- 怎样减少FLASH影片文件过大——绝对好用
网站建设中怎样减少FLASH影片文件过大 一,制作前的处理 1声音(mp3): GoldWave中打开需要处理的mp3,然后把它另存为---在最下一栏的属性中选择较低的字节数,例如,本来的mp3 ...
- 关于AVD无法使用问题
因为工作需要,刚入手android,搭建开发环境挺麻烦,整个环境的搭建配置我就不说了,网上很多,这里就只说一下我遇到的一个问题. Java JDK安装完毕,环境变量配置完毕,eclipse下载好后解压 ...
- TMS320C54x系列DSP的CPU与外设——第2章 TMS320C54x DSP体系结构总体介绍
第2章 TMS320C54x DSP体系结构总体介绍 本章介绍TMS320C54x DSP体系结构的概况,包括中央处理单元(CPU).存在器和片内外设. C54x DSP采用了高级的改进哈佛结构,用8 ...