[COLMAP] COLMAP with known intrinsics
Using COLMAP to find the camera extrinsics in the case that the intrinsics are known #682
How to use pre-constructed DB for reconstruction from known poses #433
Question: How to format cameras.txt for Reconstruct sparse/dense model from known camera poses #428
COLMAP์์ ์นด๋ฉ๋ผ์ Intrinsics๋ฅผ ์ ๋, Extrinsics๋ง ์ถ์ ํ๋ ๋ฒ์ ์์๋ด ์๋ค.
COLMAP FAQ: Share intrinsics, Fix intrinsics, Principal point refinement
โ COLMAP์ ๊ธฐ๋ณธ์ ์ผ๋ก Intrinsics๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค (Share intrinsics)
COLMAP์ ๊ฐ์ ์นด๋ฉ๋ผ๋ก ์ฐ์ ์ฌ๋ฌ ์ด๋ฏธ์ง๊ฐ ๊ฐ์ intrinsics๋ฅผ ๊ณต์ ํ๋๋ก ํ ์ ์์ต๋๋ค.
์ด๊ฑด ์ด๋ฏธ์ง๊ฐ ๋์ผํ camera_id๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
์ฆ, ํ ๋ฒ ์ธก์ ๋ intrinsics๋ฅผ ์ฌ๋ฌ ์ด๋ฏธ์ง์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
์ด ์ค์ ์ Database Management ํด์ ํตํด ์กฐ์ ๊ฐ๋ฅํฉ๋๋ค.
โ COLMAP์ ๊ธฐ๋ณธ์ ์ผ๋ก Intrinsics๋ฅผ ์์์ ์ต์ ํํ์ง๋ง, Intrinsics๋ฅผ ์ต์ ํ ๊ณผ์ ์์ ์ ์ธํ ์ ์์ต๋๋ค. (Fix intrinsics)
COLMAP์ ์ฌ๊ตฌ์ฑ ๊ณผ์ ์์ intrinsic ํ๋ผ๋ฏธํฐ(Principal point๋ ์ ์ธ)๋ฅผ ์๋์ผ๋ก ์ต์ ํํฉ๋๋ค.
์ด๋ฏธ์ง ์๊ฐ ์ถฉ๋ถํ๊ณ , ์ฌ๋ฌ ์ด๋ฏธ์ง๊ฐ ๊ฐ์ intrinsics๋ฅผ ๊ณต์ ํ ๋ COLMAP์ self-calibration์ด ๊ฝค ์ ํํฉ๋๋ค.
ํ์ง๋ง ๋ณต์กํ distortion ๋ชจ๋ธ์ ๊ฒฝ์ฐ, ์๋ ์ต์ ํ๊ฐ ํดํ๋(degenerate) ํ๋ผ๋ฏธํฐ๋ก ์๋ ดํ ์ํ์ด ์์ต๋๋ค.
๊ทธ๋์ ์ด๋ฏธ ์ธก์ ๋ intrinsics๊ฐ ์๋ค๋ฉด, refine_* ์ต์ ์ ํตํด intrinsics๋ฅผ ๊ณ ์ (fix)ํ ์ ์์ต๋๋ค.
๊ฒฝ๋ก: Reconstruction > Reconstruction options > Bundle Adj. > refine_*
์ฌ๊ตฌ์ฑ ํ ์ ์ฒด ๋ฒ๋ค์กฐ์ (global bundle adjustment) ์์๋ refine ์ฌ๋ถ๋ฅผ ์ง์ ํ ์ ์๋ค.
โ COLMAP์ ๊ธฐ๋ณธ์ ์ผ๋ก Principal Point๋ ์ต์ ํํ์ง ์์ต๋๋ค. (Principal point refinement)
์ฃผ์ (principal point)์ ์ผ๋ฐ์ ์ผ๋ก ์ถ์ ์ด ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ COLMAP์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฅผ ๊ณ ์ ์ํต๋๋ค.
Reconstruction > Reconstruction options > Bundle > Camera parameters
ํ์ง๋ง ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ ์ฌ๊ตฌ์ฑ๋ ์ดํ์๋ ๊ตฌ์กฐ๊ฐ ์ถฉ๋ถํ ๊ฒฐ์ ๋๋ฏ๋ก, global bundle adjustment ๋จ๊ณ์์ ์ฃผ์ ์ refineํ ์ ์์ต๋๋ค.
์ด๋๋ intrinsics๋ฅผ ์ฌ๋ฌ ์ด๋ฏธ์ง๊ฐ ๊ณต์ ํ๋ ๊ฒฝ์ฐ์ ์์ ์ ์ผ๋ก ์ํ ๊ฐ๋ฅํฉ๋๋ค.
๐ง ์์ฝ: โExtrinsics๋ง ์ถ์ ํ๊ณ ์ถ์ ๋โ ์ค์ง์ ์ธ ์ค์ ๋ฐฉ๋ฒ
Camera calibration์ด ๋ฏธ๋ฆฌ ๋์ด ์๊ณ , COLMAP์ ์ ํํ intrinsics๋ฅผ ์ ๊ณตํ๋ค๋ฉด:
COLMAP GUI ๋๋ CLI์์:
refine_focal_length, refine_principal_point, refine_extra_params
๋ฑ์ False๋ก ์ค์ ํด intrinsics๋ฅผ ๊ณ ์ .
์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋ camera_id๋ฅผ ๋์ผํ๊ฒ ํ์ฌ intrinsics ๊ณต์ .
์ดํ COLMAP์ ํด๋น intrinsics๋ฅผ ๊ธฐ๋ฐ์ผ๋ก extrinsics๋ง ์ถ์ ํ๊ฒ ๋ฉ๋๋ค.
๐ COLMAP์ Reference Frame๊ณผ ์๋์ขํ๊ณ
COLMAP์ ์ฌ์ฉํด Structure-from-Motion ์ฌ๊ตฌ์ฑ์ ์ํํ๋ฉด, ๋ชจ๋ ์นด๋ฉ๋ผ ํฌ์ฆ์ 3D ํฌ์ธํธ๋ ํ๋์ ์ขํ๊ณ ๊ธฐ์ค์์ ์ ์๋ฉ๋๋ค. ์ด ์ขํ๊ณ๊ฐ ์ด๋ป๊ฒ ์ ํด์ง๊ณ , ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ป๊ฒ ๋ค๋ฃฐ ์ ์๋์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ COLMAP ๊ฒฐ๊ณผ๋ฅผ ์ ๋๋ก ํ์ฉํ๊ธฐ ์ํ ํ์ ์กฐ๊ฑด์ ๋๋ค.
โ Reference Frame์ ์ด๋ป๊ฒ ์ ํด์ง๋๊ฐ?
โThe reference frame is initialized to correspond to the first camera that is reconstructed.โ
COLMAP์ ์ฌ๊ตฌ์ฑ ๊ณผ์ ์์ ์ฒ์์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ๋ชจ๋ธ์ ๋ฑ๋ก๋ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก reference frame(๊ธฐ์ค ์ขํ๊ณ)์ ์ด๊ธฐํํฉ๋๋ค. ์ด ์ด๋ฏธ์ง๋ ์ฌ์ฉ์ ํ์ผ ๋ชฉ๋ก์ ์ฒซ ์ด๋ฏธ์ง๊ฐ ์๋๋ผ, ์ค์ ๋ก feature matching๊ณผ triangulation ์กฐ๊ฑด์ ๋ง์กฑํด ์ต์ด๋ก ๊ตฌ์กฐํ๋ ์ด๋ฏธ์ง์ ๋๋ค.
์ด ์ด๋ฏธ์ง์ ์นด๋ฉ๋ผ ์ขํ๊ณ๊ฐ ์ฌ๊ตฌ์ฑ ์ด๊ธฐ์๋ ์๋ ์ขํ๊ณ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, ํด๋น ์นด๋ฉ๋ผ๋ ์์ (0, 0, 0)์ ์์นํ๊ณ , ํ์ ์ ๋จ์ํ๋ ฌ์ด ๋ฉ๋๋ค.
๐ ์ด๋ค ์ด๋ฏธ์ง๊ฐ ์ด๊ธฐ ๊ธฐ์ค์ด ๋์๋์ง๋ images.txt ํ์ผ์ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง ์ ๋ณด ์ค์ ๋ณด๋ฉด ๋ฉ๋๋ค.
๐ ๊ทธ๋ฌ๋ Reference Frame์ ๊ณ ์ ๋์ด ์์ง ์๋ค
์ค์ํ ์ ์, ์ด ์ด๊ธฐ ๊ธฐ์ค ์ด๋ฏธ์ง๊ฐ ์ต์ข ์ ์ผ๋ก๋ ์๋ ์ขํ๊ณ์ ์ค์ฌ์ผ๋ก ๋จ๋๋ค๋ ๋ณด์ฅ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
COLMAP์ reconstruction์ด ๋๋ ํ, Bundle Adjustment(BA)๋ฅผ ํตํด ์ ์ฒด ๋ชจ๋ธ์ ์ต์ ํ๋ฅผ ์ํํฉ๋๋ค. ์ด ๊ณผ์ ์์ reconstruction ์ ์ฒด๊ฐ ํ์ ๋๊ฑฐ๋ ์ด๋๋ ์ ์์ผ๋ฉฐ, ์ด์ ๋ฐ๋ผ ๊ธฐ์ค ์ด๋ฏธ์ง์ ์์น๋ ๋ณํ ์ ์์ต๋๋ค.
์ฆ,
COLMAP์ reference frame์ ์ด๊ธฐ ์ขํ๊ณ ์ค์ ์ ์ํ ์์ ๊ธฐ์ค์ผ ๋ฟ,
์ต์ข ๊ฒฐ๊ณผ์์์ world coordinate system์ ์ ํํ ์ด๋ค ์ด๋ฏธ์ง ๊ธฐ์ค์ด๋ผ๊ณ ๋จ์ ์ง์ ์ ์์ต๋๋ค.
๋ค์ ๋งํด, ์ด๊ธฐ์๋ ํน์ ์ด๋ฏธ์ง๊ฐ ๊ธฐ์ค์ด ๋๋๋ผ๋, ์ต์ข ์ ์ผ๋ก๋ ์ ์ฒด ๋ชจ๋ธ์ด ์กฐ์ ๋ ํ๋์ ์ผ๊ด๋ ์ขํ๊ณ ์์ ์์นํ๊ฒ ๋ฉ๋๋ค. ์ด ์ขํ๊ณ๋ ์ ๋์ ์ธ ์๋ฏธ์ โ์๋โ๊ฐ ์๋๋ผ, ๋ด๋ถ์ ์ผ๋ก ์ ๋ ฌ๋ ์๋์ ์ธ ์๋ ํ๋ ์์ ๋๋ค.
๐งญ ์ํ๋ ๊ธฐ์ค ์ขํ๊ณ๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด?
COLMAP์ด ์ ์ํ ์ขํ๊ณ๋ ์๋์ ์ด๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ ํ์ฒ๋ฆฌ๋ฅผ ํตํด ์๋ฏธ ์๋ ์ขํ๊ณ๋ก ์ฌ์ ๋ ฌํด์ผ ํ ์ ์์ต๋๋ค:
ํน์ ์นด๋ฉ๋ผ(์: cam1)๋ฅผ ์์ ์ ๋๊ณ Z์ถ์ด ์๋ฅผ ํฅํ๋๋ก ์ ์ฒด reconstruction์ rigid transform์ผ๋ก ๋ณํ
๋๋ ์ธ๋ถ ์ขํ๊ณ(์: GPS, ๋ก๋ด ๋ก์ปฌ ํ๋ ์ ๋ฑ)์ ๋์์ ๊ธฐ๋ฐ์ผ๋ก ์ ํฉ
๐ COLMAP์์ ์นด๋ฉ๋ผ ํฌ์ฆ(pose)์ ์์น(position)์ ์ ์
โThe pose of each image is defined with respect to a world coordinate system and the position of the image in the world coordinate system is given as $-R^t * T$.โ
์ด ๋ฌธ์ฅ์์ ์ค์ํ ์ ์ pose์ position์ ๊ตฌ๋ถํ๋ ๊ฒ์ ๋๋ค.
- Pose: ์๋ ์ขํ๊ณ๋ก๋ถํฐ ์นด๋ฉ๋ผ ์ขํ๊ณ๋ก ๊ฐ๋ ๋ณํ(R, T)์ ์๋ฏธํฉ๋๋ค. ์ฆ, ์นด๋ฉ๋ผ๊ฐ ์๋ ๊ณต๊ฐ ์์์ ์ด๋ค ์์น์ ์๊ณ , ์ด๋ค ๋ฐฉํฅ์ ๋ฐ๋ผ๋ณด๋์ง๋ฅผ ํจ๊ป ํฌํจํฉ๋๋ค.
- Position: ๊ทธ์ค์์๋ ์นด๋ฉ๋ผ ์ค์ฌ์ ์ ์ขํ๋ง์ ์๋ฏธํฉ๋๋ค. ํ์ (R)์ ๊ณ ๋ คํ์ง ์๊ณ , ์นด๋ฉ๋ผ์ ์๋ ๊ธฐ์ค ์์น๋ฅผ ๋ํ๋ ๋๋ค.
๐ ์ขํ๊ณ ๊ฐ ๋ณํ ์์
- ๐: ์๋ ์ขํ๊ณ์์์ 3D ํฌ์ธํธ
- ๐ฅ: ์นด๋ฉ๋ผ(๋ก์ปฌ) ์ขํ๊ณ์์์ 3D ํฌ์ธํธ
- ๐ : ์๋ โ ์นด๋ฉ๋ผ ๋ณํ ํ์ ํ๋ ฌ
- ๐: ์๋ ์์ ์ด ์นด๋ฉ๋ผ ์ขํ๊ณ์์ ๋ณด์ด๋ ์์น (translation vector)
COLMAP์์๋ ๋ค์๊ณผ ๊ฐ์ ์นด๋ฉ๋ผ ์ค์ฌ ๊ธฐ์ค ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค:
\[x = R \cdot X + T\]์ฆ, ์๋ ์ขํ๊ณ์ ํฌ์ธํธ ๐๋ ํ์ ๊ณผ ์ด๋์ ๊ฑฐ์ณ ์นด๋ฉ๋ผ ์ขํ๊ณ์ ๐ฅ๋ก ๋ณํ๋ฉ๋๋ค.
์ด๋ฅผ ์๋ ์ขํ๊ณ ๊ธฐ์ค์ผ๋ก ํ์ด์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌ๋ฉ๋๋ค:
\[X =R^t(x-T)\]์ด์ ์ด ์์์์ ์นด๋ฉ๋ผ ์ขํ๊ณ์ ์์ , ์ฆ $x=0$๋ฅผ ๋ฃ์ผ๋ฉด?
\[X =R^t(0-T) = -R^t \cdot T\]์ด๊ฒ์ด ๋ฐ๋ก ์นด๋ฉ๋ผ์ ์๋ ์ขํ๊ณ์์์ ์์น์ ๋๋ค.
๐ ํด์: $x=0$์ด๋?
$x=0$์ด๋ โ์นด๋ฉ๋ผ ์ขํ๊ณ์์ ์์ ์ ์๋ฏธโ โ ์ฆ, ์นด๋ฉ๋ผ์ ์ค์ฌ์
์ฐ๋ฆฌ๊ฐ ์๊ณ ์ถ์ ๊ฒ์ ์ด ์นด๋ฉ๋ผ ์ค์ฌ์ด ์๋ ์ขํ๊ณ์์๋ ์ด๋์ ์๋๊ฐ?
๋ฐ๋ผ์ ์ด ์์น๋ $x=0$์ผ ๋ $X$๊ฐ ๋ฌด์์ธ์ง๋ก ์ ์ํ ์ ์์
๐ ์นด๋ฉ๋ผ์ ์์น(Position) ๊ณ์ฐ ์นด๋ฉ๋ผ์ ์์น๋, ์๋ ์ขํ๊ณ์์ ์นด๋ฉ๋ผ ์์ ์ด ์ด๋์ ์๋๊ฐ๋ฅผ ๋ปํ๋ฉฐ, ์ ์์์์ $x=0$์ธ ๊ฒฝ์ฐ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
์ฆ,
\[Camera \ย Position \ย C=โR^t \cdot T\]์ด๋ COLMAP์ images.txt
์์ ์ฃผ์ด์ง R (์ฟผํฐ๋์ธ โ ํ์ ํ๋ ฌ๋ก ๋ณํ)๊ณผ T๋ฅผ ํตํด ์ง์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
Leave a comment