# transform point clouds back to their reference frame using ground truth
            # (this is important because the network must learn when point clouds are in their original reference frame)
            pcd1_corr.transform(np.linalg.inv(T1))
            pcd2_corr.transform(np.linalg.inv(T2))

            # extract patches and compute LRFs
            patches1_batch = np.empty((batch_size, 3, patch_size))
            patches2_batch = np.empty((batch_size, 3, patch_size))

            lrfs1_batch = np.empty((batch_size, 4, 4))
            lrfs2_batch = np.empty((batch_size, 4, 4))

            frag1_lrf = lrf(pcd=pcd1,
                            pcd_tree=o3d.geometry.KDTreeFlann(pcd1),
                            patch_size=patch_size,
                            lrf_kernel=lrf_kernel,
                            viz=False)

            frag2_lrf = lrf(pcd=pcd2,
                            pcd_tree=o3d.geometry.KDTreeFlann(pcd2),
                            patch_size=patch_size,
                            lrf_kernel=lrf_kernel,
                            viz=False)

            # GET PATCHES USING THE FPS POINTS
            for i in range(len(fps_pcd1_idx)):

                pt1 = np.asarray(pcd1_corr.points)[fps_pcd1_idx.cpu()[i]]
                pt2 = np.asarray(pcd2_corr.points)[fps_pcd2_idx.cpu()[i]]
Beispiel #2
0
    np.asarray(pcd1.points).shape[0]))
inds2 = np.random.choice(np.asarray(pcd2.points).shape[0],
                         pts_to_sample,
                         replace=False)
print('randomly sampled {} out of {} from pcd2 to compute DIPs'.format(
    pts_to_sample,
    np.asarray(pcd2.points).shape[0]))

pcd1_pts = np.asarray(pcd1.points)[inds1]
pcd2_pts = np.asarray(pcd2.points)[inds2]

# compute DIPs
frag1_lrf = lrf(
    pcd=pcd1,
    pcd_tree=o3d.geometry.KDTreeFlann(pcd1),
    patch_size=patch_size,
    lrf_kernel=lrf_kernel,
    viz=False
)  # set viz=True to visualise patch kernels and their respective LRF

frag2_lrf = lrf(
    pcd=pcd2,
    pcd_tree=o3d.geometry.KDTreeFlann(pcd2),
    patch_size=patch_size,
    lrf_kernel=lrf_kernel,
    viz=False
)  # set viz=True to visualise patch kernels and their respective LRF

patches1 = np.empty((pcd1_pts.shape[0], 3, patch_size))
patches2 = np.empty((pcd2_pts.shape[0], 3, patch_size))