์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์ (Camera Calibration)
์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์ (camera calibration)์ ์นด๋ฉ๋ผ์ ๋ฌผ๋ฆฌ์ ํน์ฑ์ ์ดํดํ๊ณ , ์ด๋ฅผ ํตํด 3D ๊ณต๊ฐ์์์ ๋ฌผ์ฒด์ ์์น๋ ํํ๋ฅผ ์ ํํ๊ฒ ์ถ์ ํ๊ธฐ ์ํ ๊ณผ์ ์ด์์. ์ด ๊ณผ์ ์ ์นด๋ฉ๋ผ๊ฐ ์ฐ์ 2D ์ด๋ฏธ์ง์ ์ค์ 3D ์๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ํํ๊ฒ ๋ชจ๋ธ๋งํ๊ณ , ์ด๋ฏธ์ง์์ ์๊ณก๋ ๋ถ๋ถ์ ๋ณด์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์ ์ ์ฃผ์ ๊ณผ์ ์ ๋ด๋ถ ํ๋ผ๋ฏธํฐ์ ์ธ๋ถ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ ํ๋ ๊ฒ์ธ๋ฐ, ์ด๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ฆ ์๊ณก์ ์์ ํ๊ณ ์นด๋ฉ๋ผ ์์น๋ฅผ ์ถ์ ํ ์ ์์ด์.
1. ์นด๋ฉ๋ผ ๋ด๋ถ ํ๋ผ๋ฏธํฐ (Intrinsic camera parameters)
1.1. ์ด์ ๊ฑฐ๋ฆฌ(focal length)
- ์นด๋ฉ๋ผ ๋ ์ฆ์ ์ด์ ๊ฑฐ๋ฆฌ๋ก, ์ด๋ฏธ์ง ์ผ์(CCD, CMOS ๋ฑ)์ ๋ ์ฆ ์ฌ์ด์ ๊ฑฐ๋ฆฌ
- ์นด๋ฉ๋ผ ๋ชจ๋ธ์์ ์ด์ ๊ฑฐ๋ฆฌ(f)๋ ํฝ์ ๋จ์๋ก ํํ(์์์์์ ๊ธฐํํ์ ํด์์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํจ)
- ์ฃผ๋ก fx, fy๋ก ํํ
- fx,fy๊ฐ ๋ฐ๋ก ์๋ ์ด์ ๋ ์ด๋ฏธ์ง ์ผ์์ ๋ฌผ๋ฆฌ์ ์ธ ์ ๊ฐ๊ฒฉ์ด ๊ฐ๋ก ๋ฐฉํฅ๊ณผ ์ธ๋ก ๋ฐฉํฅ์ด ์๋ก ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ
1.2. ์ฃผ์ (principal point)
- ์ด๋ฏธ์ง ์ผ์์ ์ค์ฌ์ ์ผ๋ก, ๋ณดํต ์ด๋ฏธ์ง์ ์ค์ฌ๊ณผ ์ผ์นํจ
- ์นด๋ฉ๋ผ ๋ ์ฆ์ ์ค์ฌ์์ ์ด๋ฏธ์ง ์ผ์์ ๋ด๋ฆฐ ์์ ์ ๋ฐ์ ์์ ์ขํ
- ์์ ์ค์ฌ์ ๊ณผ๋ ๋ค๋ฅธ ์๋ฏธ (์นด๋ฉ๋ผ ์กฐ๋ฆฝ๊ณผ์ ์์ ๋ ์ฆ์ ์ด๋ฏธ์ง ์ผ์๊ฐ ์ํ์ด ์ด๊ธ๋ ์ ์๊ธฐ ๋๋ฌธ)
- ์ฃผ๋ก cx, cy๋ก ํํ
1.3. ์๊ณก ๊ณ์(distortion coefficients)
- ๋ ์ฆ ์๊ณก์ผ๋ก ์ธํ ์ด๋ฏธ์ง ์๊ณก์ ๋ํ๋ด๋ ํ๋ผ๋ฏธํฐ
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐฉ์ฌ ์๊ณก(radial distortion)๊ณผ ์ ์ ์๊ณก(tangential distortion)์ผ๋ก ๋๋ ์ ์์
- ์์ฆ ์นด๋ฉ๋ผ๋ค์ ์ด๋ฌํ skew ์๋ฌ๊ฐ ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ ์นด๋ฉ๋ผ ๋ชจ๋ธ์์ ๋ณดํต ๋น๋์นญ ๊ณ์๊น์ง ๊ณ ๋ คํ์ง๋ ์์
- skew_c = tana
2. ์นด๋ฉ๋ผ ์ธ๋ถ ํ๋ผ๋ฏธํฐ (Extrinsic camera parameters)
์ธ๋ถ ํ๋ผ๋ฏธํฐ๋ ์นด๋ฉ๋ผ์ ์์น์ ๋ฐฉํฅ์ 3D ๊ณต๊ฐ์์ ์ ์ํ๋ฉฐ, ์ฃผ๋ก ํ์ ํ๋ ฌ๊ณผ ์ด๋ ๋ฒกํฐ๋ก ๊ตฌ์ฑ๋ผ์. ์ด ํ๋ผ๋ฏธํฐ๋ค์ ์๋ ์ขํ๊ณ์์ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก์ ๋ณํ์ ํํํ ์ ์์ฃ . ๋ํ ์นด๋ฉ๋ผ ์ธ๋ถ ํ๋ผ๋ฏธํฐ๋ ์นด๋ฉ๋ผ์ ์์น์ ๋ฐฉํฅ(6-DoF)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ณ ์๋ ์ขํ๊ณ๋ฅผ ์ด๋ป๊ฒ ์ ์ํ๋์ง์ ๋ฐ๋ผ์๋ ๋ฌ๋ผ์ง ์ ์์ด์.
2.1. ํ์ ํ๋ ฌ(Rotation matrix)
- ํ์ ํ๋ ฌ์ ์นด๋ฉ๋ผ์ ํ์ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ, ์๋ ์ขํ๊ณ์์ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก 3D ๊ณต๊ฐ์ ํ์ ์ํค๋ ์ญํ
- 3x3 ํฌ๊ธฐ์ ํ๋ ฌ๋ก ํํ๋๋ฉฐ, ์ด๋ฅผ ํตํด ์นด๋ฉ๋ผ๊ฐ ์๋ ์ขํ๊ณ์์ ์ด๋ป๊ฒ ํ์ ๋์ด ์๋์ง๋ฅผ ์ ์ ์์
2.2. ์ด๋ ๋ฒกํฐ(Translation vector)
- ์ด๋ ๋ฒกํฐ๋ ์นด๋ฉ๋ผ์ ์์น๋ฅผ ๋ํ๋ด๋ฉฐ, ์๋ ์ขํ๊ณ์์ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก์ ํํ ์ด๋์ ์ค๋ช
- 3D ๊ณต๊ฐ์์ ์นด๋ฉ๋ผ์ ์์ ์ ํน์ ์์น๋ก ์ด๋์ํค๋ ์ญํ
2.3. ์ธ๋ถ ํ๋ผ๋ฏธํฐ์ ํ์ฉ
2.3.1. ์๋ ์ขํ๊ณ์์ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก์ ๋ณํ
- ์๋ ์ขํ๊ณ์์ ์ฃผ์ด์ง 3D ์ Pw ๋ฅผ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก ๋ณํํ๋ ค๋ฉด, ์ธ๋ถ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ฐ์ด ๊ณ์ฐํ ์ ์์
- Pc๋ ์นด๋ฉ๋ผ ์ขํ๊ณ์์์ ํฌ์ธํธ ์์น์
2.3.2. ์นด๋ฉ๋ผ ์ขํ๊ณ์์ ์ด๋ฏธ์ง ํ๋ฉด์ผ๋ก์ ํฌ์
- ๋ณํ๋ ์ Pc๋ฅผ ์ด๋ฏธ์ง ํ๋ฉด์ผ๋ก ํฌ์ํ๋ ค๋ฉด, ๋ด๋ถ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฉ
- ์ด ๊ณผ์ ์ ์นด๋ฉ๋ผ ๋ชจ๋ธ์ ํต์ฌ์ด๋ฉฐ, ์ธ๋ถ ํ๋ผ๋ฏธํฐ๊ฐ ์ด ๊ณผ์ ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์ค์ํ ์ญํ ์ ์ํ
3. ์นด๋ฉ๋ผ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ ํ๋ ๋ฐฉ๋ฒ
3.1. ๋์์ ์ถ์ถ
์นด๋ฉ๋ผ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด์๋, 3D ๊ณต๊ฐ์ ์ ๋ค๊ณผ ์ด ์ ๋ค์ด 2D ์ด๋ฏธ์ง์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง๋ฅผ ๋ํ๋ด๋ ๋์์ ์ด ํ์ํด์. ์ด๋ฌํ ๋์์ ์ ์ป๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ๋ค์ด ์ฌ์ฉ๋ ์ ์์ด์.
- ์บ๋ฆฌ๋ธ๋ ์ด์ ํจํด ํ์ฉ: ์ฒด์ปค๋ณด๋๋ ์ํ ๊ทธ๋ฆฌ๋์ ๊ฐ์ ์บ๋ฆฌ๋ธ๋ ์ด์ ํจํด์ ์ฌ์ฉํ์ฌ, ๊ทธ ํจํด์ 3D ์ขํ์ 2D ์ด๋ฏธ์ง์์์ ์ขํ ๊ฐ์ ๋์์ ์ถ์ถ
- ํน์ง์ ๋งค์นญ: ์ด๋ฏธ์ง์์ ์ถ์ถํ ํน์ง์ ๋ค(์: ์ฝ๋, ์์ง ๋ฑ)์ 3D ๋ชจ๋ธ์ด๋ ๋ค๋ฅธ ์ด๋ฏธ์ง์ ํน์ง์ ๋ค๊ณผ ๋งค์นญํ์ฌ ๋์์ ์ ์ถ์ถ
- ์์ฐ ํ๊ฒฝ ํ์ฉ
- ์บ๋ฆฌ๋ธ๋ ์ด์ ํจํด ์์ด, ์ฃผ๋ณ ํ๊ฒฝ์ 3D ๊ตฌ์กฐ์ ์ด๋ฏธ์ง์์์ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์์ ์ ์ถ์ถํ ์๋ ์์
- ์ด ๊ฒฝ์ฐ, ์ฌ์ ์ ํ๊ฒฝ์ 3D ๋ชจ๋ธ์ด ํ์ํ๊ฑฐ๋ SLAM (Simultaneous Localization and Mapping)๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ด ํ์
3.2. ํ๋ผ๋ฏธํฐ ์ถ์
๋์์ ๋ค์ ์ป์ ํ, ์นด๋ฉ๋ผ์ ๋ด๋ถ ๋ฐ ์ธ๋ถ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ๋น์ ํ ์ต์ ํ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๋๋ฐ์. ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์์.
- ํํ ์นด๋ฉ๋ผ ๋ชจ๋ธ ์ ์ฉ: ๋์์ ๋ค์ ํตํด ์นด๋ฉ๋ผ์ ๊ธฐ๋ณธ ํฌ์ ๋ชจ๋ธ(ํํ ๋ชจ๋ธ)์ ์ ์ฉํ์ฌ 3D ์ขํ๊ฐ 2D ์ด๋ฏธ์ง๋ก ์ด๋ป๊ฒ ํฌ์๋๋์ง๋ฅผ ์ํ์ ์ผ๋ก ๋ชจ๋ธ๋ง
- ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ
- ํ๋ผ๋ฏธํฐ ์ถ์ ์ ๋ณดํต Levenberg-Marquardt ๊ฐ์ ๋น์ ํ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ํ๋จ
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ธ์ด ์์ธกํ 2D ์์น์ ์ค์ 2D ์ด๋ฏธ์ง์์ ์ธก์ ๋ ์์น ๊ฐ์ ์ค์ฐจ๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์
3.3. ์๊ณก ๋ณด์
์นด๋ฉ๋ผ ๋ ์ฆ์ ์๊ณก์ผ๋ก ์ธํด ์ด๋ฏธ์ง๊ฐ ์๊ณก๋ ์ ์๋๋ฐ์. ์ถ์ ๋ ์๊ณก ๊ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ ํ์ฌ ์ค์ 3D ๊ตฌ์กฐ์ ์ผ์นํ๋ ์กฐ๊ธ ๋ ์ ํํ 2D ์ด๋ฏธ์ง๋ฅผ ์ป์ ์ ์์ด์.
[์นด๋ฉ๋ผ ํ๋ผ๋ฏธํฐ ํ์ฉ ์์]
์นด๋ฉ๋ผ ํ๋ผ๋ฏธํฐ๋ค์ ์ถ์ ํ๊ธฐ ์ํด์๋ 3D ์๋ ์ขํ์ ๊ทธ์ ๋์ํ๋ 2D ์์ ์ขํ๊ฐ ์์ด์ผ ํ๋ค๊ณ ๋ง์๋๋ ธ์ฃ ? ์ฒด์ปค๋ณด๋์ ๊ฐ์ด ์บ๋ฆฌ๋ธ๋ ์ด์ ํจํด์ ๋ํ๋ด๋ ์ฌ๋ฌ ์์์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋์์ ์ ์ป์ ์ ์๊ณ , ๋์์ ์ ์ฌ์ฉํ์ฌ ์นด๋ฉ๋ผ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ตฌํ ์ ์์ด์. ์นด๋ฉ๋ผ ์์์ 3D ๊ณต๊ฐ์์ ์ ๋ค์ 2D ์ด๋ฏธ์ง ํ๋ฉด์ ํ๋ก์ ์ ํ์ฌ ์ป์ด์ง๊ณ , ํํ ์นด๋ฉ๋ผ ๋ชจ๋ธ์์ ์ด๋ฌํ ๋ณํ ๊ด๊ณ๋ ์๋์ ๊ฐ์ด ๋ชจ๋ธ๋ง๋ผ์
- X, Y, Z : ์๋ ์ขํ๊ณ ์์ 3D ์
- [R|t] : ์๋ ์ขํ๊ณ๋ฅผ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก ๋ณํ์ํค๊ธฐ ์ํ ํ์ /์ด๋ ๋ณํ ํ๋ ฌ - Extrinsic camera parameters
- A : ์นด๋ฉ๋ผ ๋ด๋ถ ํ๋ผ๋ฏธํฐ ํ๋ ฌ - Intrinsic camera parameters
* A์ [R|t]๋ฅผ ํฉ์ณ camera matrix ๋๋ projection matrix ๋ผ ๋ถ๋ฆ
3. ์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์ ์์ ์ฝ๋
import numpy as np
import cv2 as cv
import glob
# ์ข
๋ฃ ์กฐ๊ฑด ์ค์ : epsilon ๋๋ ์ต๋ ๋ฐ๋ณต ํ์(30)์ ๋๋ฌํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ข
๋ฃ
criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# ์ฒด์ปค๋ณด๋์ 3D ๊ณต๊ฐ ์์ ์ขํ ์ค๋น
# ์: (0,0,0), (1,0,0), (2,0,0), ..., (6,5,0)
objp = np.zeros((6*7, 3), np.float32)
objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2)
# ๋ชจ๋ ์ด๋ฏธ์ง์์ ๊ฐ์ฒด ์ขํ์ ์ด๋ฏธ์ง ์ขํ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
objpoints = [] # ์ค์ 3D ๊ณต๊ฐ์์์ ์ ๋ค
imgpoints = [] # ์ด๋ฏธ์ง ํ๋ฉด์์์ 2D ์ ๋ค
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ ๋ชจ๋ jpg ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ด
images = glob.glob('*.jpg')
# ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ํํ๋ฉด์ ์ฒ๋ฆฌ
for fname in images:
# ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ณ ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํ
img = cv.imread(fname)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# ์ฒด์ปค๋ณด๋ ์ฝ๋๋ฅผ ์ฐพ์
ret, corners = cv.findChessboardCorners(gray, (7, 6), None)
# ์ฝ๋๋ฅผ ์ฐพ์๋ค๋ฉด, ๊ฐ์ฒด ์ขํ์ ์ด๋ฏธ์ง ์ขํ๋ฅผ ์ถ๊ฐ
if ret == True:
objpoints.append(objp) # ๊ฐ์ฒด ์ขํ ์ถ๊ฐ
# ์ฝ๋ ์์น๋ฅผ ๋ ์ ๋ฐํ๊ฒ ์กฐ์
corners2 = cv.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)
imgpoints.append(corners2) # ์ด๋ฏธ์ง ์ขํ ์ถ๊ฐ
# ์ฒด์ปค๋ณด๋ ์ฝ๋๋ฅผ ์ด๋ฏธ์ง์ ๊ทธ๋ ค์ ํ์
cv.drawChessboardCorners(img, (7, 6), corners2, ret)
cv.imshow('img', img) # ์ด๋ฏธ์ง๋ฅผ ์ฐฝ์ ํ์
cv.waitKey(1000) # 1์ด ๋์ ๋๊ธฐ
cv.destroyAllWindows() # ๋ชจ๋ ์ฐฝ ๋ซ๊ธฐ
# ์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์
์ํ
ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(ret, mtx, dist, rvecs, tvecs, sep='\n')
- criteria ์ค์
- criteria๋ ์ฝ๋ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉํ ์ข ๋ฃ ์กฐ๊ฑด
- ์ฌ๊ธฐ์๋ ์ต๋ 30๋ฒ ๋ฐ๋ณตํ๊ฑฐ๋ ์ ํ๋๊ฐ 0.001 ์ดํ๋ก ๋ฎ์์ง๋ฉด ์ข ๋ฃ
- ์ฒด์ปค๋ณด๋์ 3D ์ขํ ์์ฑ
- objp๋ ์ฒด์ปค๋ณด๋์ ๊ฐ ๊ต์ฐจ์ ์ 3D ์ขํ๋ฅผ ๋ํ๋
- Z๊ฐ์ ๋ชจ๋ 0์ผ๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, 7x6 ์ฒด์ปค๋ณด๋์ ํ๋ฉด ์ขํ๋ฅผ ์ ์
- ์ด๋ฏธ์ง์์ ์ฒด์ปค๋ณด๋ ์ฝ๋ ๊ฐ์ง
- cv.findChessboardCorners๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ด๋ฏธ์ง์์ ์ฒด์ปค๋ณด๋ ์ฝ๋๋ฅผ ๊ฒ์ถ
- ์ฝ๋๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํด๋น ์ฝ๋์ ์์น๋ฅผ ์ ๋ฐํ๊ฒ ์กฐ์ ํ์ฌ corners2์ ์ ์ฅ
- ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
- objpoints ๋ฆฌ์คํธ์๋ 3D ๊ฐ์ฒด ์ (์ค์ ์ขํ)์ ์ถ๊ฐํ๊ณ
- imgpoints ๋ฆฌ์คํธ์๋ ํด๋น ์ ์ ๋์ํ๋ ์ด๋ฏธ์ง ํ๋ฉด์ 2D ์ขํ๋ฅผ ์ถ๊ฐ
- ์ฝ๋๋ฅผ ์ด๋ฏธ์ง์ ํ์
- cv.drawChessboardCorners๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ง๋ ์ฝ๋๋ฅผ ์ด๋ฏธ์ง ์์ ๊ทธ๋ฆผ
- ์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์
์ํ
- cv.calibrateCamera ํจ์๋ ๋ชจ์ 3D ๊ฐ์ฒด ์ขํ์ 2D ์ด๋ฏธ์ง ์ขํ๋ฅผ ์ฌ์ฉํ์ฌ ์นด๋ฉ๋ผ์ ๋ด๋ถ ํ๋ผ๋ฏธํฐ์ ์๊ณก ๊ณ์(dist), ๊ฐ ์ด๋ฏธ์ง์ ๋ํ ํ์ ๋ฒกํฐ(rvecs)์ ๋ณํ ๋ฒกํฐ(tvecs)๋ฅผ ๊ณ์ฐ
- ๊ฒฐ๊ณผ ์ถ๋ ฅ
- ๋ง์ง๋ง์ผ๋ก, ์ถ์ ๋ ํ๋ผ๋ฏธํฐ๋ค์ด ์ถ๋ ฅ๋จ
- ret์ ์ต์ ํ ๊ฒฐ๊ณผ์ ์ฌํฌ์ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋ฉฐ, mtx๋ ์นด๋ฉ๋ผ ๋งคํธ๋ฆญ์ค, dist๋ ์๊ณก ๊ณ์, rvecs๋ ํ์ ๋ฒกํฐ, tvecs๋ ๋ณํ ๋ฒกํฐ๋ฅผ ํํ
์นด๋ฉ๋ผ ์บ๋ฆฌ๋ธ๋ ์ด์ ๊ณผ ํ๋ผ๋ฏธํฐ ์ถ์ ์ ์ปดํจํฐ ๋น์ ์์ ํ์์ ์ธ ๊ณผ์ ์ผ๋ก, ์ ํํ 3D ์ ๋ณด๋ฅผ ์ป๊ณ ์๊ณก์ ๋ณด์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํด์. ์ด๋ฒ ํฌ์คํ ์์ ์๊ฐํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก, ์ฌ๋ฌ๋ถ๋ ์์ ์ ์นด๋ฉ๋ผ๋ฅผ ์ ํํ ์ค์ ํ์ฌ ๋ค์ํ ๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฉํด ๋ณด์๊ธธ ๋ฐ๋๋๋ค. ์ดํด๊ฐ ์ด๋ ต๋ค๋ฉด ์ค์ต์ ํตํด ์ง์ ๊ฒฝํํด๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์์! ์ ๋ ๊ทธ๋ฌ์ผ๋๊น์ ๐ข