Example #1
0
        public void OrganizedExtractionTest()
        {
            using (var cloud = new PointCloudOfXYZ())
                using (var clusterIndices = new VectorOfPointIndices())
                {
                    using (var reader = new PCDReader())
                        reader.Read(DataPath("tutorials/table_scene_mug_stereo_textured.pcd"), cloud);
                    int organizedClusterCount;

                    using (var ec = new EuclideanClusterExtractionOfXYZ
                    {
                        ClusterTolerance = 0.01,
                        MinClusterSize = 100,
                        MaxClusterSize = 800000
                    })
                    {
                        using (var organized = new Search.OrganizedNeighborOfXYZ())
                            using (var tree = new Search.KdTreeOfXYZ())
                            {
                                organized.SetInputCloud(cloud);

                                ec.SetSearchMethod(organized);
                                ec.Extract(clusterIndices);

                                organizedClusterCount = clusterIndices.Count;
                                clusterIndices.Clear();

                                ec.SetSearchMethod(tree);
                                ec.Extract(clusterIndices);

                                Assert.AreEqual(clusterIndices.Count, organizedClusterCount, "organized neighbor cluster count did not match kdtree cluster count");
                            }
                    }
                }
        }
Example #2
0
        public void FileReadPointsTest()
        {
            PCDReader <PointXYZ> reader = new PCDReader <PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(213, header.Points);
        }
Example #3
0
        public void FileReadVersionTest()
        {
            PCDReader <PointXYZ> reader = new PCDReader <PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(PCDVersion.PCDv7, header.Version);
        }
Example #4
0
        public void FileReadPointsTest()
        {
            PCDReader<PointXYZ> reader = new PCDReader<PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(213, header.Points);
        }
Example #5
0
        public void FileReadHeightTest()
        {
            PCDReader<PointXYZ> reader = new PCDReader<PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(1, header.Height);
        }
Example #6
0
        public void FileReadHeightTest()
        {
            PCDReader <PointXYZ> reader = new PCDReader <PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(1, header.Height);
        }
Example #7
0
        public void FileReadCompleteTest()
        {
            PCDReader<PointXYZ> reader = new PCDReader<PointXYZ>();
            PointCloud<PointXYZ> cloud = reader.Read("test.pcd");

            Assert.AreEqual(213, cloud.Points.Count);

            Assert.AreEqual(0.93773, cloud[0].X, 0.000001);
            Assert.AreEqual(0.33763, cloud[0].Y, 0.000001);
            Assert.AreEqual(0, cloud[0].Z, 0.000001);
        }
Example #8
0
        public void FileReadCompleteTest()
        {
            PCDReader <PointXYZ>  reader = new PCDReader <PointXYZ>();
            PointCloud <PointXYZ> cloud  = reader.Read("test.pcd");

            Assert.AreEqual(213, cloud.Points.Count);

            Assert.AreEqual(0.93773, cloud[0].X, 0.000001);
            Assert.AreEqual(0.33763, cloud[0].Y, 0.000001);
            Assert.AreEqual(0, cloud[0].Z, 0.000001);
        }
Example #9
0
        public void FileReadFieldsTest()
        {
            PCDReader<PointXYZ> reader = new PCDReader<PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(4, header.Fields.Count);
            Assert.AreEqual(4, header.Fields[0].Size);
            Assert.AreEqual('F', header.Fields[0].Type);
            Assert.AreEqual(1, header.Fields[0].Count);
        }
Example #10
0
        public void FileReadFieldsTest()
        {
            PCDReader <PointXYZ> reader = new PCDReader <PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(4, header.Fields.Count);
            Assert.AreEqual(4, header.Fields[0].Size);
            Assert.AreEqual('F', header.Fields[0].Type);
            Assert.AreEqual(1, header.Fields[0].Count);
        }
Example #11
0
        public void StatisticalOutlierRemovalTutorialTest()
        {
            using (var cloud = new PointCloudOfXYZ())
                using (var cloudFiltered = new PointCloudOfXYZ())
                {
                    using (var reader = new PCDReader())
                        reader.Read(DataPath("tutorials/table_scene_lms400.pcd"), cloud);

                    using (var sor = new Filters.StatisticalOutlierRemovalOfXYZ())
                    {
                        sor.SetInputCloud(cloud);
                        sor.MeanK           = 50;
                        sor.StdDevMulThresh = 1;
                        sor.filter(cloudFiltered);

                        Assert.IsTrue(cloudFiltered.Count > 0);
                        Assert.IsTrue(cloudFiltered.Count < cloud.Count);
                    }
                }
        }
Example #12
0
        static void Main(string[] args)
        {
            using (var cloud = new PointCloudOfXYZRGBA())
            {
                using (var reader = new PCDReader())
                    reader.Read(DataPath("tutorials/table_scene_mug_stereo_textured.pcd"), cloud);

                using (var visualizer = new Visualizer("a window"))
                {
                    visualizer.AddPointCloud(cloud);
                    visualizer.SetPointCloudRenderingProperties(RenderingProperties.PointSize, 2);
                    visualizer.SetPointCloudRenderingProperties(RenderingProperties.Opacity, 0.95);

                    while (!visualizer.WasStopped)
                    {
                        visualizer.SpinOnce(100);
                    }
                }
            }
        }
Example #13
0
        public void TestIntegralFile()
        {
            //copying integral image tutorial from http://pointclouds.org/documentation/tutorials/normal_estimation_using_integral_images.php#normal-estimation-using-integral-images
            using (var cloud = new PointCloudOfXYZ())
                using (var normals = new PointCloudOfNormal())
                    using (var ne = new IntegralImageNormalEstimationPointXYZAndNormal())
                    {
                        using (var reader = new PCDReader())
                            if (reader.Read(DataPath("tutorials/table_scene_mug_stereo_textured.pcd"), cloud) < 0)
                            {
                                Assert.Fail("could not open pcd file");
                            }

                        ne.SetNormalEstimationMethod(IntegralImageNormalEstimation.NormalEstimationMethod.Average3DGradient);
                        ne.SetMaxDepthChangeFactor(0.02f);
                        ne.SetNormalSmoothingSize(10f);
                        ne.SetInputCloud(cloud);
                        ne.Compute(normals);

                        Assert.IsTrue(normals.Count == cloud.Count, "normals count did not match cloud count");
                    }
        }
Example #14
0
        public unsafe void SupervoxelClusteringTutorialTest()
        {
            var voxelResolution   = 0.008f;
            var seedResolution    = 0.1f;
            var colorImportance   = 0.2f;
            var spatialImportance = 0.4f;
            var normalImportance  = 1f;

            using (var cloud = new PointCloudOfXYZRGBA())
                using (var adjacentSupervoxelCenters = new PointCloudOfXYZRGBA())
                {
                    using (var reader = new PCDReader())
                        //Assert.AreEqual(0, reader.Read(DataPath("tutorials/correspondence_grouping/milk_cartoon_all_small_clorox.pcd"), cloud));
                        Assert.AreEqual(0, reader.Read(DataPath("tutorials/table_scene_mug_stereo_textured.pcd"), cloud));

                    var min = new Vector3(float.MaxValue);
                    var max = new Vector3(float.MinValue);
                    foreach (var p in cloud.Points)
                    {
                        min = Vector3.Min(min, p.V);
                        max = Vector3.Max(max, p.V);
                    }

                    using (var normals = new PointCloudOfNormal(cloud.Width, cloud.Height))
                        using (var super = new Segmentation.SupervoxelClusteringOfXYZRGBA(voxelResolution, seedResolution))
                            using (var clusters = new Segmentation.SupervoxelClustersOfXYZRGBA())
                            {
                                using (var ne = new IntegralImageNormalEstimationPointXYZAndNormal())
                                    using (var noColor = new PointCloudOfXYZ(cloud.Width, cloud.Height))
                                    {
                                        var count = cloud.Count;
                                        var cptr  = cloud.Data;
                                        var nptr  = noColor.Data;
                                        for (var i = 0; i < count; i++)
                                        {
                                            (nptr + i)->V = (cptr + i)->V;
                                        }

                                        ne.SetNormalEstimationMethod(IntegralImageNormalEstimation.NormalEstimationMethod.Average3DGradient);
                                        ne.SetMaxDepthChangeFactor(0.02f);
                                        ne.SetNormalSmoothingSize(10f);

                                        ne.SetInputCloud(noColor);
                                        ne.Compute(normals);
                                    }

                                super.SetInputCloud(cloud);
                                super.SetNormalCloud(normals);

                                super.SetColorImportance(colorImportance);
                                super.SetSpatialImportance(spatialImportance);
                                super.SetNormalImportance(normalImportance);

                                super.Extract(clusters);
                                Assert.IsTrue(clusters.Count > 0);

                                using (var adjacency = new MultiMapOfuintAnduint())
                                {
                                    super.GetSupervoxelAdjacency(adjacency);
                                    Assert.AreEqual(350, adjacency.Count);

                                    var i = 0;
                                    foreach (var kvp in adjacency)
                                    {
                                        i++;
                                    }

                                    Assert.AreEqual(350, i);

                                    using (var labelItr = adjacency.Begin())
                                        using (var end = adjacency.End())
                                        {
                                            for (; !labelItr.Equals(end);)
                                            {
                                                var supervoxelLabel = labelItr.Key;

                                                var supervoxel = clusters.At(supervoxelLabel);

                                                foreach (var kvp in adjacency.EqualRange(supervoxelLabel))
                                                {
                                                    var neighbor = clusters.At(kvp.Value);
                                                    adjacentSupervoxelCenters.Add(neighbor.Centroid);
                                                }

                                                adjacency.UpperBound(supervoxelLabel, labelItr);
                                            }
                                        }

                                    Assert.AreEqual(350, adjacentSupervoxelCenters.Count);
                                }
                            }
                }
        }
Example #15
0
        public void ClusterExtractionTutorialTest()
        {
            using (var cloud = new PointCloudOfXYZ())
                using (var clusterIndices = new VectorOfPointIndices())
                {
                    using (var reader = new PCDReader())
                        reader.Read(DataPath("tutorials/table_scene_lms400.pcd"), cloud);

                    using (var vg = new VoxelGridOfXYZ())
                    {
                        vg.SetInputCloud(cloud);
                        vg.LeafSize = new Vector3(0.01f);

                        var cloudFiltered = new PointCloudOfXYZ();
                        vg.filter(cloudFiltered);


                        using (var seg = new SACSegmentationOfXYZ()
                        {
                            OptimizeCoefficients = true,
                            ModelType = SACModel.Plane,
                            MethodType = SACMethod.RANSAC,
                            MaxIterations = 100,
                            DistanceThreshold = 0.02f
                        })
                            using (var cloudPlane = new PointCloudOfXYZ())
                                using (var coefficients = new Common.ModelCoefficients())
                                    using (var inliers = new PointIndices())
                                    {
                                        int i        = 0;
                                        int nrPoints = cloudFiltered.Points.Count;

                                        while (cloudFiltered.Points.Count > 0.3 * nrPoints)
                                        {
                                            seg.SetInputCloud(cloudFiltered);
                                            seg.Segment(inliers, coefficients);
                                            if (inliers.Indices.Count == 0)
                                            {
                                                Assert.Fail("could not estimate a planar model for the given dataset");
                                            }

                                            using (var extract = new ExtractIndicesOfXYZ()
                                            {
                                                Negative = false
                                            })
                                            {
                                                extract.SetInputCloud(cloudFiltered);
                                                extract.SetIndices(inliers.Indices);

                                                extract.filter(cloudPlane);

                                                extract.Negative = true;
                                                var cloudF = new PointCloudOfXYZ();
                                                extract.filter(cloudF);

                                                cloudFiltered.Dispose();
                                                cloudFiltered = cloudF;
                                            }

                                            i++;
                                        }

                                        Assert.IsTrue(i > 1, "Didn't find more than 1 plane");
                                        var tree = new Search.KdTreeOfXYZ();
                                        tree.SetInputCloud(cloudFiltered);

                                        using (var ec = new EuclideanClusterExtractionOfXYZ
                                        {
                                            ClusterTolerance = 0.02,
                                            MinClusterSize = 100,
                                            MaxClusterSize = 25000
                                        })
                                        {
                                            ec.SetSearchMethod(tree);
                                            ec.SetInputCloud(cloudFiltered);
                                            ec.Extract(clusterIndices);
                                        }

                                        foreach (var pis in clusterIndices)
                                        {
                                            using (var cloudCluster = new PointCloudOfXYZ())
                                            {
                                                foreach (var pit in pis.Indices)
                                                {
                                                    cloudCluster.Add(cloudFiltered.Points[pit]);
                                                }

                                                cloudCluster.Width  = cloudCluster.Points.Count;
                                                cloudCluster.Height = 1;
                                            }
                                        }
                                    }
                    }
                }
        }
Example #16
0
        public void FileReadVersionTest()
        {
            PCDReader<PointXYZ> reader = new PCDReader<PointXYZ>();

            PCDHeader header = reader.ReadHeader("test.pcd");

            Assert.AreEqual(PCDVersion.PCDv7, header.Version);
        }
Example #17
0
        private void loadFile()
        {
            _cloud = PCDReader <PointXYZ> .LoadPCDFile(FileName);

            this.RenderWindow.SetPoints(_cloud.Points.Select(x => new Vector3(x.X, x.Y, x.Z)).ToList());
        }