コード例 #1
0
    def test_morton_coding_big_data(self):
        import point_cloud_utils as pcu
        import numpy as np
        import os
        if os.name == 'nt':
            num_pts = 10000
            num_qpts = 100
        else:
            num_pts = 1000000
            num_qpts = 10000
        div = 1.0 / 1000.0
        pts = np.random.rand(num_pts, 3) / div
        pts_int = pts.astype(np.int32)

        qpts = np.random.rand(num_qpts, 3) / div
        qpts_int = qpts.astype(np.int32)

        codes = pcu.morton_encode(pts_int)
        codes_sort_idx = np.argsort(codes)
        codes_sorted = codes[codes_sort_idx]

        qcodes = pcu.morton_encode(qpts_int)

        nn_idx = pcu.morton_knn(codes_sorted, qcodes, 7)
        codes_sorted[nn_idx]
        self.assertEqual(nn_idx.shape, (num_qpts, 7))
コード例 #2
0
    def test_morton_coding_tiny_data(self):
        import point_cloud_utils as pcu
        import numpy as np
        div = 1.0 / 1000.0
        pts = np.random.rand(10, 3) / div
        pts_int = pts.astype(np.int32)

        qpts = np.random.rand(10000, 3) / div
        qpts_int = qpts.astype(np.int32)

        codes = pcu.morton_encode(pts_int)
        codes_sort_idx = np.argsort(codes)
        codes_sorted = codes[codes_sort_idx]

        qcodes = pcu.morton_encode(qpts_int)

        nn_idx = pcu.morton_knn(codes_sorted, qcodes, 15)
        codes_sorted[nn_idx]
        self.assertEqual(nn_idx.shape, (10000, 10))
コード例 #3
0
import numpy as np
from mayavi import mlab
from scipy.spatial import cKDTree
k = 50

div = 1.0 / 1000.0
pts = (np.random.rand(10_000, 3) / div).astype(np.int32)
qpts = (np.random.rand(100, 3) / div).astype(np.int32)
pts[:, 2] = 0.0
qpts[:, 2] = 0.0

codes = pcu.morton_encode(pts)
codes_sorted_idx = np.argsort(codes)
codes_sorted = codes[codes_sorted_idx]

qcodes = pcu.morton_encode(qpts)

nn_idx = pcu.morton_knn(codes_sorted, qcodes, k)
nn_pts = pcu.morton_decode(codes_sorted[nn_idx[0]])

kdt = cKDTree(pts)
_, nn_gt_idx = kdt.query(np.array([qpts[0]]), k=k)
print(nn_gt_idx.shape)
nn_gt_pts = pts[nn_gt_idx[0]]

mlab.points3d(pts[:, 0], pts[:, 1], pts[:, 2], scale_factor=5.0)
mlab.points3d([qpts[0, 0]], [qpts[0, 1]], [qpts[0, 2]], scale_factor=7.0, color=(1.0, 0.0, 0.0))
mlab.points3d(nn_pts[:, 0], nn_pts[:, 1], nn_pts[:, 2], scale_factor=9.0, color=(0.0, 0.0, 1.0), opacity=0.5)
mlab.points3d(nn_gt_pts[:, 0], nn_gt_pts[:, 1], nn_gt_pts[:, 2], scale_factor=9.0, color=(0.0, 1.0, 0.0), opacity=0.5)
mlab.show()
コード例 #4
0
qpts = np.random.rand(10_000, 3) / div
qpts_int = qpts.astype(np.int32)

init_time = time.time()


codes = pcu.morton_encode(pts_int, sort=False)
codes_time = time.time()

idxs = np.argsort(codes)
sort_time1 = time.time()
codes = codes[idxs]
sort_time2 = time.time()

qcodes = pcu.morton_encode(qpts_int)
qcodes_time = time.time()

nn_idx = pcu.morton_knn(codes, qcodes, k=20)
knn_time = time.time()

print(nn_idx.shape)

print("Timing results: ")
print("  Init time %f ms" % (1000 * (init_time - start_time)))
print("  Codes time %f ms" % (1000 * (codes_time - init_time)))
print("  Sort time 1 %f ms" % (1000 * (sort_time1 - codes_time)))
print("  Sort time 2 %f ms" % (1000 * (sort_time2 - sort_time1)))
print("  QCodes time %f ms" % (1000 * (qcodes_time - sort_time2)))
print("  KNN time %f ms" % (1000 * (knn_time - qcodes_time)))
コード例 #5
0
# Lots of data
div = 1.0 / 1000.0
pts = np.random.rand(1_000_000, 3) / div
pts_int = pts.astype(np.int32)

qpts = np.random.rand(10_000, 3) / div
qpts_int = qpts.astype(np.int32)

codes = pcu.morton_encode(pts_int)
codes_sort_idx = np.argsort(codes)
codes_sorted = codes[codes_sort_idx]

qcodes = pcu.morton_encode(qpts_int)

nn_idx = pcu.morton_knn(codes_sorted, qcodes, 7)
codes_sorted[nn_idx]
print("0 --------------------------------")
print(nn_idx.shape)
print(nn_idx)
print("\n")

# 1nn
div = 1.0 / 1000.0
pts = np.random.rand(1_000_000, 3) / div
pts_int = pts.astype(np.int32)

qpts = np.random.rand(10_000, 3) / div
qpts_int = qpts.astype(np.int32)

codes = pcu.morton_encode(pts_int)