AI/Open3D
[Open3D Tutorial] vertex normal estimation
쑤야.
2024. 8. 12. 20:11
Vertex normal estimation
코드를 살펴보기 전 normal vector에 대해서 먼저 간략하게 찾아보았다.
법선 벡터(normal vector)
- 3D 공간에서 포인트 클라우드 표면의 방향을 나타내는 데 사용
- 표면 재구성, 특징 추출, 매칭 등 다양한 3D 데이터 처리 작업에서 중요한 역할
import open3d as o3d
ply_point_cloud = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(ply_point_cloud.path)
print("downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
#####################################################
print("Recompute the normal of the downsampled point cloud")
downpcd.estimate_normals(
search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)
)
o3d.visualization.draw_geometries(
[downpcd],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024],
point_show_normal=True
)
estimate_normals
- 주어진 포인트 클라우드의 각 점에서 주변 이웃점을 기반으로 법선 벡터를 계산
- 주로 kNN 또는 반경 기반 검색(radius based search)을 사용하여 이웃점을 찾는다
- k 개의 가까운 이웃점을 검색하여 법선을 추정하는데, k 값 설정 가능
- 각 점에서 반경 r 내의 이웃점을 검색하여 법선을 추정하는데, r 값 설정 가능
- 법선 벡터는 이웃점들의 공분산 행렬의 주성분 분석(PCA)를 통해 계산되며, 가장 작은 고유값에 해당하는 고유벡터가 법선 벡터로 사용된다
- 이때 법선 벡터는 보통 포인트 클라우드 표면의 지역적인 평면을 나타낸다
k-NN 기반 이웃 선택의 영향
- k 값이 작은 경우
- 정확한 세부 정보 유지: 국소(지역)적인 정보에 집중하여 작은 표면의 세부 사항을 잘 유지할 수 있다
- 노이즈 민감: 작은 불규칙성이나 오류가 법선 벡터에 과도한 영향을 줄 수 있다
- 법선 방향 불안정: 작은 이웃점 집합은 안정적인 법선 벡터 추정을 어렵게 만들 수 있으며, 결과적으로 법선 벡터의 방향이 불안정해질 수 있다
- k 값이 큰 경우
- 노이즈 저항성 증가: 법선 벡터가 더 부드럽고 안정적으로 추정된다
- 세부 정보 손실: 지역적인 특징보다 전반적인 표면의 형태를 따른 경향이 강해져 작은 표면의 세부 정보나 날카로운 모서리 등을 놓칠 수 있다
- 계산 비용 증가: 더 많은 이웃점들을 고려하므로 계산 비용이 증가할 수 있다
반경 기반 검색(radius-based search)의 영향
- 반경이 작은 경우
- 지역적인 세부 정보 유지: 매우 좁은 범위 내의 점들만 포함되므로 국소적인 표면의 세부 사항을 잘 유지할 수 있다
- 이웃점 부족 가능성: 포인트 클라우드가 불균일하게 분포되어 있거나 밀도가 낮은 경우, 선택된 반경 내에 충분한 이웃점이 포함되지 않아 법선 벡터를 정확하게 추정하지 못할 수 있다
- 노이즈 민감
- 반경이 큰 경우
- 법선 벡터 안정성 증가: 큰 반경을 설정하면, 더 넓은 범위의 점들을 평균내어 계산하기 때문에 법선 벡터가 더 안정적이고 부드럽게 추정된다
- 세부 정보 손실: 지역적인 표면 특성이 무시되고, 전체적인 표면의 방향을 따르게 되어 작은 구조나 디테일이 사라질 수 있다
- 계산 비용 증가: 이웃점의 수가 많아져 계산 비용이 증가할 수 있다
따라서 적절한 k값 또는 반경의 선택은 포인트 클라우드의 특성, 특히 점의 밀도와 표면의 복잡도에 따라 다르므로 최적의 값을 선택하기 위해 실험적으로 조정하거나, 데이터의 특성에 맞게 설정하는 것이 중요하다