구름점에서 실시간 평면으로 검측하면

개시하다


평면 검측은 여러 가지 용도로 쓰인다.
XR의 바닥면, 벽면 검측을 위한 것으로 지도 제작을 위한 것으로 인공물의 3차원 재구성을 위한 것이다.
최근에는 OSS와 라이브러리 등을 통해 간단하게 평면 체크를 할 수 있다.
하지만 입력이 제한돼 맞춤형으로 만들려면 스스로 실행해야 하는 경우도 있죠.
이번에 우리는 3차원 점운만 입력했고 다음과 같은 평면 검측을 실시간으로 할 수 있는 논문 몇 편을 소개했다.
  • Fast plane extraction in organized point clouds using agglomerative hierarchical clustering
  • 먼저 구현 결과(REALSENSE D 435로 촬영)



    수법 설명


    논문에서 평면 검측은 다음과 같은 3단계에 따라 처리한다
  • INITGRAPH
    평면에서 얻은 데이터 구조 구축
  • AHCLUSTER
    거친 평면 체크
  • REFINE
    세밀화 거친 평면
  • 1. INITGRAPH (Graph Initialization)


    프로세스 개요


    검색을 간소화하거나 처리 시간을 단축하기 위해 아래 절차에 따라 데이터 구조를 만드십시오
    ① 3D 점 구름을 2D로 그룹화(node화)
    ②결손과 깊이가 부정확한 node 제거
    ③ 노드 간의 연결 관계 얻기

    세부 사항 처리


    ① 3D 점 구름을 2D로 그룹화
  • 스마트폰이나 센서를 통해 얻은 점구름을 심도 있는 정보를 제외한 2D 공간에 배치한다.포커스에서 2D 이미지를 처리하는 이미지
  • 픽셀 간격으로 그룹화
    ※ 이 한 요소를'노드'라고 합니다.다음 그림은 10입니다.×10으로 조를 나누다

  • ②결손과 깊이가 부정확한 node 제거

  • 다음 조건에 부합되는 node 제거
  • 누락된 데이터 포함
  • 노드의 점 구름을 평면적으로 근사화할 때 MSE(Mean Squared Error)가 어느 정도 이상
    ※ 평면 근사는 PCA로 간단
  • node내의 어떤 점을 주목할 때 주위 4점의 깊이와 일정한 이상 차이가 있다
  • 제거된 node를 검은색으로 표시해 주세요.

    ③ 노드 간의 연결 관계 얻기

  • 다음 조건이 충족되면 node 간의 초기 연결 관계가 연결되어 있음을 판단하고
  • 자신을 포함한 상하좌우 인접 노드를 제거한 노드가 아니다
  • 상하 인접 node 사이 및 좌우 인접 node 사이의 평면의 법선으로 구성된 각 일정 이내
  • 연결 관계를 백선으로 표시하다

    2. AHCLUSTER(Agglomerative Hierarchical Clustering)


    프로세스 개요


    ① 고속 처리를 위해 예비처리를 통해 더미를 구축한다
    ② 노드의 연관 관계에 따라 노드 간의 결합

    세부 사항 처리


    ① 고속 처리를 위해 예비처리를 통해 더미를 구축한다
  • 평면 근사 MSE의 오름차순으로 node더미
  • 구축
    ② 노드의 연관 관계에 따라 노드 간의 결합

  • 제작된 더미가 비기 전에 다음과 같이 처리한다.
  • 더미에서 노드 꺼내기
  • 꺼낸 node와 연결된 node를 하나씩 병합을 시도합니다. 병합할 때 평면은 MSE와 비슷하고 가장 작은 node를 병합합니다.
    ※ 연결 노드가 1개도 없을 경우 병합에 실패하면 아래 처리
  • 합병 node의 평면 근사 MSE가 일정 이상일 때 합병 실패로 다음과 같은 처리를 한다
  • 합병 전의 노드가 일정 이상의 점구름을 포함한다면 합병 전의 node를 평면으로 추출한다
  • 합병 전 노드가 가진 모든 연결 관계 제거
  • 병합 전 노드 제거
  • node의 평면이 MSE와 비슷하면 합병에 성공하여 다음과 같은 처리를 한다
  • 합병된 두 노드는 각각 가지고 있는 연결 관계를 합병 노드
  • 에 계승한다
  • 합병 전의 노드를 더미에서 제거
  • 통합 노드를 더미에 저장
  • 처리된 결합 node를 node 단위로 음영처리하여 표시합니다.

    3. REFINE(Segmantation Refinement)


    프로세스 개요


    ①굵게 체크된 평면 모서리 제거
    ② 가장자리를 제거한 평면의 가장자리에서 node가 아닌 체크 아웃되지 않은 영역으로 평면 영역 확장
    ③ 포인트 업데이트된 node 간의 연관 관계에 따라 "2.AHCLUSTER"를 다시 실시하고 node를 병합

    세부 사항 처리


    ①굵게 체크된 평면 모서리 제거
  • 2.에서 추출한 모든 평면은 다음과 같이 처리됩니다.
  • 추출 평면에 포함된 초기 node(합병 전 node)로 평면에서 평면 경계에 해당하는 node를 제거한다(모든 상하좌우가 서로 인접한 node 상태가 아닌 node)
  • 상기 처리된 평면 경계를 구성하는 node의 모든 점을 대기열에 추가

  • ② 가장자리를 제거한 평면의 가장자리에서 node가 아닌 체크 아웃되지 않은 영역으로 평면 영역 확장
  • 대기열이 비어 있을 때까지 다음과 같이 처리한다.
  • 큐에서 체크 아웃
  • 꺼낸 점에 대해 상하좌우로 인접한 점 이하의 처리를 한다
  • 다음 조건 중 하나를 충족할 때 이 점의 처리를 끝내고 처리를 다음 점으로 옮깁니다.
  • 꺼낸 점과 같은 node(k)
  • 에 속한다
  • 동일한 Refine 포인트 클라우드에 속함(k)
  • node(k) 평면과 node(k) 평면의 거리가 node(k) 평면인 MSE× 9배 이상(왜 9배 이상인지 모르겠음)
  • 점이 다른refine점 구름에 속한다면(l)
  • 노드(k)와 노드(l)를 연결 관계
  • 로 설정합니다.
  • 또한 node(k) 평면과 점의 거리가 node(l) 평면과 점의 거리보다 작으면 다음과 같이 처리한다.
  • refine점 구름(l)에서 점을 삭제하고 점을refine점 구름(k)에 추가
  • 대기열에 추가
  • 점이 다른 refine 점 구름에 속하지 않으면 (l)
  • refine점 구름에 점 추가(k)
  • 대기열에 추가
  • ③ 포인트에 기초하여 업데이트된 node 간의 연관 관계를 다시'2.AHCLUSTER'를 실시하여 node를 통합
  • 모든 k의refine점 구름(k)을 node(k)에 추가
  • 업데이트된 node와 연결 상태에 대해'2.AHCLUSTER'를 다시 실시하고 node
  • 를 합병한다.
    이렇게 한 프레임의 처리가 완성되었다!!

    총결산

  • 논문은 kinet을 이용하여 카메라의 성능에 의존하는heuristic 파라미터를 이용했지만 REALSENSE D 415도 기본적으로 같은 파라미터로 설정하여 애니메이션과 같은 정밀도로 평면 검측을 할 수 있다
  • outlier에 어느 정도 장점이 있지만 카메라의 성능(특히 먼 곳)에 의존한다
  • CPU만 실시간으로 평면 감지
  • RGB 필요 없음
  • 논문을 상당히 친절하게 썼기 때문에 실현하기 쉽다
  • 최후


    사람과 물건을 데이터화하고 분석하고 싶은 사람.
    나는 3D 기술과 심층 학습을 결합하여 재미있는 서비스를 만들고 싶다이런 사람.
    우리 회사는 함께 일할 파트너를 크게 모집하고 있다.
    관심 있는 사람은 아래 링크에서 응모하세요!
    https://about.sapeet.com/recruit/

    참고 자료

  • Fast plane extraction in organized point clouds using agglomerative hierarchical clustering
  • 좋은 웹페이지 즐겨찾기