4 minute read

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

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