コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: ICP.cs プロジェクト: whigg/PointClouds
        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;
        }
コード例 #3
0
ファイル: PCA.cs プロジェクト: whigg/PointClouds
        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;
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
ファイル: PCA.cs プロジェクト: whigg/PointClouds
 public PCA()
 {
     KDTree = new KDTreeKennell();
 }
コード例 #6
0
ファイル: KDTreeBaseTest.cs プロジェクト: whigg/PointClouds
 public KDTreeBaseTest()
 {
     tree = new KDTreeJeremyC();
 }