RAP / dataset_process /utils /plot_voxel_size.py
YuePanEdward's picture
Squash history: release superseded example-data blobs
be88765
Raw History Blame Contribute Delete
1.24 kB
"""
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()