상세 컨텐츠

본문 제목

[Open3D Tutorial] vertex normal estimation

AI/Open3D

by 쑤야. 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값 또는 반경의 선택은 포인트 클라우드의 특성, 특히 점의 밀도와 표면의 복잡도에 따라 다르므로 최적의 값을 선택하기 위해 실험적으로 조정하거나, 데이터의 특성에 맞게 설정하는 것이 중요하다

'AI > Open3D' 카테고리의 다른 글

[Open3D Tutorial] bounding volumes  (0) 2024.08.13
[Open3D Tutorial] point cloud distance  (0) 2024.08.13
[Open3D Tutorial] voxel downsampling  (0) 2024.08.12
[Open3D Tutorial] visualize point cloud  (0) 2024.08.12
Open3D  (0) 2024.08.12

관련글 더보기