private void PerformTest(bool alsoBruteForce, bool taken) { System.Diagnostics.Debug.WriteLine("Number of points: " + pointCloudSource.Vectors.Length.ToString()); if (alsoBruteForce) { GlobalVariables.ResetTime(); //-------------------------- tree = new KDTreeBruteForce(); tree.TakenAlgorithm = taken; tree.Build(pointCloudTarget); GlobalVariables.ShowLastTimeSpan("Build BruteForce :"); tree.FindClosestPointCloud_NotParallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find BruteForce :"); tree.FindClosestPointCloud_Parallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find BruteForce Parallel :"); Assert.IsTrue(tree.MeanDistance == 0); } //-------------------------- GlobalVariables.ResetTime(); tree = new KDTreeJeremyC(); tree.TakenAlgorithm = taken; tree.Build(pointCloudTarget); GlobalVariables.ShowLastTimeSpan("Build Jerome :"); tree.FindClosestPointCloud_NotParallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find Jerome :"); tree.FindClosestPointCloud_Parallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find Jerome Parallel :"); Assert.IsTrue(tree.MeanDistance == 0); //-------------------------- GlobalVariables.ResetTime(); tree = new KDTreeKennell(); tree.TakenAlgorithm = taken; tree.Build(pointCloudTarget); GlobalVariables.ShowLastTimeSpan("Build Kennell :"); tree.FindClosestPointCloud_NotParallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find Kennell :"); tree.FindClosestPointCloud_Parallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find Kennell Parallel :"); Assert.IsTrue(tree.MeanDistance == 0); //-------------------------- GlobalVariables.ResetTime(); tree = new KDTreeEricRegina(); tree.TakenAlgorithm = taken; tree.Build(pointCloudTarget); GlobalVariables.ShowLastTimeSpan("Build EricRegina :"); tree.FindClosestPointCloud_NotParallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find EricRegina :"); tree.FindClosestPointCloud_Parallel(pointCloudSource); GlobalVariables.ShowLastTimeSpan("--> Find EricRegina :"); Assert.IsTrue(tree.MeanDistance == 0); }
public IterativeClosestPointTransform()//:base(PointerUtils.GetIntPtr(new float[3]), true, true) { KDTree = new KDTreeKennell(); //KDTree = new KDTreeJeremyC(); //KDTree = new KDTreeBruteForce(); Reset(); this.PSource = null; this.PTarget = null; this.LandmarkTransform = new LandmarkTransform(); this.NumberOfIterations = 0; }
private void PrepareTargetTree(PointCloud pointCloudTarget) { //second object: //----------- pcTargetCentered = CalculatePCA_Internal(pointCloudTarget); //kdtree = new KDTreeJeremyC(); KDTree = new KDTreeKennell(); //kdtree.Build(pointCloudTarget); KDTree.Build(pcTargetCentered); pcResult = null; pcTreeResult = null; }
/// <summary> /// mergedPoints /// </summary> /// <param name="pointsTransformed"></param> /// <param name="pointsTarget"></param> /// <param name="kdTree"></param> /// <param name="meanDistance"></param> /// <returns></returns> public static PointCloud CalculateMergedPoints(PointCloud pointsTransformed, PointCloud pointsTarget, IKDTree kdTree, float threshold, out int pointsAdded, bool changeColorsOfMergedPoints) { if (pointsTransformed.Colors == null || pointsTransformed.Colors.Length != pointsTransformed.Vectors.Length) { pointsTransformed.Colors = new Vector3[pointsTransformed.Vectors.Length]; } if (pointsTarget.Colors == null || pointsTarget.Colors.Length != pointsTarget.Vectors.Length) { pointsTarget.Colors = new Vector3[pointsTarget.Vectors.Length]; } //search in tree // PointCloud resultKDTree = kdTree.FindClosestPointCloud_Parallel(result); KDTreeKennell kdTreeKennell = kdTree as KDTreeKennell; PointCloud pcToAdd = kdTreeKennell.RemoveDuplicates(pointsTransformed, threshold); pointsAdded = pcToAdd.Vectors.Length; //System.Diagnostics.Debug.WriteLine("target points added : " + pcToAdd.Vectors.Length.ToString() + " - outof " + result.Vectors.Length.ToString()); if (changeColorsOfMergedPoints) { pcToAdd.SetColor(new Vector3(0, 1, 1)); } List <Vector3> listV = pointsTarget.ListVectors; List <Vector3> listC = pointsTarget.ListColors; listV.AddRange(pcToAdd.ListVectors); listC.AddRange(pcToAdd.ListColors); PointCloud pMerged = new PointCloud(listV, listC, null, null, null, null); return(pMerged); }
public PCA() { KDTree = new KDTreeKennell(); }
public KDTreeBaseTest() { tree = new KDTreeJeremyC(); }