def test_filter(): ''' Test Voxel Grid Filter functionality ''' side = 10 delta = 0.05 offset = [-5, -5, 0] points, footprint = make_tri_pyramid_with_base(side, delta, offset) pc = pcl.PointCloudXYZRGB(points.astype(np.float32)) # Build Voxel Grid Filter vgf = pc.make_voxel_grid_filter() # Filter with Voxel size 1 vgf.set_leaf_size(1, 1, 1) pc2 = vgf.filter() # Filter with Voxel size 0.1 vgf.set_leaf_size(0.1, 0.1, 0.1) pc3 = vgf.filter() # Filter with Voxel size 10 vgf.set_leaf_size(10, 10, 10) pc4 = vgf.filter() assert_greater(len(pc), len(pc2)) assert_greater(len(pc3), len(pc2)) assert_greater(len(pc), len(pc4))
def setUp(self): self.useLocal = False if self.useLocal: self.tempdir = tempdir = '.' else: self.tempdir = tempdir = mkdtemp(prefix='patty-analytics') self.drivemapLas = os.path.join(tempdir, 'testDriveMap.las') self.sourcelas = os.path.join(tempdir, 'testSource.las') self.footprint_csv = os.path.join(tempdir, 'testFootprint.csv') self.foutlas = os.path.join(tempdir, 'testOutput.las') self.min = -10 self.max = 10 self.num_rows = 1000 # Create plane with a pyramid dm_pct = 0.5 dm_rows = np.round(self.num_rows * dm_pct) dm_min = self.min * dm_pct dm_max = self.max * dm_pct delta = dm_max / dm_rows shape_side = dm_max - dm_min dm_offset = [0, 0, 0] self.dense_obj_offset = [3, 2, -(1 + shape_side / 2)] # make drivemap plane_row = np.linspace(start=self.min, stop=self.max, num=self.num_rows) plane_points = cartesian((plane_row, plane_row, [0])) shape_points, footprint = make_tri_pyramid_with_base( shape_side, delta, dm_offset) np.savetxt(self.footprint_csv, footprint, fmt='%.3f', delimiter=',') dm_points = np.vstack([plane_points, shape_points]) plane_grid = np.zeros((dm_points.shape[0], 6), dtype=np.float32) plane_grid[:, 0:3] = dm_points self.drivemap_pc = pcl.PointCloudXYZRGB(plane_grid) self.drivemap_pc = downsample_voxel(self.drivemap_pc, voxel_size=delta * 20) # utils.set_registration(self.drivemap_pc) utils.save(self.drivemap_pc, self.drivemapLas) # Create a simple pyramid dense_grid = np.zeros((shape_points.shape[0], 6), dtype=np.float32) dense_grid[:, 0:3] = shape_points + self.dense_obj_offset self.source_pc = pcl.PointCloudXYZRGB(dense_grid) self.source_pc = downsample_voxel(self.source_pc, voxel_size=delta * 5) utils.save(self.source_pc, self.sourcelas)
def setUp(self): self.useLocal = False if self.useLocal: self.tempdir = tempdir = '.' else: self.tempdir = tempdir = mkdtemp(prefix='patty-analytics') self.drivemapLas = os.path.join(tempdir, 'testDriveMap.las') self.sourcelas = os.path.join(tempdir, 'testSource.las') self.footprint_csv = os.path.join(tempdir, 'testFootprint.csv') self.foutlas = os.path.join(tempdir, 'testOutput.las') self.min = -10 self.max = 10 self.num_rows = 1000 # Create plane with a pyramid dm_pct = 0.5 dm_rows = np.round(self.num_rows * dm_pct) dm_min = self.min * dm_pct dm_max = self.max * dm_pct delta = dm_max / dm_rows shape_side = dm_max - dm_min dm_offset = [0, 0, 0] self.dense_obj_offset = [3, 2, -(1 + shape_side / 2)] # make drivemap plane_row = np.linspace( start=self.min, stop=self.max, num=self.num_rows) plane_points = cartesian((plane_row, plane_row, [0])) shape_points, footprint = make_tri_pyramid_with_base( shape_side, delta, dm_offset) np.savetxt(self.footprint_csv, footprint, fmt='%.3f', delimiter=',') dm_points = np.vstack([plane_points, shape_points]) plane_grid = np.zeros((dm_points.shape[0], 6), dtype=np.float32) plane_grid[:, 0:3] = dm_points self.drivemap_pc = pcl.PointCloudXYZRGB(plane_grid) self.drivemap_pc = downsample_voxel(self.drivemap_pc, voxel_size=delta * 20) # utils.set_registration(self.drivemap_pc) utils.save(self.drivemap_pc, self.drivemapLas) # Create a simple pyramid dense_grid = np.zeros((shape_points.shape[0], 6), dtype=np.float32) dense_grid[:, 0:3] = shape_points + self.dense_obj_offset self.source_pc = pcl.PointCloudXYZRGB(dense_grid) self.source_pc = downsample_voxel(self.source_pc, voxel_size=delta * 5) utils.save(self.source_pc, self.sourcelas)