From 98b3c8d183b5dce5f8cfecdb6bf2e28923054d80 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Sat, 5 Dec 2009 00:57:43 +0000 Subject: [PATCH] A small change to the ICP to make it more independent from the scale of the object. Now the MinMinDistPerc parameter is no more an absolute value but it is the Ratio between initial starting distance (MinDistAbs) and what can reach by the application of the ReduceFactor. --- src/meshlabplugins/editalign/align/AlignPair.cpp | 4 +++- src/meshlabplugins/editalign/align/AlignPair.h | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/meshlabplugins/editalign/align/AlignPair.cpp b/src/meshlabplugins/editalign/align/AlignPair.cpp index 21cc95b8b..076398aba 100644 --- a/src/meshlabplugins/editalign/align/AlignPair.cpp +++ b/src/meshlabplugins/editalign/align/AlignPair.cpp @@ -413,7 +413,9 @@ bool AlignPair::Align( ii.Time=clock(); as.I.push_back(ii); nc++; - if(ap.ReduceFactor<1) StartMinDist=max(ap.MinMinDistAbs, min(StartMinDist,5.0*H.Percentile(ap.ReduceFactor))); + // The distance of the next points to be considered is lowered according to the parameter. + // We use 5 times the percentile of the found points. + if(ap.ReduceFactor<1) StartMinDist=max(ap.MinDistAbs*ap.MinMinDistPerc, min(StartMinDist,5.0*H.Percentile(ap.ReduceFactor))); } while ( nc<=ap.MaxIterNum && diff --git a/src/meshlabplugins/editalign/align/AlignPair.h b/src/meshlabplugins/editalign/align/AlignPair.h index 9236481cf..7f6158a92 100644 --- a/src/meshlabplugins/editalign/align/AlignPair.h +++ b/src/meshlabplugins/editalign/align/AlignPair.h @@ -166,7 +166,7 @@ public: PassLoFilter = 0.05; PassHiFilter = 0.75; ReduceFactor = 0.90; - MinMinDistAbs = 1; + MinMinDistPerc = 0.01; EndStepNum = 5; MatchMode = MMRigid; SampleMode = SMNormalEqualized; @@ -200,8 +200,8 @@ public: double PassLoFilter; // Filtraggio utilizzato per decidere quali punti scegliere tra quello trovati abbastanza double PassHiFilter; // vicini. Espresso in percentili. Di solito si scarta il quelli sopra il 75 e quelli sotto il 5 - double ReduceFactor; // Ad ogni passo si riduce la distanza entro la quale andare a cercare i punti piu' vicini. Di solito si sceglie il .9 percentile. - double MinMinDistAbs; // distanza minima fino a cui si puo' ridurre la MinDist secondo il reduce factor + double ReduceFactor; // At each step we reduce the range of search of the nearest points. We keep 5 times the percentile. + double MinMinDistPerc; // Ratio between initial starting distance (MinDistAbs) and what can reach by the application of the ReduceFactor. int UGExpansionFactor; // Grandezza della UG per la mesh fix come rapporto del numero di facce della mesh fix