본문 바로가기

Computer Vision/3D Reconstruction

(1) Camera calibration

 우리가 보고 있는 세상은 3차원이지만 카메라로 이것을 찍으면 2차원의 이미지로 변하게 된다. 이 이미지는 사용된 렌즈, 렌즈와 이미지 센서와의 거리, 렌즈와 이미지 센서가 이루는 각도 등의 요인에 의해 크게 영향을 받아 왜곡이 생기게 된다. 따라서 2차원의 이미지로부터 3차원 공간 좌표를 복원할 때에는 이러한 왜곡을 제거해야 제대로 된 계산이 가능해지고 이러한 내부 요인의 파라미터 값을 구하는 과정을 Camera calibration이라고 한다.

 

 왜곡을 보정하기 위해서는 dist(distortion coefficient), K(Camera intrinsic parameter)를 찾아야 하고 이러한 파라미터들을 찾기 위해선 체스판(잘 정의된 패턴)이 이용된다. 이미지에서 특정한 점들 즉, 체스판의 사각형 모서리를 찾는다. 우리는 실제 공간에서의 좌표를 알고, 이미지 상에서의 좌표 또한 알고 있기 때문에 이러한 데이터들로 우리가 필요한 정보들을 얻을 수 있다.

 

 

 

 

 Camera calibration을 하기 위해 다양한 각도에서 찍은 6개의 체스판을 이용했다. camera calibration을 위해 필요한 중요한 입력 데이터는 실제 3D 포인트의 집합과 이와 일치하는 2D 이미지 포인트들이고 2D 이미지 포인트는 이미지에서 찾기 쉽다.

 실제 3D 포인트들에 대해서는 이미지들은 가만히 있는 카메라와 매번 다른 방향과 위치에 놓인 체스판으로 생각할 수 있다. 그래서 (X,Y,Z) 값을 알아야 하고 간단하게 체스판을 변동이 없는 XY 평면에 존재한다고 하면 역으로 카메라가 움직인다고 생각할 수 있다. 이러한 조건이 X,Y 값을 찾는데 도움이 되고 체스판의 정사각형의 크기를 알면 점들의 위치를 X,Y값으로 전달할 수 있다.

 

 내가 사용한 체스판의 격자는(Grid number) 9x6이고 체스판 정사각형의 크기는(Grid size) 24mm이다. 체스판의 패턴을 찾기 위해 cv2.findChessboardCorners() 함수를 이용했고 이 함수는 코너 포인트들과 패턴을 보유하고 있으면 True값을 가지는 retvalreturn한다. retvalTrue값이면 실제 3D 포인트들과 2D 이미지 포인트들을 저장하도록 코드를 작성했다.

 위 과정으로 실제 3D 포인트들, 2D 이미지 포인트들을 구했기 때문에 이 포인트들과 cv2.calibrateCamera() 함수를 이용해 K(Camera intrinsic parameter), dist(distortion coefficient)을 구할 수 있었다.

 이제 왜곡을 없애는 것이 가능한데 사용됐던 이미지와 cv2.getOptimalNewCameraMatrix() 함수를 이용해 왜곡되지 않은 K_undist(Camera intrinsic parameter of undistorted image)를 구할 수 있었다.

 

Calibration: K matrix

[[222.68894751 0. 150.93161905]

[ 0. 222.23567538 111.57337274]

[ 0. 0. 1. ]]

 

Calibration: distortion coefficients

[[ 0.35223302 -1.44563297 -0.00240822 0.00337601 2.05751771]]

 

Calibration: Undistorted K matrix

[[231.80853271 0. 151.087836 ]

[ 0. 227.66667175 110.68906038]

[ 0. 0. 1. ]]

 

Camera calibration example

 

Chess pattern

 

Undistored image

 

'Computer Vision > 3D Reconstruction' 카테고리의 다른 글

(5) Source Code  (1) 2021.08.11
(4) 3D Reconstruction  (0) 2021.08.11
(3) Stereo matching  (0) 2021.08.11
(2) Undistortion of stereo images  (0) 2021.08.11