public class CPD
extends java.lang.Object
| Modifier and Type | Field and Description | 
|---|---|
| static int | DEFAULT_MAX_ITERS | 
| static boolean | verbose | 
| Constructor and Description | 
|---|
| CPD() | 
| Modifier and Type | Method and Description | 
|---|---|
| static AffineTransform3d | affine(Point3d[] X,
      Point3d[] Y,
      double w,
      double tol,
      int maxIters,
      Point3d[] TY)Uses the affine CPD algorithm to align a set of points | 
| static AffineTransform3d | affine(Point3d[] X,
      Point3d[] Y,
      double w,
      double tol,
      int maxIters,
      Point3d[] TY,
      AffineTransform3d trans,
      double[] sigma2Holder)Uses the affine CPD algorithm to align a set of points | 
| static AffineTransform3d | affine(PolygonalMesh meshRef,
      PolygonalMesh meshReg,
      double w,
      double tol,
      int maxIters)Uses the affine CPD algorithm to align two meshes | 
| static Point3d[] | coherent(Point3d[] X,
        Point3d[] Y,
        double lambda,
        double beta2,
        double w,
        double tol,
        int maxIters)Uses the coherent CPD algorithm to align a set of points | 
| static Point3d[] | coherent(Point3d[] X,
        Point3d[] Y,
        double lambda,
        double beta2,
        double w,
        double tol,
        int maxIters,
        Point3d[] TY)Uses the coherent CPD algorithm to align a set of points | 
| static Point3d[] | coherent(Point3d[] X,
        Point3d[] Y,
        double lambda,
        double beta2,
        double w,
        double tol,
        int maxIters,
        Point3d[] TY,
        double[] sigma2Holder)Uses the coherent CPD algorithm to align a set of points | 
| static PolygonalMesh | coherent(PolygonalMesh meshRef,
        PolygonalMesh meshReg,
        double lambda,
        double beta2,
        double w,
        double tol,
        int maxIters)Uses the coherent CPD algorithm to align two meshes | 
| static PolygonalMesh | coherent(PolygonalMesh meshRef,
        PolygonalMesh meshReg,
        double lambda,
        double beta2,
        double w,
        double tol,
        int maxIters,
        PolygonalMesh out)Uses the coherent CPD algorithm to align two meshes | 
| static Point3d | computeMean(Point3d[] pnts,
           double[] P,
           double Np,
           Point3d mean)Compute and return the weighted mean | 
| static double | computeP(Point3d[] X,
        Point3d[] TY,
        double sigma2,
        double w,
        double[][] P,
        double[] P1,
        double[] Pt1)Computes the CPD probability function P(m|n) | 
| static double | computeP(Point3d[] X,
        Point3d[] TY,
        double sigma2,
        double w,
        double[][] P,
        double[] P1,
        double[] Pt1,
        double tol2)Computes the CPD probability function P(m|n) | 
| static double | computeQ(Point3d[] X,
        Point3d[] TY,
        double[][] P,
        double Np,
        double sigma2)CPD Objective function | 
| static double | computeQ(Point3d[] X,
        Point3d[] TY,
        double[][] P,
        double Np,
        double sigma2,
        double tol2)CPD Objective function | 
| static double | computeVariance(Point3d[] X,
               Point3d[] TY,
               double[][] P,
               double Np)Estimates the CPD variance | 
| static ScaledRigidTransform3d | rigid(Point3d[] X,
     Point3d[] Y,
     double w,
     double tol,
     int maxIters,
     boolean allowScaling,
     Point3d[] TY)Uses the rigid CPD algorithm to align a set of points | 
| static ScaledRigidTransform3d | rigid(Point3d[] X,
     Point3d[] Y,
     double w,
     double tol,
     int maxIters,
     boolean allowScaling,
     Point3d[] TY,
     ScaledRigidTransform3d trans,
     double[] sigma2Holder)Uses the rigid CPD algorithm to align a set of points | 
| static ScaledRigidTransform3d | rigid(PolygonalMesh meshRef,
     PolygonalMesh meshReg,
     double w,
     double tol,
     int maxIters,
     boolean allowScaling)Uses the rigid CPD algorithm to align two meshes | 
| static void | transformPoints(Point3d[] Y,
               AffineTransform3dBase trans,
               Point3d[] TY)Transforms a set of points | 
| static void | transformPoints(Point3d[] Y,
               double s,
               Matrix3d R,
               Vector3d t,
               Point3d[] TY)Transforms points based on rigid transform | 
| static void | transformPoints(Point3d[] Y,
               Matrix3d A,
               Vector3d t,
               Point3d[] TY)Transforms points based on affine transform | 
| static void | transformPoints(Point3d[] Y,
               MatrixNd G,
               MatrixNd W,
               Point3d[] TY) | 
| static void | transformPoints(Point3d[] Y,
               Point3d[] TY)Transforms a set of points by identity (copies points) | 
public static int DEFAULT_MAX_ITERS
public static boolean verbose
public static ScaledRigidTransform3d rigid(Point3d[] X, Point3d[] Y, double w, double tol, int maxIters, boolean allowScaling, Point3d[] TY, ScaledRigidTransform3d trans, double[] sigma2Holder)
X - reference input pointsY - points to registerw - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsallowScaling - whether or not to allow scalingTY - transformed pointstrans - initial guess of scaled rigid transformsigma2Holder - initial guess of variancepublic static double computeP(Point3d[] X, Point3d[] TY, double sigma2, double w, double[][] P, double[] P1, double[] Pt1)
X - Input pointsTY - Transformed output pointssigma2 - variancew - weight to account for noise/outliersP - MxN probability matrixP1 - Mx1 vector, P*1Pt1 - Nx1 vector, trans(P)*1public static double computeP(Point3d[] X, Point3d[] TY, double sigma2, double w, double[][] P, double[] P1, double[] Pt1, double tol2)
X - Input pointsTY - Transformed output pointssigma2 - variancew - weight to account for noise/outliersP - MxN probability matrixP1 - Mx1 vector, P*1Pt1 - Nx1 vector, trans(P)*1tol2 - squared point tolerancepublic static double computeQ(Point3d[] X, Point3d[] TY, double[][] P, double Np, double sigma2)
X - reference pointsTY - transformed input pointsP - probability matrixNp - sum of all probabilitiessigma2 - probability variancepublic static double computeQ(Point3d[] X, Point3d[] TY, double[][] P, double Np, double sigma2, double tol2)
X - reference pointsTY - transformed input pointsP - probability matrixNp - sum of all probabilitiessigma2 - probability variancetol2 - squared point tolerancepublic static void transformPoints(Point3d[] Y, double s, Matrix3d R, Vector3d t, Point3d[] TY)
Y - input pointss - scaleR - rotationt - translationTY - transformed pointspublic static void transformPoints(Point3d[] Y, AffineTransform3dBase trans, Point3d[] TY)
Y - input pointstrans - transformTY - transformed pointspublic static void transformPoints(Point3d[] Y, Point3d[] TY)
Y - input pointsTY - transformed pointspublic static void transformPoints(Point3d[] Y, Matrix3d A, Vector3d t, Point3d[] TY)
Y - input pointsA - affine transformt - translationTY - transformed pointspublic static void transformPoints(Point3d[] Y, MatrixNd G, MatrixNd W, Point3d[] TY)
public static double computeVariance(Point3d[] X, Point3d[] TY, double[][] P, double Np)
X - N input pointsTY - M transformed output pointsP - probability matrix (if null, P(m,n) = 1/M)Np - Total sum of entries in probability matrixpublic static Point3d computeMean(Point3d[] pnts, double[] P, double Np, Point3d mean)
pnts - set of pointsP - vector of probabilitiesNp - sum of probabilitiesmean - mean to fill, if null, creates newpublic static ScaledRigidTransform3d rigid(Point3d[] X, Point3d[] Y, double w, double tol, int maxIters, boolean allowScaling, Point3d[] TY)
X - reference input pointsY - points to registerw - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsallowScaling - whether or not to allow scalingTY - transformed pointspublic static ScaledRigidTransform3d rigid(PolygonalMesh meshRef, PolygonalMesh meshReg, double w, double tol, int maxIters, boolean allowScaling)
meshRef - reference meshmeshReg - mesh to registerw - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsallowScaling - whether or not to allow scalingpublic static AffineTransform3d affine(Point3d[] X, Point3d[] Y, double w, double tol, int maxIters, Point3d[] TY, AffineTransform3d trans, double[] sigma2Holder)
X - reference input pointsY - points to registerw - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsTY - transformed pointstrans - initial guess of scaled rigid transformsigma2Holder - initial guess of variancepublic static AffineTransform3d affine(Point3d[] X, Point3d[] Y, double w, double tol, int maxIters, Point3d[] TY)
X - reference input pointsY - points to registerw - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsTY - transformed pointspublic static AffineTransform3d affine(PolygonalMesh meshRef, PolygonalMesh meshReg, double w, double tol, int maxIters)
meshRef - reference meshmeshReg - mesh to registerw - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationspublic static Point3d[] coherent(Point3d[] X, Point3d[] Y, double lambda, double beta2, double w, double tol, int maxIters, Point3d[] TY, double[] sigma2Holder)
X - reference input pointsY - points to registerlambda - weight factor for regularization term (> 0)beta2 - coherence factor, beta^2 (> 0)w - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsTY - transformed pointssigma2Holder - initial variance estimatepublic static Point3d[] coherent(Point3d[] X, Point3d[] Y, double lambda, double beta2, double w, double tol, int maxIters)
X - reference input pointsY - points to registerlambda - weight factor for regularization term (> 0)beta2 - coherence factor, beta^2 (> 0)w - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationspublic static Point3d[] coherent(Point3d[] X, Point3d[] Y, double lambda, double beta2, double w, double tol, int maxIters, Point3d[] TY)
X - reference input pointsY - points to registerlambda - weight factor for regularization term (> 0)beta2 - coherence factor, beta^2 (> 0)w - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsTY - transformed pointspublic static PolygonalMesh coherent(PolygonalMesh meshRef, PolygonalMesh meshReg, double lambda, double beta2, double w, double tol, int maxIters)
meshRef - reference meshmeshReg - mesh to registerlambda - weight factor for regularization term (> 0)beta2 - coherence factor, beta^2 (> 0)w - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationspublic static PolygonalMesh coherent(PolygonalMesh meshRef, PolygonalMesh meshReg, double lambda, double beta2, double w, double tol, int maxIters, PolygonalMesh out)
meshRef - reference meshmeshReg - mesh to registerlambda - weight factor for regularization term (> 0)beta2 - coherence factor, beta^2 (> 0)w - weight, accounting to noise (w=0 --> no noise)tol - will iterative until objective function changes by less than thismaxIters - maximum number of iterationsout - transformed mesh