惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
The GitHub Blog
The GitHub Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
GbyAI
GbyAI
博客园_首页
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
T
The Blog of Author Tim Ferriss
The Cloudflare Blog

博客园 - 太一吾鱼水

室内物体语义类别 开放词汇分割 产权 图像和点云 安装MySQL8 大模型的能力 WSL使用 PyVista 知识图谱构建 Karpathy四大原则 AI问答:向量数据库本地化存储的方案? ArcGIS Pro连接PostgreSQL空间数据库 向量数据库与嵌入模型 Agent设计模式:Plan-and-Execute 氛围编程的一些体会 Agent Skills [AdvaGIS] 预测农作物产量 图片赋色方法学习 Claude code安装与GLM模型配置 ArcGIS Pro开发学习 视觉基础模型DINOv3 aliceVision_utils_split360Images 立体相机标定 SAM3使用 古建筑学习 ContextCapture无人机影像与激光点云融合建模感受 Randla-Net深入理解 ROC、PR曲线绘制 Zero-Shot、One-Shot、Few-Shot概念 损失曲线出现先下降后上升
点云密度计算
太一吾鱼水 · 2026-04-07 · via 博客园 - 太一吾鱼水
 1 def _compute_density_stats(values: np.ndarray) -> dict:
 2     """Compute summary statistics for a density array."""
 3     return {
 4         "mean": float(np.mean(values)),
 5         "std": float(np.std(values)),
 6         "min": float(np.min(values)),
 7         "max": float(np.max(values)),
 8         "median": float(np.median(values)),
 9         "percentile_5": float(np.percentile(values, 5)),
10         "percentile_25": float(np.percentile(values, 25)),
11         "percentile_75": float(np.percentile(values, 75)),
12         "percentile_95": float(np.percentile(values, 95)),
13     }
14 
15 
16 def _density_knn(pcd: o3d.geometry.PointCloud, k: int) -> np.ndarray:
17     """KNN-based density: k / volume_of_sphere(r_k)."""
18     kdtree = o3d.geometry.KDTreeFlann(pcd)
19     points = np.asarray(pcd.points)
20     n = len(points)
21     densities = np.zeros(n, dtype=np.float64)
22 
23     for i in range(n):
24         _, idx, dists_sq = kdtree.search_knn_vector_3d(pcd.points[i], k + 1)
25         neighbor_dists = np.sqrt(np.array(dists_sq[1:], dtype=np.float64))
26         r_k = neighbor_dists[-1]
27         if r_k > 1e-10:
28             volume = (4.0 / 3.0) * np.pi * (r_k**3)
29             densities[i] = k / volume
30 
31     return densities
32 
33 
34 def _density_radius(pcd: o3d.geometry.PointCloud, radius: float) -> np.ndarray:
35     """Radius-based density: count of neighbors within fixed radius."""
36     kdtree = o3d.geometry.KDTreeFlann(pcd)
37     n = len(pcd.points)
38     densities = np.zeros(n, dtype=np.float64)
39 
40     for i in range(n):
41         count, _, _ = kdtree.search_radius_vector_3d(pcd.points[i], radius)
42         densities[i] = count - 1
43 
44     return densities
45 
46 
47 def _density_voxel(pcd: o3d.geometry.PointCloud, voxel_size: float) -> np.ndarray:
48     """Voxel-based density: points in enclosing voxel / voxel_volume."""
49     points = np.asarray(pcd.points)
50     voxel_indices = np.floor(points / voxel_size).astype(np.int64)
51 
52     voxel_keys = (
53         voxel_indices[:, 0].astype(np.int64) * 73856093
54         ^ voxel_indices[:, 1].astype(np.int64) * 19349663
55         ^ voxel_indices[:, 2].astype(np.int64) * 83492791
56     )
57 
58     counts = Counter(voxel_keys.tolist())
59     voxel_volume = voxel_size**3
60     densities = np.array([counts[k] / voxel_volume for k in voxel_keys], dtype=np.float64)
61     return densities