python

Open3d - Hidden Point Removal (+논문리뷰)

J-Mook 2021. 9. 7. 14:06
반응형

HPR (Hidden Point Removal)

open3d 라이브러리에서 제공하는 기능으로 hidden_point_removal이 있다.
입력 변수로 시점과 구의 반경(R)을 받아 picking simulator의 기능인 정해진 시점에서 볼 수 있는 point들을 골라 주는 기능을 한다.
해당 기능은 이 논문을 바탕으로 제작되었으며, 라이브러리의 내장 함수인 만큼 매우 빠른 연산속도를 보인다. 하지만 모든 point를 하나씩 모두 찍어보는 raycast 방식에 비해 다소 정확도가 떨어지는 단점이 있다.

diameter = np.linalg.norm(np.asarray(ply.get_max_bound()) - np.asarray(ply.get_min_bound()))
_, pt_map = ply.hidden_point_removal(user sight,diameter * HPR_parameter)
ply = ply.select_by_index(pt_map)

(user sight : 바라볼 시점, diameter : 바운딩박스 크기로 계산된 반지름, HPR_parameter : 사용자 조정 파라미터)

간단한 논문리뷰

논문에서 사용한 hidden point remove 방식은 convex hull 알고리즘을 사용하여 만들어졌다. 형상을 구면뒤집기(spherical flipping) 하여 판단에 사용한다. 구면 뒤집기를 할 구의 반지름 R이 파라미터로 주어진다.

구면뒤집기한 형상의 포인트간 각도(βj+βk)에 따라 (기준 180도) visible point와 hidden point를 판별하게 되는 방식으로 알고리즘이 작동한다.

본 논문에서도 이를 인지하고 있고, 논문의 실험에서는 약 2%의 한계오차가 발생하였다.

R에 따른 오차율 (갈색 세로선 : 자동으로 튜닝된 결과)

실험결과

Raycast HPR

 

테두리 영역 근처에 오차가 발생하는 것을 확인할 수 있다.

 

image

 

위의 실험 결과와 같이 오차가 발생하는 문제가 있지만, 약 117.6배 정도의 우수한 연산속도를 보인다.

 

HIGH Parameter(Radius) LOW Parameter(Radius)

 

해당 함수의 파라미터로 radius를 입력 받게 되는데 해당 변수를 조정할 수 있다. 이 파라미터를 높히면 테두리에서 발생되는 오류가 줄어들지만, 안쪽면의 points도 같이 검출되는 부작용이 존재하고, 파라미터를 낮추면 해당 현상을 없어지지만, 테두리 주위의 점들이 검출되지 않는 현상이 발생된다.

이를 기존의 방식과 복합적으로 사용하여, HPR의 파라미터를 높혀 약간의 안쪽 면까지 검출되지만 테두리 영역의 신뢰도를 높히고, 해당 데이터를 기존의 알고리즘에 적용하여 안쪽 면을 제거하는 방식으로 진행하여 약 3배 정도의 성능향상을 확인 하였다.

 

65000 points
21000 points
15000 points

 

예시로 전체 65000개의 point에서 HPR로 21000개 정도로 point로 필터링한 후, 기존 알고리즘을 적용하여 최종적으로 15000개의 point가 검출 되는 것을 확인 할 수있다.

 

  • 전체 연산시간 비교

image

)

katz_tal_basri_-_direct_visibility_of_point_sets.pdf
2.63MB

반응형