File size: 1,240 Bytes
be88765
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Plot adaptive voxel size vs median_size.
"""

import numpy as np
import matplotlib
matplotlib.use("Agg")  # non-interactive backend for headless
import matplotlib.pyplot as plt


def _voxel_size(median_size: float, min_voxel: float = 0.0001, max_voxel: float = 0.5) -> float:
    """Same logic as compute_adaptive_voxel_size, without print."""
    log_size = np.log(np.maximum(median_size, 1e-6))
    xp = np.log([1e-6, 5.0, 150.0, 1000.0])
    fp = [200.0, 300.0, 600.0, 2000.0]
    divide_factor = float(np.interp(log_size, xp, fp, left=200.0, right=2000.0))
    adaptive = median_size / divide_factor
    return max(min_voxel, min(max_voxel, adaptive))


def main():
    median_sizes = np.linspace(0, 1000, 2000)
    voxel_sizes = [_voxel_size(m) for m in median_sizes]

    fig, ax = plt.subplots(figsize=(8, 5))
    ax.plot(median_sizes, voxel_sizes, "b-", linewidth=2)
    ax.set_xlabel("median_size (m)")
    ax.set_ylabel("voxel size (m)")
    ax.set_title("Adaptive voxel size vs median bounding box size")
    ax.grid(True, which="both", alpha=0.3)
    plt.tight_layout()
    out_path = "voxel_size_vs_median_size.png"
    plt.savefig(out_path, dpi=150)
    print(f"Saved: {out_path}")


if __name__ == "__main__":
    main()