diff --git a/apps/sample/trimesh_ransac/trimesh_ransac.cpp b/apps/sample/trimesh_ransac/trimesh_ransac.cpp index 1ceef66a..b55408ac 100644 --- a/apps/sample/trimesh_ransac/trimesh_ransac.cpp +++ b/apps/sample/trimesh_ransac/trimesh_ransac.cpp @@ -31,6 +31,7 @@ #include #include + #include #include @@ -69,42 +70,63 @@ int main( int argc, char **argv ) tri::UpdateBounding::Box(fixM); tri::UpdateBounding::Box(movM); - - float featureRad = fixM.bbox.Diag() * 0.005; - -// RansacFramework >::EvalNormalVariation(movM,featureRad*5.0); -// tri::io::ExporterPLY::Save(movM,"mv0.ply",tri::io::Mask::IOM_VERTQUALITY + tri::io::Mask::IOM_VERTCOLOR); -// RansacFramework::EvalNormalVariation(movM,featureRad*10.0); -// tri::io::ExporterPLY::Save(movM,"mv1.ply",tri::io::Mask::IOM_VERTQUALITY + tri::io::Mask::IOM_VERTCOLOR); - -// RansacFramework::EvalNormalVariation(fixM,featureRad*5.0); -// tri::io::ExporterPLY::Save(fixM,"fv0.ply",tri::io::Mask::IOM_VERTQUALITY + tri::io::Mask::IOM_VERTCOLOR); -// RansacFramework::EvalNormalVariation(fixM,featureRad*10.0); -// tri::io::ExporterPLY::Save(fixM,"fv1.ply",tri::io::Mask::IOM_VERTQUALITY + tri::io::Mask::IOM_VERTCOLOR); - - Point3f delta = math::GeneratePointInUnitBallUniform(rnd) * fixM.bbox.Diag(); tri::UpdatePosition::Translate(movM,delta); - tri::UpdateNormal::PerVertexNormalizedPerFaceNormalized(fixM); - tri::UpdateNormal::PerVertexNormalizedPerFaceNormalized(movM); + Point3f axis = math::GeneratePointOnUnitSphereUniform(rnd); + float angle = rnd.generate01() * M_PI; + Matrix44f rot; rot.SetRotateRad(angle,axis); + tri::UpdatePosition::Matrix(movM,rot); tri::io::ExporterPLY::Save(movM,"out.ply"); int randSeed = clock(); RansacFramework > Ran; RansacFramework >::Param pp; - pp.samplingRadiusPerc=0.005; + BaseFeatureSet::Param fpp; + pp.samplingRadiusPerc=0.01; pp.evalSize=50; pp.inlierRatioThr = 0.4; - Ran.Init(fixM,movM,pp); - + pp.iterMax = 100; + pp.maxMatchingFeatureNum = 400; + fpp.featureSampleRatio=0.5; std::vector >::Candidate> cVec; + +// RansacFramework > Ran; +// RansacFramework >::Param pp; +// NDFeatureSet::Param fpp; +// std::vector >::Candidate> cVec; + +// pp.samplingRadiusPerc=0.01; +// pp.evalSize=100; +// pp.inlierRatioThr = 0.4; +// pp.iterMax = 1000; +// int t0=clock(); + +// fpp.levAbs[0]=pp.samplingRadiusAbs*2.0; +// fpp.levAbs[0]=pp.samplingRadiusAbs*4.0; +// fpp.levAbs[0]=pp.samplingRadiusAbs*8.0; +// Ran.Init(fixM,movM,pp,fpp); +// Ran.EvaluateFeature(30,"featureTest30.ply",pp); +// fpp.levAbs[0]=pp.samplingRadiusAbs*3.0; +// fpp.levAbs[0]=pp.samplingRadiusAbs*6.0; +// fpp.levAbs[0]=pp.samplingRadiusAbs*9.0; +// Ran.Init(fixM,movM,pp,fpp); +// Ran.EvaluateFeature(30,"featureTest30a.ply",pp); + +// exit(-1); + + int t0=clock(); + Ran.Init(fixM,movM,pp,fpp); + int t1=clock(); Ran.Process_SearchEvaluateTriple(cVec,pp); + int t2=clock(); + + printf("Completed Search (%5.2f init %5.2f search)\n",float(t1-t0)/CLOCKS_PER_SEC, float(t2-t1)/CLOCKS_PER_SEC); + MyMesh out0; tri::Append::MeshCopy(out0,movM); tri::UpdatePosition::Matrix(out0,cVec[0].Tr); tri::io::ExporterPLY::Save(out0,"out0.ply"); - MyMesh inlierMesh0; Ran.DumpInlier(inlierMesh0,cVec[0],pp); tri::io::ExporterPLY::Save(inlierMesh0,"inlier0.ply"); @@ -112,6 +134,7 @@ int main( int argc, char **argv ) MyMesh out1; tri::Append::MeshCopy(out1,movM); tri::UpdatePosition::Matrix(out1,cVec[1].Tr); tri::io::ExporterPLY::Save(out1,"out1.ply"); + MyMesh inlierMesh1; Ran.DumpInlier(inlierMesh1,cVec[1],pp); tri::io::ExporterPLY::Save(inlierMesh1,"inlier1.ply"); diff --git a/apps/sample/trimesh_ransac/trimesh_ransac.pro b/apps/sample/trimesh_ransac/trimesh_ransac.pro index ab40fb73..35c7bb5f 100644 --- a/apps/sample/trimesh_ransac/trimesh_ransac.pro +++ b/apps/sample/trimesh_ransac/trimesh_ransac.pro @@ -1,4 +1,5 @@ include(../common.pri) TARGET = trimesh_ransac SOURCES += ../../../wrap/ply/plylib.cpp \ - trimesh_ransac.cpp + ../../../vcg/complex/algorithms/ransac_matching.h \ + trimesh_ransac.cpp