Extrinsic calibration은 world coordinate와 Camera coordinate 혹은 그 반대의 경우를 수행하는 과정을 이해하는 방법이다.
Computer vision을 활용한 자율주행 분야에서 Extrinsic calibration은
1. Sensor fution을 위한 정보
2. Perception application을 위한 정보로 활용
위 두 응용 방법에 사용된다.
Extrinsic calibration은 센서의 종류나 수에 따라 많은 변수가 존재하기 때문에 목적에 따라 방법이 달라진다. 특히 센서 퓨전을 위해서는 각 센서의 Extrinsic parameter가 필요하다.
3차원 위치 정보를 복원할 수 있다.
3차원 공간을 2차원 공간으로 투영하는 과정을 역으로 이용하여 Extrinsic calibration을 수행한다.
자율주행 자동차의 경우 모든 정보들을 자동차 좌표계에 통일시킨다.
일반적으로 자동차 좌표계는 후륜 구동축의 중심 지면을 원점으로 한다(ISO8855 기준). 카메라의 경우 정면이 Z, 하단이 X, 수평이 Y로 구성된 좌표계를 갖는다.
그 외에도 LiDAR, GPS, IMU 등의 센서의 종류가 많아지면 이들 간에 좌표계를 통일 시켜주어야 한다.
def solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec=..., tvec=..., useExtrinsicGuess=..., flags: int = ...) -> typing.Any:
위 함수를 통해 Extrinsic parameter인 rvec와 tvec를 구할 수 있다. 다만 Intrinsic parameter가 필요하다.
def projectPoints(objectPoints, rvec, tvec, cameraMatrix, distCoeffs, imagePoints=..., jacobian=..., aspectRatio=...) -> typing.Any:
또한 위에서 구한 Extrinsic parameter를 이용하면 다른 센서에서 얻은 데이터들을 하나의 센서위에 그릴 수도 있다.
라이다는 직선의 링 형태로 위 아래로 동일한 간격으로 나타나기 때문에 calibration 과정에서 원 또는 마름포 현태의 물체를 이용한다.
카메라의 영역에 라이다를 투영하는 경우 뒤쪽에서 수집된 데이터가 이미지 영역에 투영될 수 있다. 이 경우에는 음수로 나타나는 데이터 포인터는 무시하는 방법으로 문제를 해결할 수 있다.
또한 라이다와 카메라의 시점에 차이에 의해서 카메라에는 보이지 않지는 물체의 정보를 라이다가 수집할 수 있다. 이러한 경우 가장 가까이에 있는 물체 정보만 사용하여 필터링 하는 방법으로 해결할 수 있다.