shuishen
20 hours ago 385be2eca72eb3833efa4be0a0088b34e764788a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from __future__ import annotations
 
import sys
import json
import tempfile
import unittest
from pathlib import Path
 
import numpy as np
import open3d as o3d
 
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from prepare_multiview_point_features import FEATURE_NAMES, add_annotation_source_from_existing_dataset, photo_features, z_buffer_visible_indices  # noqa: E402
 
 
class MultiviewPointFeatureTests(unittest.TestCase):
    def test_z_buffer_keeps_nearest_point_per_two_pixel_cell(self) -> None:
        pixels = np.array([[2.0, 2.0], [3.0, 3.0], [8.0, 4.0]])
        depths = np.array([8.0, 2.0, 3.0])
        visible = z_buffer_visible_indices(pixels, depths, np.array([True, True, True]), width=10, cell_size=2)
        np.testing.assert_array_equal(visible, [1, 2])
 
    def test_photo_features_are_bounded_and_have_stable_contract(self) -> None:
        photo = np.array([[[0, 0, 0], [255, 0, 0]], [[0, 255, 0], [0, 0, 255]]], dtype=np.uint8)
        values = photo_features(photo)
        self.assertEqual(values.shape, (2, 2, len(FEATURE_NAMES)))
        self.assertTrue(np.isfinite(values).all())
        self.assertTrue(((values >= 0.0) & (values <= 1.0)).all())
 
    def test_annotation_source_preserves_dataset_order_and_original_rgb(self) -> None:
        with tempfile.TemporaryDirectory() as temp_dir:
            output = Path(temp_dir)
            xyz = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], dtype=np.float64)
            rgb = np.array([[0.1, 0.2, 0.3], [0.8, 0.7, 0.6]], dtype=np.float32)
            np.savez_compressed(output / "multiview-point-features.npz", xyz=xyz, las_rgb=rgb)
            (output / "run_metadata.json").write_text(json.dumps({"capability": "05-3d-pointcloud", "artifacts": {}}), encoding="utf-8")
 
            result = add_annotation_source_from_existing_dataset(output)
            source = output / "multiview-annotation-source.ply"
            cloud = o3d.io.read_point_cloud(str(source))
            metadata = json.loads((output / "run_metadata.json").read_text(encoding="utf-8"))
 
            self.assertEqual(result["point_count"], 2)
            np.testing.assert_allclose(np.asarray(cloud.points), xyz)
            np.testing.assert_allclose(np.asarray(cloud.colors), rgb, atol=1 / 255)
            self.assertEqual(metadata["annotation_source"]["point_count"], 2)
            self.assertEqual(metadata["annotation_source"]["point_cloud"], source.name)
            self.assertEqual(metadata["annotation_source"]["feature_dataset"], "multiview-point-features.npz")
 
 
if __name__ == "__main__":
    unittest.main()