public void Translation_Horn()
 {
     Reset();
     IterativeClosestPointTransform.ICPVersion = ICP_VersionUsed.Horn;
     meanDistance = ICPTestData.Test1_Translation(ref verticesTarget, ref verticesSource, ref verticesResult);
     Assert.IsTrue(ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-10));
 }
예제 #2
0
        public void Scale_AllAxes_Du()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion      = ICP_VersionUsed.Du;
            IterativeClosestPointTransform.Instance.ICPSettings.FixedTestPoints = true;
            meanDistance = ICPTestData.Test3_Scale(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Assert.IsTrue(this.threshold > meanDistance);
        }
예제 #3
0
        public void RotationXYZ_Zinsser()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion      = ICP_VersionUsed.Zinsser;
            IterativeClosestPointTransform.Instance.ICPSettings.FixedTestPoints = true;
            meanDistance = ICPTestData.Test2_RotationXYZ(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Assert.IsTrue(this.threshold > meanDistance);
        }
예제 #4
0
        public void Cube_RotateTranslate_ScaleUniform_Du()
        {
            this.icp.Settings_Reset_GeometricObject();
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Du;

            meanDistance = ICPTestData.Test5_CubeRotateTranslate_ScaleUniform(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Assert.IsTrue(this.threshold > meanDistance);
        }
예제 #5
0
        public void Prespective_Zinsser()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion      = ICP_VersionUsed.Zinsser;
            IterativeClosestPointTransform.Instance.ICPSettings.FixedTestPoints = true;
            meanDistance = ICPTestData.Test9_Inhomogenous(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            this.ShowResultsInWindow_CubeLines(false);
            CheckResult_MeanDistance(1e-3f);
        }
예제 #6
0
        public void Scale_Umeyama()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion      = ICP_VersionUsed.Umeyama;
            IterativeClosestPointTransform.Instance.ICPSettings.FixedTestPoints = true;
            meanDistance = ICPTestData.Test3_Scale(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Performance_Stop("Scale_Umeyama");//7 miliseconds on i3_2121 (3.3 GHz)
            Assert.IsTrue(this.threshold > meanDistance);
        }
        public void Scale_AllAxes_Du()
        {
            Reset();
            IterativeClosestPointTransform.ICPVersion      = ICP_VersionUsed.Scaling_Du;
            IterativeClosestPointTransform.FixedTestPoints = true;
            meanDistance = ICPTestData.Test3_Scale(ref verticesTarget, ref verticesSource, ref verticesResult);

            Assert.IsTrue(ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-10));
        }
        public void Zinsser()
        {
            this.icp.Reset_RealData();
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Zinsser;

            meanDistance = ICPTestData.Test7_Face_KnownTransformation_15000(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);
            Show3PointCloudsInWindow(false);
            CheckResult_MeanDistance(1e-7f);
        }
예제 #9
0
        public void RotationXYZ_Horn()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion      = ICP_VersionUsed.Horn;
            IterativeClosestPointTransform.Instance.ICPSettings.FixedTestPoints = true;
            meanDistance = ICPTestData.Test2_RotationXYZ(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            //this.ShowResultsInWindowIncludingLines(false);
            Assert.IsTrue(this.threshold > meanDistance);
        }
        public void RotationXYZ_Zinsser()
        {
            Reset();
            IterativeClosestPointTransform.ICPVersion      = ICP_VersionUsed.Scaling_Zinsser;
            IterativeClosestPointTransform.FixedTestPoints = true;
            meanDistance = ICPTestData.Test2_RotationXYZ(ref verticesTarget, ref verticesSource, ref verticesResult);

            Assert.IsTrue(ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-10));
        }
        public void Scale_Horn()
        {
            Reset();
            IterativeClosestPointTransform.ICPVersion      = ICP_VersionUsed.Horn;
            IterativeClosestPointTransform.FixedTestPoints = true;
            meanDistance = ICPTestData.Test3_Scale(ref verticesTarget, ref verticesSource, ref verticesResult);

            //this.ShowResultsInWindowIncludingLines(false);
            Assert.IsTrue(ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-10));
        }
예제 #12
0
 public void Translation_Zinsser()
 {
     IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Zinsser;
     meanDistance = ICPTestData.Test1_Translation(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);
     if (!(this.threshold > meanDistance))
     {
         System.Diagnostics.Debug.WriteLine("Translation Zinsser failed");
         Assert.Fail("Translation Zinsser failed");
     }
 }
        public void Zinsser()
        {
            Reset();
            SettingsRealData();
            IterativeClosestPointTransform.ICPVersion = ICP_VersionUsed.Scaling_Zinsser;

            meanDistance = ICPTestData.Test7_Face_KnownTransformation(ref verticesTarget, ref verticesSource, ref verticesResult);
            ShowResultsInWindow(false);
            CheckResult_MeanDistance(1e-10);
        }
예제 #14
0
        public void Outliers_CubeTranslate_NotGood()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Horn;
            IterativeClosestPointTransform.Instance.ICPSettings.MaximumNumberOfIterations = 10;

            meanDistance = ICPTestData.Test8_CubeOutliers_Translate(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            this.ShowResultsInWindow_CubeLines(false);
            Assert.IsTrue(1e-3f > PointCloud.MeanDistance(pointCloudTarget, pointCloudResult));
        }
예제 #15
0
        public void Prespective_Zinsser()
        {
            Reset();
            IterativeClosestPointTransform.ICPVersion      = ICP_VersionUsed.Scaling_Zinsser;
            IterativeClosestPointTransform.FixedTestPoints = true;
            meanDistance = ICPTestData.Test9_Inhomogenous(ref verticesTarget, ref verticesSource, ref verticesResult);

            this.ShowResultsInWindow_CubeLines(false);
            CheckResult_MeanDistance(1e-3);
        }
        public void Umeyama_New()
        {
            this.icp.Reset_RealData();
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Umeyama;

            meanDistance = ICPTestData.Test6_Bunny_ExpectedError(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);
            Show3PointCloudsInWindow(true);

            CheckResult_MeanDistance(1e-3f);
        }
예제 #17
0
        public void Cube_RotateScaleTranslate_KDTreeBruteForce()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Du;
            this.icp.ICPSettings.ResetVector3ToOrigin = true;
            meanDistance = ICPTestData.Test5_CubeRotateTranslate_ScaleUniform(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);


            this.ShowResultsInWindow_CubeLines(false);
            //
            Assert.IsTrue(this.threshold > meanDistance);
        }
 public void Translation_Zinsser()
 {
     Reset();
     IterativeClosestPointTransform.ICPVersion = ICP_VersionUsed.Scaling_Zinsser;
     meanDistance = ICPTestData.Test1_Translation(ref verticesTarget, ref verticesSource, ref verticesResult);
     if (!ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-10))
     {
         System.Diagnostics.Debug.WriteLine("Translation Zinsser failed");
         Assert.Fail("Translation Zinsser failed");
     }
 }
        public void Umeyama()
        {
            Reset();
            SettingsRealData();
            IterativeClosestPointTransform.ICPVersion = ICP_VersionUsed.Scaling_Umeyama;

            meanDistance = ICPTestData.Test6_Bunny(ref verticesTarget, ref verticesSource, ref verticesResult);
            ShowResultsInWindow(true);

            CheckResult_MeanDistance(1e-3);
        }
예제 #20
0
        public void Cube_ScaleInhomogenous_Horn()
        {
            this.icp.Settings_Reset_GeometricObject();
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Horn;
            meanDistance = ICPTestData.Test5_CubeScale_Inhomogenous(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);


            this.ShowResultsInWindow_CubeLines(true);

            CheckResult_MeanDistance(this.threshold);
        }
예제 #21
0
 public void Translation_Umeyama()
 {
     IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Umeyama;
     meanDistance = ICPTestData.Test1_Translation(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);
     //have to check why Umeyama is not exact to e-10 - perhaps because of diagonalization lib (for the scale factor)
     if (!(this.threshold > meanDistance))
     {
         System.Diagnostics.Debug.WriteLine("Translation Umeyama failed");
         Assert.Fail("Translation Umeyama failed");
     }
 }
예제 #22
0
        public void Du()
        {
            this.icp.Reset_RealData();
            IterativeClosestPointTransform.Instance.ICPSettings.MaximumNumberOfIterations = 100;
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Du;


            meanDistance = ICPTestData.Test9_Face_Stitch(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Show3PointCloudsInWindow(true);
            Assert.IsTrue(1e-3f > PointCloud.MeanDistance(pointCloudTarget, pointCloudResult));
        }
예제 #23
0
        public void Face_NormalsCheck()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Horn;

            IterativeClosestPointTransform.Instance.ICPSettings.MaximumNumberOfIterations = 10;
            this.icp.ICPSettings.Normal_RemovePoints = true;

            meanDistance = ICPTestData.Test9_Face_Stitch(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Show3PointCloudsInWindow(false);
            Assert.IsTrue(1e-3f > PointCloud.MeanDistance(pointCloudTarget, pointCloudResult));
        }
 public void Translation_Umeyama()
 {
     Reset();
     IterativeClosestPointTransform.ICPVersion = ICP_VersionUsed.Scaling_Umeyama;
     meanDistance = ICPTestData.Test1_Translation(ref verticesTarget, ref verticesSource, ref verticesResult);
     //have to check why Umeyama is not exact to e-10 - perhaps because of diagonalization lib (for the scale factor)
     if (!ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-5))
     {
         System.Diagnostics.Debug.WriteLine("Translation Umeyama failed");
         Assert.Fail("Translation Umeyama failed");
     }
 }
예제 #25
0
        public void Cube8_TranslateRotateShuffle()
        {
            this.icp.Settings_Reset_GeometricObject();
            IterativeClosestPointTransform.Instance.ICPSettings.FixedTestPoints = false;


            meanDistance = ICPTestData.Test10_Cube8pRotateTranslateShuffle(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult, cubeSizeX);
            this.ShowResultsInWindow_Cube(true);


            CheckResult_MeanDistance(1e-7f);
        }
        public void Cube_ScaleInhomogenous_Du()
        {
            Reset();
            IterativeClosestPointTransform.ICPVersion      = ICP_VersionUsed.Scaling_Du;
            IterativeClosestPointTransform.FixedTestPoints = true;
            meanDistance = ICPTestData.Test5_CubeScale_Inhomogenous(ref verticesTarget, ref verticesSource, ref verticesResult);


            this.ShowResultsInWindow_CubeLines(false);
            //
            Assert.IsTrue(ICPTestData.CheckResult(verticesTarget, verticesResult, 1e-10));
        }
예제 #27
0
        public void Cube_ScaleInhomogenous_Du()
        {
            this.icp.Settings_Reset_GeometricObject();

            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Du;

            meanDistance = ICPTestData.Test5_CubeScale_Inhomogenous(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);


            this.ShowResultsInWindow_CubeLines(false);
            //
            Assert.IsTrue(this.threshold > meanDistance);
        }
예제 #28
0
        public void Outliers_CubeRotate()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Horn;
            IterativeClosestPointTransform.Instance.ICPSettings.MaximumNumberOfIterations = 10;
            this.icp.ICPSettings.SimulatedAnnealing = true;



            meanDistance = ICPTestData.Test8_CubeOutliers_Rotate(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Show3PointCloudsInWindow(true);
            Assert.IsTrue(2e-1f < PointCloud.MeanDistance(pointCloudTarget, pointCloudResult));
        }
예제 #29
0
        public void Translation_Horn_Old()
        {
            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion = ICP_VersionUsed.Horn;

            meanDistance = ICPTestData.Test1_Translation(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);
            Assert.IsTrue(this.threshold > meanDistance);


            TestForm fOTK = new TestForm();

            fOTK.Show3PointClouds(pointCloudSource, pointCloudTarget, pointCloudResult, true);
            fOTK.ShowDialog();
        }
예제 #30
0
        public void Umeyama_SA()
        {
            this.icp.Reset_RealData();

            IterativeClosestPointTransform.Instance.ICPSettings.ICPVersion         = ICP_VersionUsed.Umeyama;
            IterativeClosestPointTransform.Instance.ICPSettings.SimulatedAnnealing = true;


            meanDistance = ICPTestData.Test9_Face_Stitch(ref pointCloudTarget, ref pointCloudSource, ref pointCloudResult);

            Show3PointCloudsInWindow(true);
            Assert.IsTrue(1e-3f > PointCloud.MeanDistance(pointCloudTarget, pointCloudResult));
        }