[ArUCo Marker] Intro

서대철·2023년 11월 16일

개요

ArUCo Marker는 OpenCV의 오픈소스 라이브러리로, 컴퓨터 비전 분야(증강현실, 로보틱스) 에서 널리 사용되는 피델리티 마커(fiducial marker)다. 다른 말로 특정한 패턴을 가진 마커를 컴퓨터가 식별해 위치와 방향을 파악할 수 있도록 도와주는 레퍼런스 마커인 셈이다.

흑백의 정사각형들이 NxN 크기의 고유한 패턴을 이루고 있어 QR코드와 유사하게 생겼다.

각각의 마커는 좌표 체계가 있어 컴퓨터가 물체의 위치와 3차원 상의 자세(pose)를 파악할 수 있게 해준다.


먼저 마커를 검출하고 4개 코너의 좌표를 구한다.


코너 좌표와 카메라 캘리브레이션을 통해 카메라 좌표계에서 3차원 자세를 추정한다.

사용법

  1. 개별 마커를 생성

  2. 고유한 마커들이 모여있는 딕셔너리 생성
    - 각 마커는 딕셔너리 내에서 고유한 ID를 가짐

  3. 마커 검출을 위한 파라미터 정의

    • openCV의 디폴트 값을 사용해도 무방
  4. 마커 검출

    • 코너(꼭짓점) 좌표 구하기
    • contour (등고선) 알고리즘의 활용
      - cv2.aruco.detectMarkers 함수 활용
  5. 3차원 자세 추정

  • cv2.aruco.estimatePoseSingleMarkers함수 활용
  • 필요한 파라미터: 1) 내부 카메라 행렬 2) 렌즈 왜곡 계수
    - 3차원 이미지(world 좌표계)를 2차원으로 변환(camera 좌표계)하는 과정에서의 오차를 최소화하기 위함 (=카메라 캘리브레이션)

camera calibration (보정)

카메라의 파라미터를 알면, 2D 이미지와 3D 세계 사이의 관계를 정확히 이해할 수 있다(=월드 좌표계를 카메라 좌표계로 변환). 이는 더욱 정확한 측정으로 이어진다.

카메라의 렌즈 왜곡, 내부 파라미터(예: 초점거리, 주요지점) 및 외부 파라미터(예: 카메라의 위치와 방향)를 정확하게 이해하고 조정해야 한다.

내부 카메라 행렬

  • 카메라 파라미터에 대한 3X3 행렬
  • 초점 거리, 이미지 중심 좌표, 축 사이의 기울기 등의 행렬

외부 카메라 행렬

  • 3X1 회전 행렬과 3X1 이동 벡터의 조합

카메라 보정 방법

카메라 보정은 대체로 다음과 같은 단계로 이루어진다.

  1. 보정 패턴 준비: 체스보드 패턴과 같은 표준화된 보정 패턴을 사용. 이 패턴은 카메라에 의해 쉽게 인식되고 분석될 수 있는 명확한 기하학적 특징을 가지고 있다.
    업로드중..

  2. 이미지 캡처: 다양한 각도와 거리에서 보정 패턴의 여러 이미지를 캡처. 이렇게 하여 카메라가 다양한 시나리오에서 보정 패턴을 어떻게 감지하는지 이해할 수 있.

  3. 파라미터 계산: 캡처된 이미지를 분석하여 카메라의 내부 및 외부 파라미터를 계산. 이 과정에서는 일반적으로 OpenCV와 같은 컴퓨터 비전 라이브러리를 사용(calibrateCamera 함수).

  4. 왜곡 교정: 계산된 파라미터를 사용하여 카메라의 렌즈 왜곡을 교정.

  5. 결과 검증: 보정된 카메라를 사용하여 추가 이미지를 캡처하고, 보정이 성공적으로 이루어졌는지 확인.


참고자료