# 카메라 캘리브레이션

카메라 캘리브레이션은 Aruco나 Chessboard 등의 pose estimation에서 필수적으로 요구되는 Camera Matrix와 Distortion Coefficients를 추출하기 위해 필요한 작업입니다.

핸드아이 캘리브레이션을 수행 시, Aruco 보드를 사용하기 때문에 반드시 카메라 캘리브레이션이 선행되어야 합니다.

## 카메라 캘리브레이션 화면 진입

카메라 캘리브레이션은 카메라 커넥터의 파라미터 메뉴를 선택해서 시작할 수 있습니다. (마우스 더블클릭)

![camera calibration](../images/camera-calibration-entering.png 'entering camera parameter menu')

[connection 페이지로 가기](/connection)

카메라 파라미터 메뉴에서 아래와 메뉴 선택을 통해서 캘리브레이션 모드에 진입합니다.

![camera parameter](../images/camera-calibration-menu.png 'camera parameter menu')

카메라 캘리브레이션 화면에서 `Calibrate` 버튼을 눌러서 카메라 캘리브레이션 모드로 진입합니다.

![camera calibration dialog](../images/camera-calibration-dialog.png 'camera parameter menu')

## 카메라 캘리브레이션 방법

카메라 캘리브레이션 모드 진입하면 다음과 같이 카메라 영상이 표시됩니다.

![camera calibration main](../images/camera-calibration-main.png 'camera parameter main')

카메라 캘리브레이션에서 사용하는 Chessboard는 아래 링크를 통해서 다운로드 받습니다.

[Camera Calibration Download](https://github.com/aidoop/object-tracker-python/raw/master/data/ChessBoard.pdf)

카메라 캘리브레이션 모드에서는 체스 보드를 다양하게 움직이면서 화면을 저장하고 저장된 화면들을 이용해서 카메라 캘리브레이션의 목적인 Camera Matirx와 Distortion Coefficient를 산출합니다.

---

카메라 캘리브레이션을 수행하기 위한 단축키는 다음을 참조합니다.  
<br/><br/>

- `C` : 화면을 캡처해서 저장합니다.
- `G` : 현재까지 저장된 화면들을 통해서 카메라 캘리브레이션의 결과물을 산출합니다.
- `Q` : 카메라 캘리브레이션을 종료합니다.

---

Chessboard가 포함된 화면을 `C`키를 이용해서 20장 정도의 영상을 캡처하고 최종적으로 `G`키를 통해서 카메라 캘리브레이션 데이터를 산출합니다.

`G`키 입력 후 'Success'가 표시될 경우, 정상적으로 수행되었으며 `Q`키를 통해서 종료하면 다음과 같이 산출된 데이터가 표시되는 것을 확인할 수 있습니다.

![camera calibration result](../images/camera-calibration-result.png 'camera parameter result')

`G`키 입력 후 'Fail'이 표시될 경우, 캡처한 영상이 흔들려서 찍혔거나 할 경우 카메라 캘리브레이션의 결과물의 정확도가 낮을 경우 발생합니다. 이 경우에는 `Q`키를 통해서 종료하고 다시 카메라 캘리브레이션 모드로 진입해서 카메라 캘리브레이션 작업(`C` 키를 통한 캡처와 `G`키를 통한 결과물 산출)을 재수행합니다.

## 카메라 캘리브레이션 데이터 저장

카메라 캘리브레이션 모드에서 정상적으로 카메라 캘리브레이션 작업이 완료되었을 경우 해당 데이터를 반드시 저장해야 합니다. 저장하지 않은 상태에서 진행될 경우 현재 카메라 캘리브레이션 데이터가 사라지기 때문에 반드시 저장을 수행합니다.

![connector parameters save](../images/connector-save.png 'connector parameters save')

## 카메라 캘리브레이션 데이터 적용

카메라 캘리브레이션 데이터를 저장까지 되었으면 데이터는 보관되지만 변경된 데이터를 적용하기 위해서는 다음과 같이 카메라 커넥터를 재연결해야 합니다.
재연결은 아래 그림의 커넥터의 링크 부분을 재연결(끊었다가 다시 연결)해 주면 됩니다.

![connector parameters apply](../images/connector-link.png 'connector parameters apply')

## 카메라 캘리브레이션 주의 사항

1. 카메라 캘리브레이션에 필요한 화면은 약 20장 정도를 캡처합니다.
2. 체스 보드는 보드 전체가 화면에 보이도록 캡처해야 합니다. 일부 보드가 가려질 경우 해당 영상은 카메라 캘리브레이션에 사용되지 않습니다. 또한, 손이나 다른 물체에 의해서 체스 보드가 가려지지 않도록 해야 합니다.
3. 동일한 포즈를 반복하기 보다는 다양한 포즈를 캡처해야 합니다. 화면을 기울이거나 회전해서 다양하게 포즈가 인식될 수 있도록 합니다.
