Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
第2章カメラキャリブレー
ション
コンピュータビジョン広がる要素技術と応用
第2.1節 カメラキャリブレーションとは
発表者 tomoaki_teshima
概要
• ピンホールカメラモデル
• 外部パラメータ
• 内部パラメータ
• 歪み系数
• その他
2018/8/24 第47回コンピュータビジョン勉強会@関東 2
ピンホールカメラモデル
2018/8/24 第47回コンピュータビジョン勉強会@関東 3
ろうそく
焦点距離f
画像平面 (センサ平面)仮想画像平面
光学中心
実際の光学系
2018/8/24 第47回コンピュータビジョン勉強会@関東 4
焦点距離f
実際には
・レンズの表面で計2回屈折する
・レンズは複数枚で構成される場合がある
座標系の関係
2018/8/24 第47回コンピュータビジョン勉強会@関東 5
世界座標系
カメラ座標系
画像座標系
右手系と左手系
2018/8/24 第47回コンピュータビジョン勉強会@関東 6
https://stackoverflow.com/questions/32889584/opencv-triangulatepoints-handedness
OpenCVの座標系は右手系
2018/8/24 第47回コンピュータビジョン勉強会@関東 7
X
Y
Z𝒑 𝑊:3
𝒑 𝑊:1
𝒑 𝑊:2
外部パラメータ(世界座標系→カメラ座標系)
• 𝒑 𝐶 = 𝑅𝒑 𝑊 + 𝒕 = 𝑅 𝒕
𝒑 𝑊
1
(2.1)
• カメラ座標 回転行列 並進ベクトル 世界座標
•
𝒑 𝐶:1
𝒑 𝐶:2
𝒑 𝐶:3
=
𝑟11 𝑟12 𝑟13
𝑟21 𝑟22 𝑟23
𝑟31 𝑟32 𝑟33
𝒑 𝑊:1
𝒑 𝑊:2
𝒑 𝑊:3
+
𝑡1
𝑡2
𝑡3
=
𝑟11 𝑟12 𝑟13 𝑡1
𝑟21 𝑟22 𝑟23 𝑡2
𝑟31 𝑟32 𝑟33 𝑡3
𝒑 𝑊:1
𝒑 𝑊:2
𝒑 𝑊:3
1
2018/8/24 第47回コンピュータビジョン勉強会@関東 8
同次座標(カメラ座標系→正規化座標系)
•
𝒑 𝑁
1
=
1
𝒑 𝐶:3
𝒑 𝐶:1
𝒑 𝐶:2
𝒑 𝐶:3
≅ 𝒑 𝐶
• 斉次座標とも言う
2018/8/24 第47回コンピュータビジョン勉強会@関東 9
正規化座標 と 同次座標
• 混乱しがちだが、
• スケールの不定性を持って座標を表す「しくみ」が同次座標
• 𝑍 = 1(𝒑 𝐶:3 = 1)のときの「座標」を正規化座標
• 𝑅𝒑 𝑊 + 𝒕 = 𝑅 𝒕
𝒑 𝑊
1
= 𝑀𝒑 𝑊 (2.1)改
のように単項の掛け算として表すのに便利
2018/8/24 第47回コンピュータビジョン勉強会@関東 10
内部パラメータ(カメラ座標→カメラ座標)
• 焦点距離𝑓𝑢と𝑓𝑣は同じ値とすることもある
• 第1行2列目をskew値とすることもある
• 現実にはskewを0と置いても問題無いことが多い
2018/8/24 第47回コンピュータビジョン勉強会@関東 11
𝒒𝐼
1
=
𝑓𝑢 0 𝑢0
0 𝑓𝑣 𝑣0
0 0 1
𝒒 𝑁
1
= 𝐾
𝒒 𝑁
1
(2.4)
内部パラメータの表記
• 𝐾 =
𝑓𝑢 0 𝑢0
0 𝑓𝑣 𝑣0
0 0 1
2章8p. (2.4)
• 𝐾 =
𝑓𝑥 𝛾 𝑢0
0 𝑓𝑦 𝑣0
0 0 1
3章24p. (3.1)
• 𝐴 =
𝑓𝑥 0 𝑐 𝑥
0 𝑓𝑦 𝑐 𝑦
0 0 1
OpenCV (3.4.2)
• 𝑲 =
𝑓 𝑠 𝑐 𝑥
0 𝛼𝑓 𝑐 𝑦
0 0 1
2018/8/24 第47回コンピュータビジョン勉強会@関東 12
• 𝑲 =
𝑓𝑢 0 𝑐 𝑢
0 𝑓𝑣 𝑐 𝑣
0 0 1
4章45p. (4.1)
• 𝐾 =
𝛼 𝑥 𝑠 𝑥0
0 𝛼 𝑦 𝑦0
0 0 1
Multiple View Geometry 2nd
edition §6.1 157p. (6.9) Computer Vision:
Algorithms and Applications
P行列
• 世界座標系から一発画像座標系に変換(透視投影)する行列
• Perspective Projection Matrixから通称P Matrix
• camera matrix とも言う
• 3行4列、自由度11の行列
2018/8/24 第47回コンピュータビジョン勉強会@関東 13
𝒒𝐼
1
≅ 𝐾 𝑅 𝒕
𝑃
𝒑 𝑊
1
レンズ歪み
2018/8/24 第47回コンピュータビジョン勉強会@関東 14
𝑥 = 𝑥(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
) + 2𝑝1 𝑥𝑦 + 𝑝2(𝑟2
+ 2𝑥2
)
𝑦 = 𝑦(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
) + 𝑝1(𝑟2
+ 2𝑦2
) + 2𝑝2 𝑥𝑦
(2.6)
https://docs.opencv.org/3.4.2/d9/d0c/group__calib3d.html
OpenCVでの実装
2018/8/24 第47回コンピュータビジョン勉強会@関東 15
𝑥 = 𝑥(1 + 𝑘1 𝑟2 + 𝑘2 𝑟4) + 2𝑝1 𝑥𝑦 + 𝑝2(𝑟2 + 2𝑥2)
𝑦 = 𝑦(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
) + 𝑝1(𝑟2
+ 2𝑦2
) + 2𝑝2 𝑥𝑦
𝑥 = 𝑥(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
) + 2𝑝1 𝑥𝑦 + 𝑝2(𝑟2
+ 2𝑥2
)
𝑦 = 𝑦(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
) + 𝑝1(𝑟2
+ 2𝑦2
) + 2𝑝2 𝑥𝑦
𝑥 = 𝑥
(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
)
(1 + 𝑘4 𝑟2 + 𝑘5 𝑟4 + 𝑘6 𝑟6)
+ 2𝑝1 𝑥𝑦 + 𝑝2(𝑟2 + 2𝑥2)
𝑦 = 𝑦
(1 + 𝑘1 𝑟2 + 𝑘2 𝑟4 + 𝑘3 𝑟6)
(1 + 𝑘4 𝑟2 + 𝑘5 𝑟4 + 𝑘6 𝑟6)
+ 𝑝1(𝑟2
+ 2𝑦2
) + 2𝑝2 𝑥𝑦
𝑥 = 𝑥
(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
)
(1 + 𝑘4 𝑟2 + 𝑘5 𝑟4 + 𝑘6 𝑟6)
+ 2𝑝1 𝑥𝑦 + 𝑝2(𝑟2 + 2𝑥2) + 𝑠1 𝑟2 + 𝑠2 𝑟4
𝑦 = 𝑦
(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
)
(1 + 𝑘4 𝑟2 + 𝑘5 𝑟4 + 𝑘6 𝑟6)
+ 𝑝1(𝑟2
+ 2𝑦2
) + 2𝑝2 𝑥𝑦 + 𝑠3 𝑟2
+ 𝑠4 𝑟4
第2形態
パラメータ4個
第3形態
パラメータ5個
第4形態
パラメータ8個
第5形態
パラメータ12個
OpenCV 2.4系列は
ここまでの実装
(2.6)
𝑥 = 𝑥(1 + 𝑘1 𝑟2 + 𝑘2 𝑟4)
𝑦 = 𝑦(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
)
第1形態
パラメータ2個
OpenCVでの実装第6形態
2018/8/24 第47回コンピュータビジョン勉強会@関東 16
𝑠
𝑥′
𝑦′
1
=
𝑅33 𝜏 𝑥, 𝜏 𝑦 0 −𝑅13 𝜏 𝑥, 𝜏 𝑦
0 𝑅33 𝜏 𝑥, 𝜏 𝑦 −𝑅23(𝜏 𝑥, 𝜏 𝑦)
0 0 1
𝑅 𝜏 𝑥, 𝜏 𝑦
𝑥
𝑦
1
𝑥 = 𝑥
(1 + 𝑘1 𝑟2 + 𝑘2 𝑟4 + 𝑘3 𝑟6)
(1 + 𝑘4 𝑟2 + 𝑘5 𝑟4 + 𝑘6 𝑟6)
+ 2𝑝1 𝑥𝑦 + 𝑝2(𝑟2 + 2𝑥2) + 𝑠1 𝑟2 + 𝑠2 𝑟4
𝑦 = 𝑦
(1 + 𝑘1 𝑟2
+ 𝑘2 𝑟4
+ 𝑘3 𝑟6
)
(1 + 𝑘4 𝑟2 + 𝑘5 𝑟4 + 𝑘6 𝑟6)
+ 𝑝1(𝑟2
+ 2𝑦2
) + 2𝑝2 𝑥𝑦 + 𝑠3 𝑟2
+ 𝑠4 𝑟4
第6形態
パラメータ14個
第5形態に加えて
レンズの光軸と画像平面(センサ)が直交してない場合に回転行列で補正
本当は深いレンズの歪み/収差
• 詳しくは第34回勉強会、CV最先端ガイド第4巻第2章
「コンピュテーショナルフォトグラフィ」の2.2-2.3節に詳しい
• 発表担当された内田 健介さんの素晴らしい資料
2018/8/24 第47回コンピュータビジョン勉強会@関東 17
まとめ
2018/8/24 第47回コンピュータビジョン勉強会@関東 18
𝑅 𝒕
𝐾
座標系と画像原点の組み合わせ
2018/8/24 第47回コンピュータビジョン勉強会@関東 19
𝑋 𝑊
𝑌 𝑊
𝑍 𝑊
𝑥
𝑦
𝑋 𝐶
𝑌𝐶
𝑍 𝐶
𝑍 𝑊
𝑌 𝑊
𝑋 𝑊
𝑥
𝑦
𝑋 𝐶
𝑌𝐶 𝑍 𝐶
右手系/左上 左手系/左下
右手座標系と左下原点の場合は?
2018/8/24 第47回コンピュータビジョン勉強会@関東 20
𝑌 𝑊
𝑍 𝑊
𝑋 𝑊
𝑥
𝑦
?
?
?
?
𝑋 𝐶
𝑌𝐶
𝑍 𝐶
𝑋 𝐶
𝑍 𝐶 𝑌𝐶
𝑋 𝐶
𝑌𝐶
𝑍 𝐶
𝑋 𝐶
𝑍 𝐶
𝑌𝐶
誤った回答
• 𝑋軸だけ反転させる
• そうだ𝑓𝑥を反転させるんだ!
• 計算上は辻褄があってしまうが、もちろん誤り
• 焦点距離は「距離」なので、負の値は解釈に合わない
2018/8/24 第47回コンピュータビジョン勉強会@関東 21
−𝑓𝑥 0 −𝑐 𝑥
0 𝑓𝑦 𝑐 𝑦
0 0 1
実際にキャリブレーションしてみる
• 回転行列とにらめっこするだけで時間が溶けていきます
• 実際に数値計算上は辻褄が合ってるので、眺めてると時間が無
限に溶けていく
• 私はこれで10時間ぐらい溶かしました
2018/8/24 第47回コンピュータビジョン勉強会@関東 22
-0.3810472809986003,-0.9180525022598411,-0.1094649383959004, 3.56925747478902
0.8398410858767043,-0.3932075770515362, 0.3742388967260064,-2.288453572476477
-0.3866133987810201, 0.0506695613135212, 0.9208488884932663, 11.13180712451047
-0.3808959796596841,-0.9180988452242268, 0.1096027512292949, 3.564838451076172
-0.8395891953433575, 0.3930839029942365, 0.3749333651057359, 2.2889512746386
-0.3873089667717272, 0.0507893256970295,-0.9205499490269162, 11.15174520686148
こう解釈すると辻褄が合う
2018/8/24 第47回コンピュータビジョン勉強会@関東 23
𝑌 𝑊
𝑍 𝑊
𝑋 𝑊
𝑥
𝑦
𝑋 𝐶𝑍 𝐶
𝑌𝐶
ああ
あ
教訓:座標系を設計する場合は右手系/左手系をよく気をつけましょう
カメラが向いている方向がZ軸負の方向
内部パラメータの単位
•
𝒒𝐼
1
≅ 𝐾 𝑅 𝒕
𝒑 𝑊
1
(2.5)式
• 𝑅は純粋な回転行列なので、単位変換は無い
• 𝑡は平行移動=加算なので、単位変換は無い
• 𝐾(内部パラメータ)のどこかにpx/mmがある
↑単位px ↑単位mm
どこかにpx/mm
2018/8/24 第47回コンピュータビジョン勉強会@関東 24
十年来の誤解
2018/8/24 第47回コンピュータビジョン勉強会@関東 25
𝒒𝐼
1
=
𝑓𝑢 0 𝑢0
0 𝑓𝑣 𝑣0
0 0 1
𝒑 𝐶
単位 px/mm ?
単位 mm単位 px
単位 px
2018/8/24 第47回コンピュータビジョン勉強会@関東 26
𝜆𝒒𝐼:1
𝜆𝒒𝐼:2
𝜆
=
𝑓𝑢 0 𝑢0
0 𝑓𝑣 𝑣0
0 0 1
𝒑 𝐶:1
𝒑 𝐶:2
𝒑 𝐶:3
単位 mm
単位 px
単位無し
[mm・px]
[mm・px]
[mm]
同次座標を正規化
2018/8/24 第47回コンピュータビジョン勉強会@関東 27
𝜆𝒒𝐼:1
𝜆𝒒𝐼:2
𝜆
≅
1
𝜆
𝜆𝒒𝐼:1
𝜆𝒒𝐼:2
𝜆
=
𝒒𝐼:1
𝒒𝐼:2
1
[mm・px]
[mm・px]
[mm]
[px]
[px]
焦点距離𝑓の単位はpx
𝑓𝑢 0 𝑢0
𝒑 𝐶:1
𝒑 𝐶:2
𝒑 𝐶:3
= 𝑓𝑢 𝒑 𝐶:1 + 𝑢0 𝒑 𝐶:3
別解説
2018/8/24 第47回コンピュータビジョン勉強会@関東 28
単位 mm
単位 px
焦点距離𝑓の単位はpx
正規化座標の意義
2018/8/24 第47回コンピュータビジョン勉強会@関東 29
𝑢 =
𝑓𝑢 𝑋 + 𝑢0 𝑍
𝑍
𝑛 𝑥 =
𝑋
𝑍
, 𝑢 = 𝑓𝑢 𝑛 𝑥 + 𝑢0
掛けて足して割る
割って掛けて足す
正規化座標を使うと単位をキャンセルできる
Auto focusと内部パラメータ
• ズーム→当然内部パラメータキャリブレーションやり直し
• フォーカス→固定するのがベスト
• フォーカスが変わった場合はどうなる?
• C言語クイズみたいな答えだが光学系の実装依存
• レンズ群が移動するので、厳密には光学系が変わる
• 理想的には変わらないことが期待されるが、保証はされない
• https://www.sony.jp/products/catalog/alpha_lens.pdf
2018/8/24 第47回コンピュータビジョン勉強会@関東 30
追加資料のまとめ
• 座標系と画像の原点に気をつけましょう
• 焦点距離𝑓の単位はpx
• フォーカスが変わった場合もキャリブレーションやり直し
2018/8/24 第47回コンピュータビジョン勉強会@関東 31
OpenCVで使うキャリブレーションパターン
2018/8/24 第47回コンピュータビジョン勉強会@関東 32
https://github.com/tomoaki0705/calibrationPatternGenerator
https://qiita.com/tomoaki_teshima/items/39bc1b6cca9f1cf8f040
参考文献
1. https://stackoverflow.com/questions/32889584/opencv-
triangulatepoints-handedness
2. Multiple View Geometry 2nd edition
3. Computer Vision: Algorithms and Applications
4. https://docs.opencv.org/3.4.2/d9/d0c/group__calib3d.html
5. 内田健介:コンピュテーショナルフォトグラフィ理解のための光学系入門,
https://drive.google.com/file/d/0B-
GZ0bgRSmP8OUJzVWRlQ0J6UTA/view?ts=575ca9d8
6. https://www.sony.jp/products/catalog/alpha_lens.pdf
7. https://github.com/tomoaki0705/calibrationPatternGenerator
8. https://qiita.com/tomoaki_teshima/items/39bc1b6cca9f1cf8f040
2018/8/24 第47回コンピュータビジョン勉強会@関東 33

More Related Content

Kantocv 2-1-calibration publish