修⼠論⽂
令和３年度

研究題⽬
360 度画像を⽤いた SfM の精度に関する研究

学⽣証番号 086105
⽒名

提出⽇

⻄島

啓⽃

令和４年１⽉１４⽇

指導教員

蚊野

京都産業⼤学⼤学院
先端情報学研究科

浩要旨Structure from Motion（SfM）は，3 次元シーンを撮影した複数の画像から，シーンに関する３次元情報と撮影に⽤いたカメラの位置情報を推定する技術である．通常のカメラを⽤いた SfM により，屋外の情景や観光地などの広い 3 次元空間を 3 次元モデル化することが可能になっている．通常のカメラは画⾓が 40 度程度であり，広い空間を SfM するた
めには⾮常に多数の写真画像を撮影する必要がある．この問題を解決するには，通常より視野の広い画像を使う SfM が有効である．
最近では，360 度の視野を⼿軽に撮影できる 360 度カメラが容易に⼊⼿できる．SfM に
360 度画像を利⽤すれば，1 枚の画像で撮影できる範囲が広いことによる撮影枚数の低減
や，360 度画像の良い性質による SfM の復元精度の向上などの効果が期待できる．本研究では，360 度画像を⽤いた SfM を研究・実装し，通常画像を⽤いる SfM との⽐較，検討を⾏った．
360 度画像を⽤いた SfM と通常画像による SfM の精度を⽐較するために，シミュレー
ションによる実験を⾏った．3 次元点群のシミュレーションデータを，通常の画像⾯と単位球⾯に投影し，その位置に適切なノイズを加えた画像を作成した．それらの画像について，提案⼿法を MATLAB のプログラムで実装し，カメラ移動量の復元を⾏った．復元された移動量と真値との誤差を評価し，精度を検証した．結果として 1）360 度画像を⽤いた SfM の精度は，通常画像を⽤いた SfM よりも改善されていた．また，2）360 度画像を⽤いた SfM では，カメラの移動⽅向と SfM の復元精度に関係が⾒られなかったのに対して，通常画像を⽤いた SfM ではカメラを前に動かした場合では，上，右に動かした場合よりも復元精度が悪かった．1）のようになる理由は，360 度画像は全⽅向の観察点を利⽤してカメラ移動量の計算を⾏うことができることであると考えた．2）のようになる理由
は，カメラを前後に移動させて撮影した通常画像では，上下や左右に移動させて撮影した
通常画像に⽐較して，３次元点を投影した観察位置の変化が少ないからである，と考えた．360 度画像の場合には，通常画像のような⽅向性がないため，カメラをどのように移動させても，同じ程度の精度で SfM を実⾏することができると考える．
提案⼿法が実画像に対しても動作することを⽰すために，3DCG ソフトで作成したシーンの 360 度画像を⽤いる場合と，実際の 360 度カメラ（リコー社の THETA）で撮影した
360 度画像を⽤いる場合の２つで SfM を⾏い，動作を検証した．⼊⼒画像から ORB 特徴を抽出し，それを 2 画像間でマッチングさせ，提案⼿法で SfM を⾏った．その結果を可視化し，正しく動作していることを確認した．

i

ii

⽬次
第 1 章 序論 .....................................................................................................................1
第2章

SfM に関する従来技術と従来研究 ....................................................................3

2.1

通常のカメラを⽤いた 2 画像間の 3 次元復元.................................................3

2.1.1

ピンホールカメラモデル .................................................................................. 3

2.1.2

エピポーラ幾何とE⾏列，F⾏列 ....................................................................... 5

2.1.3

8 点アルゴリズム .............................................................................................. 6

2.1.4

アウトライアと RANSAC................................................................................. 82.1.5F⾏列からカメラモーションを求める .............................................................. 8

2.1.6

特徴点の３次元空間における位置を求める ..................................................... 9

2.2

Structure from Motion....................................................................................10

2.2.1

バンドル調整................................................................................................... 10

2.3

画像特徴 .........................................................................................................11

2.4

360 度画像の表現形式 ....................................................................................112.4.1

正距円筒画像................................................................................................... 112.4.2

単位球⾯上に像を写すカメラモデル .............................................................. 12

2.5

SLAM ..............................................................................................................13第3章

360 度画像による SfM.....................................................................................14

3.1

360 度画像を⽤いた 2 画像間の 3 次元復元 ...................................................14

3.1.1

画像特徴の抽出 ............................................................................................... 14

3.1.2

正距円筒画像から単位球⾯モデルへの変換 ................................................... 14

3.1.3

360 度画像に対するE⾏列の計算.................................................................... 143.1.4

E⾏列からカメラモーションを求める ............................................................ 163.1.5

２画像からの 3 次元位置計算 ......................................................................... 17

3.2

バンドル調整 ..................................................................................................18

3.3

動画からの SfM ..............................................................................................19

3.4

作成したプログラムの説明 ............................................................................19

第 4 章 実験と考察 ........................................................................................................20
4.1

3DCG 画像を⽤いた動作検証 ........................................................................20

4.2

シミュレーションデータでの⽐較実験 ..........................................................21

4.2.2

復元結果の⽐較⽅法........................................................................................ 24iii

4.2.3

カメラの種類・動きと SfM の誤差 ................................................................ 244.2.4

ノイズの量を変化させた場合 ......................................................................... 26

4.2.5

シミュレーションデータを⽤いた実験についての考察................................. 27

4.3

実写画像を⽤いた動作検証 ............................................................................28

4.3.1

実験内容 .......................................................................................................... 28

4.3.2

実験結果 .......................................................................................................... 31

4.3.3

実写画像を⽤いた実験についての考察 .......................................................... 33

4.4

今後の課題 ......................................................................................................33

第 5 章 結論 ...................................................................................................................34
謝辞 .................................................................................................................................35
参考⽂献 ..........................................................................................................................35
付録 .................................................................................................................................36iv

第1章 序論
⼈間は３次元のシーンを観察した時，脳内の処理によって様々な情報を導き出し，そのシーンを理解することができる．⼈間の⽬と脳の機能をカメラとコンピュータに置き換えて，同様な情報処理能⼒を⼈⼯的に実現しようとする学問分野をコンピュータビジョンと呼ぶ．コンピュータビジョン技術の研究開発は画期的に進歩しており，実⽤化が進んでいるものに，例えば，⾃動運転に利⽤されるビジョン技術や，スマートフォンのカメラ撮影に利⽤されるコンピュテーショナルフォトグラフィなどがある．
カメラで撮影した写真画像は３次元世界を２次元画像に投影している．そのため３次元世界の幾何学的な情報などが縮退しており，１枚の写真画像だけから，元の３次元世界の⽴体構造を復元することは，⼀般に困難である．⼀⽅，２台のカメラを配置したステレオ
カメラを⽤いれば，視野で捉えたシーンの空間的な情報を計算することができる．このような技術をステレオビジョンという．ステレオビジョンは，性能が既知の２台以上のカメラを⽤いて，かつ，カメラ間の位置関係が既知の場合に，観察したシーンの空間情報を推定する技術である．
コンピュータビジョンの技術が発展するに伴い，移動する１台のカメラで撮影した複数の画像や映像から，まず，カメラの移動に関する情報を推定し，次いで，カメラの移動情報を利⽤してシーンの空間情報を推定する，という技術が研究されるようになった．この技術を Structure from Motion（SfM）という．近年ではコンピュータの性能が向上したことにより，⼤量の画像を対象とした SfM が可能になり，⼤きな空間の 3 次元モデルを再構築できるようになっている [1]．
また，移動ロボットのナビゲーションに利⽤される技術として SLAM（Simultaneous
Localization and Mapping）がある．SLAM は移動ロボットに搭載した画像センサーや慣性センサーを⽤いて，移動ロボットの移動情報と環境の地図情報を同時に推定する技術である．SLAM の中でも，画像情報を使う SLAM を画像 SLAM（Visual SLAM）と呼ぶ．画像 SLAM も SfM 技術の⼀つであり，実時間で処理が⾏われる⾼速 SfM と考えることができる．このように SfM 技術は，広域空間の３D モデリングや，移動ロボットのナビゲーシ
ョンなど，いくつかの分野で研究と実⽤化が進められている．
コンピュータビジョンに利⽤するカメラは通常のカラーカメラを⽤いることが多い．通常のカメラはピンホールカメラでモデル化することができる．通常のカメラに標準レンズを装着する場合，画⾓は 46 度程度である．広⾓レンズであれば 90 度ぐらいになるが，それでも，全天 360 度に対して，⾯積にして 15%程度しかカバーすることができない．⼀⽅，RICHO THETA や GoPro MAX といった 360 度写真を撮影できるカメラを⽤いれば，全天 360 度をワンショットで撮影することができる．近年，これらの 360 度カメラ
は，多数の機種が発売されており，容易に⼊⼿できるようになっている．本研究では，

1

360 度画像を利⽤して SfM を⾏うことで，精度の向上や，撮影の⼿間の削減が達成できるのではないかと考え，360 度画像を使った SfM について研究した．
本論⽂の構成は次のとおりである．第 2 章では SfM の基礎となる理論や技術の説明を述べる．第 3 章では SfM を 360 度画像に適⽤する⼿法を述べる．第 4 章では作成した SfMプログラムを⽤いて 360 度画像と通常画像それぞれで SfM を⾏い，復元結果を⽐較した
実験結果を⽰す．最後に第 5 章で結論を述べる．

2

第2章 SfM に関する従来技術と従来研究
第 2 章では，SfM の基礎となる通常のカメラを⽤いた 2 画像間での 3 次元復元について説明する．まず，通常のカメラを⽤いた SfM について説明し，また関連技術として，画像
特徴と 360 度画像を説明する．
2.1 通常のカメラを⽤いた 2 画像間の 3 次元復元
2.1.1 ピンホールカメラモデル
通常のカメラを⽤いた画像撮影のモデルである，ピンホールカメラモデルについて説明する．カメラを⽤いた撮影における幾何学的な性質は，座標系の変換によって説明することができる．図 2.1 に⽰すように，座標系としてワールド座標系，カメラ座標系，画像座標系の 3 つを利⽤する．ワールド座標系とカメラ座標系は３次元の直交座標系，画像座標系は２次元の直交座標系である．
⼀般にワールド座標系は，ユーザが任意に設定する座標系である．SfM では基準となるカメラを決めて，基準カメラのカメラ座標系とワールド座標系を合わせる場合が多い．カメラ座標系はカメラごとに設定する座標系で，カメラをモデル化するピンホールカメラの投影中⼼を原点とし，カメラの⽔平⽅向を𝑋! 軸，垂直⽅向を𝑌! 軸，奥⾏き⽅向を𝑍! 軸とする．画像座標系は，各カメラが撮影する画像上に設定する 2 次元座標である．画像座標系
として，縦横の⻑さを画素単位で数える通常の画像座標と，カメラ座標系における𝑍! = 1の平⾯として定義される正規化画像座標がある．
#!

ワールド座標系$

!

!!

"!
#"

正規化画像座標

画像座標

!"
#
""
カメラ座標系C

(
)

!

1

'
&

正規化画像座標系

画像座標系

図 2.1 ワールド座標系，カメラ座標系，画像座標系の関係ある 3 次元の点𝑝を画像として撮影することは，ワールド座標系，カメラ座標系，画像座標系の間で変換を⾏うことである．座標系の間の変換は主に 3 段階に分けて考えることができる．変換の⼿順を 2.1.1-1 から 2.1.1-3 で説明する．

3

なお，本論⽂では座標値の表記に縦ベクトルを⽤いることを基本とする．また，座標値
を同次座標表現することで，ピンホールカメラによる座標系の変換を⾏列演算の形で表すことができ，関係を⾒通しよく表すことができる．同次座標は通常の座標ベクトルの最後に 1 を付け加えたものである．また，同次座標を表す記号に対しては，記号の上にチルダ
𝑋𝑥を加えることで明記する．例えば，2 次元座標𝒎 = )𝑦,，3 次元座標𝑴 = .𝑌 /の同次座標
𝑍
は，次のようになる．
𝑋𝑥
5 ~ 6𝑌 7
0 ~ 2𝑦 3 , 𝑴𝒎𝑍
1
1
なお，同次座標は定数倍の違いを許して等しいという性質があり，このことを記号ʻ〜ʼで表す．
2.1.1-1 ワールド座標系からカメラ座標系への変換
ワールド座標系の点𝑴" からカメラ座標系の点𝑀# に変換について考える．点𝑴# は，ワールド座標系の原点から回転⾏列𝑹だけ回転し，並進ベクトル𝒕だけ平⾏移動したカメラで撮影した点であるとする．𝑴" から𝑴𝒄 への変換は剛体変換で表すことができ，変換の式は𝑴# = 𝑹𝑴" + 𝒕と表される．このときの𝑹と𝒕をカメラの外部パラメータと呼ぶ．𝑹，𝒕はそ
れぞれ次のような⾏列とベクトルである．
𝑟%% 𝑟%& 𝑟%'𝑡%
𝑹 = .𝑟&% 𝑟&& 𝑟&' / , 𝒕 = .𝑡& /𝑟'% 𝑟'& 𝑟''𝑡'
同次座標を⽤いると，この変換は以下のようになる．
5 # ~𝑫𝑴
5"𝑴
ここで，𝑫は外部パラメータからなる以下の 4×4 の⾏列であり，外部パラメータ⾏列と呼
ぶ．
𝑹
𝑫=) (
𝟎

𝑟%%
𝑟&%
𝒕
,=6
𝑟'%
1
0

𝑟%&
𝑟&&
𝑟'&
0

𝑟%'
𝑟&'
𝑟''
0

𝑡%
𝑡&
7
𝑡'
1

ここで，𝟎( の𝑇は⾏列の転置を表し，𝟎('×% = 𝟎%×' となる．
2.1.1-2 カメラ座標系から正規化画像座標系への変換
カメラ座標系に変換した点𝑴# を，カメラ座標系で𝑍# = 1に存在する仮想的な画像平⾯上の点𝒎# へ投影する．この変換を，同次座標で⾏うと次の式になる．
1 0 0 05#
0 # ~ .0 1 0 0/ 𝑴𝒎
0 0 1 0
この変換を，正規化画像座標系への透視投影変換という．

4

2.1.1-3 カメラ座標系から画像座標系への変換
次に，正規化画像座標系の点𝒎# から，画像座標系の点𝒎への変換を考える．この変換は⾏列𝑨を点𝒎𝒄 に掛けることで⾏う．同次座標を⽤いると，変換は以下のような式になる．
0 ~𝑨𝒎
0#
𝒎
このとき，⾏列𝑨は以下のような 3×3 の⾏列である．
𝑓
⎛𝛿*
𝑨=⎜
0
⎝0

0

𝑐*

𝑓
𝛿+
0

+

⎞
𝑐 ⎟
1⎠

ここで，𝑓はカメラの焦点距離，𝑐* , 𝑐+ はカメラ座標系における，カメラの光軸と画像⾯との交点座標を画像座標系で表した位置（画像中⼼），𝛿* , 𝛿+ はそれぞれ横と縦の画素サイズである．
以上のように，⾏列𝑨はカメラの焦点距離，画像中⼼，画素サイズからなる⾏列である．この⾏列𝑨を内部パラメータ⾏列と呼び，⾏列𝑨を構成している 3 つの要素をピンホー
ルカメラの内部パラメータと呼ぶ．
以上の変換をまとめて⾏う式は，以下のように表される．
5"0 ~𝑨(𝑹 𝒕)𝑴𝒎
ここで，𝑨(𝑹 𝒕)をまとめると 3×4 の⾏列𝑷になり，座標変換は次のような式になる．
𝑝%% 𝑝%& 𝑝%' 𝑝%,
𝑷 = 𝑨(𝑹 𝒕) = .𝑝&% 𝑝&& 𝑝&' 𝑝&, /𝑝'% 𝑝'& 𝑝'' 𝑝',
5"
0 ~𝑷𝑴
𝒎
この⾏列𝑷を透視投影⾏列，またはカメラ⾏列と呼ぶ．⾏列𝑷を，同次座標で表現した 3 次
元ワールド座標に掛けることで，2 次元の画像座標に変換できる事がわかる．透視投影⾏
列を⽤いることで，画像の撮影を⾏列の演算の形で表すことができる．
2.1.2 エピポーラ幾何と𝑬⾏列，𝑭⾏列
2 台のカメラで撮影した画像の間の関係を，エピポーラ幾何を⽤いて表すことができる．エピポーラ幾何の説明を図 2.2 に⽰す．ある 3 次元点𝑴が 2 台のカメラで撮影されたとする．このとき，2 つのカメラの投影中⼼と点𝑴でできる平⾯を，エピポーラ平⾯と呼ぶ．また，エピポーラ平⾯と 2 つの画像⾯が交わる線をエピポーラ線，2 つのカメラのカ
メラ中⼼を結んだ線が画像⾯と交わる点をエピポールと呼ぶ．

5

!

エピポーラ平⾯

エピポーラ線

画像平⾯2

画像平⾯1
#!

#"

カメラ中⼼!!
エピポール"!

カメラ中⼼!"

エピポール""

図 2.2 エピポーラ幾何
図 2.2 のように，3 次元点𝑴が画像平⾯ 1 において𝒙% の位置に観察されたとする．このとき，画像平⾯ 2 における対応する観察点𝒙& は，エピポーラ線上に存在する．𝒙% , 𝒙& が正規化画像座標系での同次座標であるとき，任意の𝒙% , 𝒙& の間で𝒙(& 𝑬𝒙% = 0(2. 1)の関係が成り⽴ち，この 3×3 の⾏列𝑬を基本⾏列（Essential Matrix，𝑬⾏列）と呼ぶ．𝑬
⾏列はカメラ間の位置関係（𝑹と𝒕）のみで決まり，正規化画像座標系における対応点同⼠の関係を表現している．𝑬⾏列に内部パラメータの情報は含まれていない．
𝒙% , 𝒙& に内部パラメータ⾏列𝑨を掛けると，通常の画像座標を得る．2 つの画像が内部パ
0 % = 𝑨𝒙% , 𝒎
0& =ラメータ⾏列𝑨を持つ 1 台のカメラで撮影されたとすると，画像座標は𝒎𝑨𝒙& となる．この画像座標間の関係を，以下の式で表すことができる．
0 (& 𝑭𝒎
0% = 0𝒎(2. 2)⾏列𝑭も 3×3 の⾏列であり，基礎⾏列（Fundamental Matrix，𝑭⾏列)と呼ばれる．𝑭⾏列には，カメラの内部パラメータと外部パラメータ両⽅の情報が含まれている．𝑬⾏列と𝑭⾏列には以下の関係がある．
𝑬 = 𝑨( 𝑭𝑨
𝑬⾏列や𝑭⾏列によって画像座標間の関係が表されている．２枚の画像上の，２つの画像
座標が空間上の同じ点に対応していればこの条件を満たし，これをエピポーラ拘束と呼ぶ．
2.1.3 8 点アルゴリズム
通常のカメラに関するエピポーラ拘束条件として式(2.2)がある．この拘束条件を利⽤して，𝑭⾏列を推定するアルゴリズムを説明する．
ここまでは 1 組の対応点について考えたが，対応点の組が N 組ある場合を考える．まず
𝑢𝑢- ′0 - = 2𝑣- 3 , 𝒎
0 .- = .𝑣- ′/であN 組のうち，𝑖番⽬の対応点について考える．𝑖番⽬の対応点が𝒎1
1(0 - ′ 𝑭𝒎
0 - = 0となる．この式は，⾏列𝑭の 9 要素を列ベクトるとき，エピポーラ拘束条件は𝒎ルとして，次のように変形できる．
𝒖(- 𝒇 = 06

(2. 3)

ここで，𝒖- と𝒇は以下のようなベクトルである．
𝒖- = (𝑢- . 𝑢-

𝑢- . 𝑣-𝑢- .

𝑣- . 𝑢-𝑣- . 𝑣-

𝒇 = (𝑓%%

𝑓%'

𝑓&%

𝑓&&

𝑓&'

𝑓%&

𝑣- .

𝑓'%

𝑢-

𝑓'&

1)(

𝑣𝑓'' )(

N 組の対応点が与えられた場合，𝒖- を積み重ねた次の連⽴⽅程式を解くことで𝑭⾏列を求めることができる．
𝑼𝒇 = 0
ここで，𝑼は𝒖- を積み重ねた N×9 の⾏列
𝑢% ′𝑢%
𝑼=. ⋮𝑢/ ′𝑢/

𝑢% . 𝑣%⋮𝑢/ . 𝑣/

𝑢% .
⋮
𝑢/ .

𝑣% . 𝑢%⋮𝑣/ . 𝑢/𝑣% . 𝑣%⋮𝑣/ ′𝑣/

𝑣%.
⋮
𝑣/.

𝑢%
⋮
𝑢/

𝑣%
⋮
𝑣/

1
⋮/
1

(2. 4)

である．これにより，エピポーラ拘束条件の式から，対応点の組の数だけ式がある連⽴⽅程式を得る．
2 つの画像の複数の対応点から𝑭⾏列を求めるアルゴリズムに，式(2.3)を⽤いる 8 点ア
ルゴリズムがある．𝑭⾏列は 9 個の要素があるが，定数倍の⾃由度があるため，8 組以上の対応点があれば𝑭⾏列を計算できる．対応点が 8 組ちょうどの場合は，単に連⽴ 1 次⽅
程式を解けばよい．対応点が 9 組以上ある場合は，最⼩⼆乗法を⽤いて𝑭⾏列を求める．
対応点が N 組ある場合，エピポーラ拘束条件の式から，以下のようになる．
/

0 - ′( 𝑭𝒎
0 - )&
𝑭 = argmin d(𝒎
𝑭

-1%

(

0 - ′ 𝑭𝒎
0 - = 𝑼𝒇であることから書き換えるとこの式を，𝒎/𝒇 = argmin d(𝑼𝒇)&
𝒇

/

-1%

d(𝑼𝒇)& = 𝒇( 𝑼( 𝑼𝒇-1%

𝒇 = argmin 𝒇( 𝑼( 𝑼𝒇𝒇となる．ここで，𝒇のスケールは任意である．𝒇 = 0となるのを避けるために拘束条件として‖𝒇‖ = 1を加えて解く場合，𝒇は𝑼( 𝑼の最⼩固有値に対応する固有ベクトルである．あるいは𝑼( 𝑼を特異値分解し，最⼩特異値に対応する特異ベクトルとして求めることもできる．
上記の計算法を通常の画像座標にそのまま⽤いると，計算誤差の影響が⼤きくなる．計
算精度を上げる⼿法として Hartley の正規化 8 点アルゴリズムがある．これは画像の座標
原点を，通常の左上から特徴点の重⼼へ移し，画像のスケールを−√2〜√2の範囲に拡⼤縮⼩する正規化の処理を⾏い，そして線形解法を適⽤する解法である [2] [3]．
本研究では MATLAB のコンピュータビジョンツールボックスを⽤いた．このツールボックスには𝑭⾏列を推定する関数 estimateFundamentalMatrix がある．この関数では，下7

枠内⼿順 2.1 のように，Hartley の正規化 8 点アルゴリズム [3]を⽤いて𝑭⾏列を推定している．
⼿順 2.1 MATLAB の正規化８点アルゴリズムの実装
１．スケールと画像原点について正規化を⾏う
２．対応点𝒙, 𝒙′から式(2.4)のように制約⾏列𝑼を作る
３．⾏列𝑼を特異値分解し，最⼩特異値に対応する特異ベクトルを⾏列𝑭'×' に変形する
４．𝑭を特異値分解する．3 つある特異値の 3 番⽬を 0 にすることで，rank2になるという拘束を満たすよう調整する
５．正規化をもとに戻す
６．⾏列𝑭をノルムで割って１に正規化する
本研究では𝐹⾏列の推定に 8 点アルゴリズムを⽤いたが，より精度の⾼いアルゴリズムとして FNS 法などが存在する [4]．
2.1.4 アウトライアと RANSAC
画像から特徴点を検出し，対応付けを⾏うとき，異なる特徴を間違って対応付けてしまうことがある．間違って対応付けされた特徴点をアウトライア（外れ値）と呼ぶ．反対に，正しく対応付けされた特徴点をインライアと呼ぶ．アウトライアが存在すると，𝑭⾏列の推定精度に悪影響を与える．そのため，𝑭⾏列を計算する前にアウトライアを除去する必要がある．アウトライアを除去するアルゴリズムとして，RANSAC（Random Sample
Consensus）がある．MATLAB の関数 estimateFundamentalMatrix では，𝑭⾏列を計算する際に外れ値を除去するオプションとして RANSAC を使⽤できる．
2.1.5 𝑭⾏列からカメラモーションを求める
求めた𝑭⾏列から，２枚の画像を撮影したカメラの回転⾏列𝑹と並進ベクトル𝒕を求める
ことができる．このために，まず，𝑭⾏列から内部パラメータ⾏列𝑨を⽤いて𝑬⾏列を求める．
𝑬 = 𝑨( 𝑭𝑨
𝑬⾏列と 2 画像の対応点の組から特異値分解を⽤いてカメラの動き（𝑹と𝒕）を計算す
る．𝑬⾏列は次のように分解できることがわかっている．
𝑬 = [𝒕]× 𝑹
ここで，[𝑡]× は並進ベクトルの各要素𝑇3 , 𝑇4 , 𝑇5 を⽤いる以下のような⾏列である．
0[𝒕]× = k 𝑇5
−𝑇4

−𝑇5
0
𝑇3

8

𝑇4
−𝑇3 l
0

この⾏列は歪対称⾏列と呼ばれる．歪対称⾏列は[𝑡](× = −[𝑡]× という性質を持っている．また，この⾏列を⽤いてベクトルの外積を表すことができる．あるベクトル𝒂, 𝒃があったと
き𝒂の歪対称⾏列を𝒃に掛ける演算[𝒂]× ∙ 𝒃は，𝒂とｂの外積𝒂 × 𝒃と等しくなる．
𝑭⾏列を𝑹, 𝒕に分解するアルゴリズムは以下のようになる [3]．
⼿順 2.2 MATLAB 関数 relativeCameraPose のアルゴリズム
1.

𝑬⾏列を特異値分解する 𝑬 = 𝑼𝑫𝑽(2.

特異値⾏列 D から，１番⽬と２番⽬の特異値の平均を e とする

3.

3 つの特異値を𝑒, 𝑒, 0として，𝑬 = 𝑼 𝑑𝑖𝑎𝑔(𝑒, 𝑒, 0) 𝑽( とする4.

l

⾏列 E を特異値分解する 𝑬 = 𝑼𝑺𝑽(
0 −1 00 1 0
2 つの⾏列𝑾 = .1 0 0/ 𝒁 = .−1 0 0/を作成
0 0 1
0 0 0
回転⾏列

6.

U,W,V から取りうる可能性のある回転⾏列 2 つを作成する

5.

𝑹𝟏 = 𝑼𝑾𝑽(
𝑹𝟐 = 𝑼𝑾( 𝑽(
7.

回転⾏列であることから，⾏列𝑹𝟏, 𝑹𝟐の⾏列式が 1 になるよう符号を調整する

l

並進ベクトル

8.

並進ベクトルについて，歪対称⾏列を𝑼, 𝒁から作成[𝒕]× = 𝑼𝒁𝑼(9.

歪対称⾏列から並進ベクトルを求める

この時点で，𝑹, 𝒕の組み合わせは，それぞれにプラスとマイナスがあり，合計 4 つが存在する．この内，物理的に実現可能な組み合わせを選ぶ．組み合わせの中には，3 次元点
がカメラの後ろ側に存在することになるものもあり，これは物理的に不可能である．
MATLAB の関数では，4 つの組み合わせの中で，物理的に実現可能なものだけを残すことで符号を決定している．また，並進ベクトル𝒕の⼤きさは決定することができないので，単位ベクトル化した𝒕を求める．
2.1.6 特徴点の３次元空間における位置を求める
以上で 2 つのカメラ間の並進ベクトルと回転⾏列が求まった．内部パラメータは既知であることから，特徴点の３次元空間における位置を求めることができる．3 次元位置は投影中⼼から観察点への視線を考え，2 つの画像からの視線が交わる点が観察点の 3 次元位置であるとすることで求められる．

9

2.2 Structure from Motion
複数枚の画像が撮影され，画像に写っている特徴点の対応がわかっているとする．この対応点の情報のみから，特徴点の 3 次元位置とカメラの動きを推定することを Structurefrom Motion（SfM）と呼ぶ．2.1 節で述べた⼿順を繰り返し⾏えば良い．SfM の⼿順は以下のようになる．
⼿順 2.3 SfM の処理の流れ
1.

２枚の画像から特徴点を検出し，特徴点を対応させる

2.

対応した点から F ⾏列を推定する

3.

F ⾏列からカメラの回転 R と並進 t を推定する

4.

特徴点の３次元位置を計算する

5.

複数視点からの復元結果の誤差が最⼩になるよう最適化を⾏う

内部パラメータが既知の場合，𝑭⾏列を求める際に必要な対応点の組の数を考える．回
転は⾃由度 3 であり，平⾏移動はスケールが決まらないことから，⾃由度は 2 である．以
上より，外部パラメータの⾃由度（変数の数）は 3＋2＝5 ⾃由度となる．よって，内部パラメータがわかっている場合は，最低で 5 つの対応点の組があれば，𝑭⾏列を計算することができ，カメラの動きと物体の 3 次元構造を計算できる．ただし，画像だけを⽤いている場合には，原理的にスケールを定めることはできない．
2.2.1 バンドル調整
多数の画像から SfM を⾏う場合，全ての画像を同時に処理するのではなく，2 枚の画像
で SfM を⾏い，それを順番に積み重ねていく．𝑭⾏列や𝑬⾏列の推定を，複数枚の画像から連続して⾏うと誤差が蓄積する．蓄積した誤差の影響を⼩さくするために，バンドル調
整を⾏う．バンドル調整とは，カメラの内部パラメータ，外部パラメータ，復元した 3 次
元点の座標を微⼩に変化させ，誤差が最も⼩さくなるように調整することである．
具体的には，以下のコスト関数𝐸𝑟𝑟を最⼩化するような内部パラメータ，外部パラメー
タ，３次元座標を求める．コスト関数は次のようになる．
6

7

&
&
1
𝐸𝑟𝑟(𝑷% … 𝑷6 , 𝒒% … 𝒒7 ) = d d •)𝑢-8 − 𝑢€•𝑷- , 𝒒8 ‚, + )𝑣-8 − 𝑣€•𝑷- , 𝒒8 ‚, ƒ2
-1% 81%

ここで𝑷は内部パラメータと外部パラメータからなる透視投影⾏列，𝒒は復元された 3 次元点，(𝑢-8 , 𝑣-8 )は画像の特徴点座標，(𝑢€•𝑷- , 𝒒8 ‚, 𝑣€•𝑷- , 𝒒8 ‚)は𝒒を画像⾯に再投影して得られた
2 次元座標である．
バンドル調整の計算には，⾮線形最⼩⼆乗法を利⽤する．⾮線形最⼩⼆乗法を解くためのアルゴリズムとして Levenberg‒Marquardt 法がある．⾮線形最⼩⼆乗法を解くライブラ
リとして，Ceres Solver や MATLAB の lsqnonlin 関数がある．

10

2.3 画像特徴
画像中のコーナーのように顕著な変化が⽣じている箇所を特徴点という．また，その特徴点の内容を記述するものを特徴量という．特徴点を検出する⽅法として，FAST や DoGがある．また，特徴量を記述する特徴記述⼦には特徴をベクトルとして表す SIFT やバイ
ナリコードとして表す BRIEF がある．特徴検出と特徴記述⼦を組み合わせて，画像から特徴点を検出，記述する⼿法として，SIFT や AKAZE，ORB が存在する．
特徴をバイナリコードとして表現する⽅法の利点として，ベクトル表現の場合と⽐較してメモリ消費が少ない，類似度を⾼速に計算できる事が挙げられる．これらの特徴点を⽤いて SfM の処理を進める⽅法を，特徴点ベースの⽅法と呼ぶ．
2 枚の画像があったとき，それぞれの画像の 2 つの特徴点が同じ部分を⽰しているかを判定する⼿法を特徴点マッチングという．これにより，異なる画像の間で同じものを写している点を対応付けることができる．特徴量がベクトルの場合，特徴点の類似度はユーク
リッド距離として求められる．バイナリコードで表現されている ORB の場合は，ハミン
グ距離を類似度とする．

2.4 360 度画像の表現形式
360 度画像を撮影できるカメラが⼀般的に⼊⼿できるようになっており，図 2.3 に⽰す
ような RICHO THETA，GoPro MAX や Insta360 などがある．これらは，180 度以上の視野を持つ⿂眼レンズを 2 つ組み合わせることで，360 度視野の画像や動画を撮影できるようにしている．撮影した画像や動画は，2 つの⿂眼画像から変換され，正距円筒画像の形式で保存される．

図 2.3 360 度カメラの例
左：RICHO THETA Z1 中央：GoPro MAX 右：Insta360 ONE X2
2.4.1 正距円筒画像
通常の透視投影画像は 180 度より⼤きな視野を表現することができない．360 度画像を保存するための形式として，正距円筒図法（Equirectangular）がある．これは，画像の横軸に経度，縦軸に緯度をとり，2 軸が等間隔かつ直交するような形式である．正距円筒図

11

法で保存された画像を，正距円筒画像と呼ぶ．正距円筒画像では，緯度が⾚道から縦⽅向に離れるほど，像が横⽅向に引き伸ばされる．図 2.4 に正距円筒図法の例を⽰す．⾚道上で正円であるオレンジの円が，上下⽅向では横に引き伸ばされている事がわかる．

図 2.4 正距円筒図法の例 [5]
正距円筒画像では座標を緯度𝜑と経度𝜃の 2 つで表す．画像の中央を原点として，θは−𝜋~𝜋，𝜑は-π/2~π/2 の範囲をとる．図 2.5 に正距円筒画像の座標系と撮影例を⽰す．
!
2

-π

$

−

&

π

%

!
2

図 2.5 正距円筒画像
左：正距円筒画像の座標 右：正距円筒画像の例
2.4.2 単位球⾯上に像を写すカメラモデル
360 度画像を⽤いた SfM の計算を考えやすくするため，360 度カメラで撮影された正距円筒画像を単位球⾯モデルに変換して扱う．そのために，正距円筒画像から検出された特徴点の座標を，単位球⾯上の３次元座標に変換する．これは，正距円筒形式の世界地図の⼀点を，地球儀上の⼀点に変換することに相当する．単位球⾯モデルは半径 1 の単位球を考え，その球⾯がカメラの撮像⾯であるとする．図 2.6 に単位球⾯モデルの図を⽰す．単位球⾯モデルでは焦点距離が 1，画像中⼼が座標原点である．

12

Y
Z
!

1

X

図 2.6 単位球⾯モデル

2.5 SLAM
SfM と関連する技術として，Simultaneous Localization And Mapping（SLAM）がある． SLAM は加速度センサや画像センサからのデータを⽤いて，⾃⾝の移動情報と周辺地図を同時に推定する技術であり，⾃動運転などの分野に⽤いられている．特に，画像セン
サのみを⽤いて SLAM を⾏う技術を画像 SLAM（Visual SLAM）と呼ぶ．画像 SLAM の主な研究には，PTAM [6]や ORB-SLAM [7]，LSD-SLAM [8]などがある．
これらの⼿法は周辺地図の復元⽅法によって，主に 2 種類に分かれる．1 つ⽬は特徴点
ベースの⽅法と呼ばれるもので，PTAM や ORB-SLAM が該当する．この⽅法では画像から特徴を抽出し，特徴の 3 次元位置を復元している．2 つ⽬は直接法と呼ばれるもので，
LSD-SLAM が該当する．直接法では画像の輝度勾配を利⽤し，画素単位で 3 次元位置を復元している．

13

第3章 360 度画像による SfM
第 3 章では， 360 度画像を⽤いて SfM を⾏う⼿法について述べる．
3.1 360 度画像を⽤いた 2 画像間の 3 次元復元
3.1.1 画像特徴の抽出
画像特徴は正距円筒画像から検出する． 特徴検出には MATLAB の関数
detectORBFeatures を⽤いる．この関数では特徴検出器に Oriented FAST，特徴記述⼦にORB を⽤いる．
3.1.2 正距円筒画像から単位球⾯モデルへの変換
正距円筒画像から単位球⾯上の座標への変換は，2 段階の処理で⾏う．まず，正距円筒
画像の座標値(𝑖, 𝑗)から⾓度(θ, φ)を求める．そして，(θ, φ)を単位球⾯上の 3 次元座標
(𝑋, 𝑌, 𝑍)に変換する．正距円筒画像の画素数を横𝑥𝑆𝑖𝑧𝑒，縦𝑦𝑆𝑖𝑧𝑒とすると，(θ, φ)は次の式で求められる．
𝜃=
𝜑=

𝑖−1
𝜋
𝑥𝑆𝑖𝑧𝑒 − 1𝜋(−𝑗 + 𝑦𝑆𝑖𝑧𝑒) 𝜋−−1 + 𝑦𝑆𝑖𝑧𝑒
2

また，単位球⾯上の 3 次元座標(𝑋, 𝑌, 𝑍)は次の式で求められる．
𝑋 = cos𝜑sin𝜃
𝑌 = sin𝜑𝑍 = cos𝜑cos𝜃
3.1.3 360 度画像に対する𝑬⾏列の計算
単位球⾯モデルにおいてもエピポーラ拘束が成り⽴つことが知られている [9]．単位球
⾯上の点を𝒆% , 𝒆& とする．この点をそれぞれ𝜆倍，𝜆. 倍すると，3 次元点𝑴になる．このことから，
𝜆𝒆% = 𝑴
𝜆′𝒆& = 𝑴′ = 𝑹𝑴 + 𝒕
上式から，
𝜆′𝒆& = 𝜆𝑹𝒆% + 𝒕
𝜆′𝑒& − 𝜆𝑅𝑒% − 𝑡 = 0
従って，𝒆& , 𝑹𝒆% , 𝒕が１つの平⾯上にあるので，𝑬 = [𝒕]× 𝑹として𝒆(& 𝑬𝒆% = 0以上から，単位球⾯上の点の対応点の関係を𝑬⾏列で表す事ができる．

14

単位球⾯モデルに変換した特徴点の３次元座標を使って，通常画像の場合と同様に𝑬⾏
列を 8 点アルゴリズムで求める．処理⼿順としては最⼩⼆乗法で𝑬⾏列を求めた後，特異値の調整を⾏う．
まず，以下のような⾏列𝑩を作成する．
𝑥% ′𝑥%
𝑩/×9 = . ⋮𝑥/ ′𝑥/

𝑥% . 𝑦%⋮𝑥/ . 𝑦/𝑥% . 𝑧%⋮𝑥/ . 𝑧/𝑦% . 𝑥%⋮𝑦/ . 𝑥/𝑦% . 𝑥%⋮𝑦/ . 𝑥/𝑦% . 𝑧%⋮𝑦/ . 𝑧/𝑧% ′𝑥%⋮
𝑧/ ′𝑥/

𝑧% ′𝑦%⋮
𝑧/ ′𝑦/

𝑧% ′𝑧%⋮ /𝑧/ ′𝑧/

また，𝑬⾏列の要素を縦に並べたベクトルを作成する．
𝑬 = (𝑒%%

𝑒%&

𝑒%'

𝑒&%

𝑒&&

𝑒&'

𝑒'%

𝑒'&

𝑒'' )(

𝑩𝑬 = 0を満たすような𝑬を計算する．特徴点の抽出には誤差を含むので，最⼩⼆乗法を⽤いて，𝑩𝑬が最⼩になるような𝑬を求める．このとき，𝑬⾏列が 0 にならないように||𝑬|| =1という制約を追加する．このような制約のある最⼩⼆乗法を解く⽅法として，特異値分解を⽤いる⽅法がある．⾏列𝑩の最⼩特異値に対応する特異ベクトルが最⼩⼆乗解となる．
次に，𝑬⾏列の性質を⽤いて，求めた𝑬⾏列を調整する．ノイズのない環境で計算された𝑬⾏列の 3 つの特異値を𝑆% ~𝑆' とすると，𝑆% = 𝑆& ，𝑆' = 0であるという性質がある [3]．この特性に合うよう⾏列の特異値を調整することで，𝑬⾏列を求める．⼿順は以下のようになる．2 枚の単位球⾯画像の対応する観察点の座標を𝒏 = (𝑥, 𝑦, 𝑧), 𝒏. = (𝑥 . , 𝑦 . , 𝑧′)であるとし，対応点が N 組あるとする．
⼿順 3.1 𝑬⾏列の計算
1.

⾏列𝑩/×9 を作る
𝑩/×9𝑥% ′𝑥%=. ⋮𝑥/ ′𝑥/

𝑥% . 𝑦%⋮𝑥/ . 𝑦/𝑥% . 𝑧%⋮𝑥/ . 𝑧/𝑦% . 𝑥%⋮𝑦/ . 𝑥/𝑦% . 𝑥%⋮𝑦/ . 𝑥/𝑦% . 𝑧%⋮𝑦/ . 𝑧/𝑧% ′𝑥%⋮
𝑧/ ′𝑥/

𝑧% ′𝑦%⋮
𝑧/ ′𝑦/

𝑧% ′𝑧%⋮ /𝑧/ ′𝑧/

2.

𝑩を特異値分解する 𝑩 = 𝑼𝑺𝑽(

3.

最⼩特異値に対応する特異ベクトル，すなわち𝑽の最後の列から𝑬'×' を作る

4.

𝑬⾏列の特異値𝑆% ~𝑆' が𝑆% = 𝑆& ，𝑆' = 0であるという制約から，
𝑬を特異値分解し，𝑬 = 𝑼 𝑑𝑖𝑎𝑔(1,1,0) 𝑽とする

以上の⽅法によって求めた𝑬⾏列には，符号の不確定性が残る．すなわち，𝑬⾏列を𝑹, 𝒕に分解したとき，それぞれに符号の異なる複数個の解が求まる．また，𝑬⾏列の計算において RANSAC を⽤いて対応点の外れ値を除去する．これにより，外れ値の影響による推定誤差を少なくし，頑健な推定を⾏う．RANSAC は，以下の⼿順で処理する．

15

⼿順 3.2 RANSAC
繰り返し回数：𝑙𝑜𝑜𝑝

結果の𝑬⾏列：𝑬;<=*>?

1.

検出した特徴点からランダムに８点選ぶ

2.

選んだ特徴点から𝑬⾏列を求める

3.

𝑬⾏列の精度を表す誤差の評価値を求める

4.

誤差の評価値が以前より⼩さくなっていれば𝑬;<=*>? = 𝑬とする

5.

1~4 を𝑙𝑜𝑜𝑝回繰り返す

6.

𝑬;<=*>? が最終的な𝑬⾏列となる

3.1.4 𝑬⾏列からカメラモーションを求める
計算した𝑬⾏列を，並進ベクトル𝒕と回転⾏列𝑹に分解する．まず，𝑬⾏列から並進ベクトルを計算する．この時点で並進ベクトルの符号を確定させることはできないので，並進ベクトルの候補として𝒕% を求める．𝑬⾏列から並進ベクトルを求める⽅法は次のようになる．
𝑬 = [𝒕]× 𝑹
𝑬( 𝒕 = 𝑹( [𝒕](× 𝒕 = 0
𝑬𝑬( 𝒕 = 0
𝑬𝑬( = 𝑼𝚲𝑼:% = (𝒖%𝒖&𝒖' ) 𝑑𝑖𝑎𝑔(𝜆%𝜆&𝜆' ) (𝒖%𝒖&𝒖' ):%

以上より，𝑬𝑬( の最⼩固有値𝜆6-7 に対応する単位固有ベクトル𝒖6-7 が並進ベクトル𝒕% になる [4]．
まとめると，𝑬⾏列から並進ベクトルを求める⼿順は⼿順 3.3 となる．
⼿順 3.3 𝑬⾏列から並進ベクトル𝒕% を求める
1.

対称⾏列𝑬𝑬( を固有値分解する．

2.

最⼩固有値に対応する単位固有ベクトルを𝒕% とする

この時点で𝑬⾏列と𝒕% の符号は不確定である．通常のカメラであれば，𝑹, 𝒕の符号の異なる組み合わせのうち，復元した 3 次元点がカメラの前⽅に多く存在する組み合わせを選べば良い．しかし，360 度カメラでは全⽅向に 3 次元点が復元されるため，この⽅法を⽤いることができない．
𝑬⾏列と𝒕% の符号を決めるために，外積（ベクトル積）を⽤いる．ある 3 次元点𝒑がある
とき，カメラ 1 の座標系での座標を𝒑% ，カメラ 2 の座標系での座標を𝒑& とする．カメラ 1と 2 における点𝒑の観察点をそれぞれ𝒆% , 𝒆& とすると，𝒑% , 𝒑& はそれぞれ観察点を𝐿% 倍，𝐿&
倍した位置にあることになる．これは以下の式で表される．
𝒑% = 𝐿% 𝒆%
𝒑& = 𝐿& 𝒆&
𝒑& をカメラ 1 の座標系に変換する式𝒑% = 𝑹𝒑& + 𝒕に上式を代⼊すると，

16

𝐿% 𝒆% = 𝑹(𝐿& 𝒆& ) + 𝒕となる．両辺と並進ベクトルの歪対称⾏列[𝒕]× の積を取ると，左辺が𝐿% [𝒕]× 𝒆% ，右辺が𝐿& [𝒕]× 𝑹𝒆& = 𝐿& 𝑬𝒆& となるので，
𝐿% [𝒕]× 𝒆% = 𝐿& 𝑬𝒆&となる．よって，[𝒕]× 𝒆% と𝑬𝒆& の符号が⼀致する𝒕と𝑬の組み合わせ２組を残す．次に，回転⾏列𝑹を 2 組の𝒕と𝑬から計算する．𝑹は 2 組のどちらも同じ値になる．最後に，エピポー
ラ⾯を上から⾒たとき，𝒕 × 𝒆% と𝒆% × 𝒆𝟐 の向きが同じである組み合わせが正しい𝒕と𝑹とする．まとめると，𝑬と𝒕% の符号を決定するアルゴリズムは⼿順 3.4 のとおりである．
⼿順 3.4 ⼿順 3.3 に続いて𝑹, 𝒕を決定する
画像 1 の特徴点：𝑝% ，画像 2 の特徴点：𝑝&1.

𝒕% から歪対称⾏列[𝒕]× を作る

2.

𝒂 = [𝒕]× 𝑝% , 𝒃 = 𝑬𝑝% とする

3.

すべての観察点について𝒂, ｂの内積を求め⾜し合わせる 𝑠𝑢𝑚 += 𝒂( ∙ 𝒃

4.

sum が 0 以上の場合，𝒕& = −𝑡% , 𝑬% = 𝑬, 𝑬& = −𝑬
それ以外の場合，𝒕& = −𝑡% , 𝑬% = −𝑬, 𝑬& = 𝑬とする

l

回転⾏列の計算1.

𝑲 = −𝒕% 𝑬% とする

2.

K を特異値分解する 𝑲 = (𝑼, 𝑺, 𝑽)

3.

回転⾏列 R を求める 𝑹 = 𝑼 𝑑𝑖𝑎𝑔(1,1, det(𝒖 ∗ 𝒖( )) 𝑽(l𝒕の符号を決定する

1.

𝒂 = 𝑹( 𝒕% × 𝑹( 𝑝%2.

𝒃 = 𝑹( 𝑝% × 𝑝& とする

5.

すべての観察点について𝒂, ｂの内積を求め⾜し合わせる 𝑠𝑢𝑚 += 𝒂( ∙ 𝒃

3.

sum が 0 より⼤きい場合並進ベクトル𝒕 = 𝒕%
それ以外の場合𝒕 = 𝒕& とする𝒕のスケールを決めることはできないため，𝒕は単位ベクトルとして求める．
3.1.5 ２画像からの 3 次元位置計算
2 つの特徴点に対応した視線を考え，2 本の直線が最も近くなる点が解であるとする．
基準となるカメラをカメラ 1，もう⼀台のカメラをカメラ 2 とよび，それぞれのカメラにおける空間の点𝑴の観察点を𝒑，𝒒とする．

17

!(#, %, &)
y

y

-

O

.

z

z
x
x

camera1(/

camera2

図 3.1 2 つの 360 度カメラで撮影した場合の模式図
図 3.1 において，カメラ 2 はカメラ 1 に対して，x 軸⽅向に𝒕移動して，y 軸回りに𝑹回転している．ワールド座標系はカメラ 1 のカメラ座標系と同じであるとする．点𝑴の 2 つの観察点𝒑，𝒒のそれぞれのカメラ座標系における座標値がわかっている場合に，点𝑴の 3 次
元位置(𝑥, 𝑦, 𝑧)を求める⽅法を説明する．図 3.1 において，カメラの中⼼と観察点を通る直線を引き，2 本の直線が交わるところが点𝑴の位置である．実際の 360 度カメラから求めた 2 本の直線は，観察誤差の影響で，3 次元空間上で交わらないことが多いので，2 本の直線が最も近づく 2 点を求め，それらの中点を点𝑴の 3 次元座標とする．カメラ 2 が回転運動をしているので，点𝒒をワールド座標系へ合わせるために，カメラ 2 に回転の補正を施した後にカメラ２からの視線を考える．
2 本の直線上の点をそれぞれ，
𝑥A
𝑥A+
𝑥%
𝑥%+
𝒍% = .𝑦A / + 𝛼 .𝑦A+ /, 𝒍& = .𝑦% / + 𝛽 .𝑦%+ /
𝑧A
𝑧A+
𝑧%
𝑧%+
というベクトル⽅程式の形で表現する．この 2 点の距離の差が最も⼩さくなる点を求める．それには，次の式で表される 2 点間のユークリッド距離の 2 乗が最⼩になる𝛼，𝛽を求めればよい．
𝑥A
𝑥A+
𝑥%
𝑥%+ &
𝑓(𝛼, 𝛽) = ¢.𝑦A / + 𝛼 .𝑦A+ / − £.𝑦% / + 𝛽 .𝑦%+ /¤¥
𝑧A
𝑧A+
𝑧%
𝑧%+
上式が最⼩になる時，𝑓(𝛼, 𝛽)の𝛼，𝛽による偏微分が 0 であることから，𝛼，𝛽に関する連⽴⽅程式を導き，解を求める．ただし，視差量が少ない特徴点に対して，連⽴⽅程式の解を計算できない場合がある．そのような特徴点では距離の計算を⾏わない処理とした．

3.2 バンドル調整
通常の SfM と同じように，復元した 3 次元点座標，カメラの並進量，回転量を調整するためにバンドル調整を⾏う．本研究での 360 度カメラのモデルでは内部パラメータを考えないので，内部パラメータは調整の対象から外れる．コスト関数は以下のようになる．

18

𝐸(𝑫% … 𝑫6 , 𝒒% … 𝒒7 )

6

7

&
&
&
1
= d d •)𝑢-8 − 𝑢€•𝑫- , 𝒒8 ‚, + )𝑣-8 − 𝑣€•𝑫- , 𝒒8 ‚, + )𝑤-8 − 𝑤§•𝑫- , 𝒒8 ‚, ƒ2
-1% 81%

ここで，𝑫は𝑹, 𝒕からなる推定された外部パラメータ，𝒒8 は推定された 3 次元座標，(𝑢-8 , 𝑣-8 , 𝑤-8 )は単位球⾯上の特徴点座標，(𝑢€•𝑫- , 𝒒8 ‚, 𝑣€•𝑫- , 𝒒8 ‚, 𝑤
§ •𝑫- , 𝒒8 ‚)は外部パラメータ
𝑫で移動したカメラから撮影した，𝒒8 の単位球⾯上の座標である．実装において，⾮線形最⼩⼆乗法の計算には MATLAB の lsqnonlin 関数を利⽤した．

3.3 動画からの SfM
最終的に作成したデモプログラムは，MATLAB のサンプルプログラムとして提供されている ORB-SLAM の初期化処理を基にして作成した．そのプログラムでは，⼊⼒する動画のフレームを順次処理して，⼗分にカメラが移動した２枚のフレームを⾒つけ，それをSfM の対象画像としている．1 枚⽬のフレームは動画の 1 フレーム⽬とする．2 枚⽬のフレームは以下の 3 つの条件を満たしたものになる．
1.

特徴点の数が⼗分な数あること
特徴点の数が 100 点以上のフレームで処理を続ける

2.

再投影誤差の量が少ない特徴点を残す
再投影誤差が⼤きい特徴点は除去する

3.

特徴点の視差量が⼗分あること
1 枚⽬との特徴点の視差を計算する．視差が 2 度以上の点が 50％を超えれば 2 枚⽬のフレームとする．

3.4 作成したプログラムの説明作成したプログラムの動作は以下のとおりである．
1.

画像列を⽤意2.

2 枚の正距円筒画像から特徴を抽出，対応付け

3.

最初のフレームとの特徴マッチング

4.

特徴点から𝑬⾏列を計算

5.

𝑬⾏列からカメラの回転𝑹・並進𝒕を計算

6.

特徴点の 3 次元位置を計算7.

復元した 3 次元位置とカメラの回転・並進についてバンドル調整を⾏う

このうち，画像特徴の検出には MATLAB の関数を⽤いた．実装したプログラムは，2 枚の 360 度画像から 3 次元復元を⾏うものである．MATLAB のバージョン R2020a を⽤いてプログラムを作成した．

19

第4章 実験と考察
4.1 3DCG 画像を⽤いた動作検証
3DCG ソフトの Unity で３次元シーンを作成し，実装したプログラムが動作することを確認した．3 次元シーンは 3 つの⽴⽅体を配置し，特徴点を検出できるようにテクスチャ
画像を貼り付けた．作成したシーンの様⼦を図 4.1 に⽰す．

図 4.1 作成した 3 次元シーン
左：斜め上視点からの画像 右：真上視点からの画像
３次元シーンの原点で基準となる 360 度画像 1 を撮影し，カメラを原点から左⽅向に移動させ，もう⼀つの 360 度画像 2 を撮影した．図 4.2 に画像を撮影した位置を⽰す．
!

!
画像2

"

画像1

図 4.2 シーン中の画像撮影位置
2 枚の 360 度画像から，作成したプログラムで SfM を⾏った．3 次元点とカメラ位置の復元結果を図 4.3 に⽰す．図 4.3 で⽰すように，カメラから⾒えている⽴⽅体の⾯の形状が復元されていることがわかる．また，カメラ位置が⽔平横⽅向にわずかにずれており，カメラ位置も復元できていることがわかる．
20

図 4.3 復元された 3 次元点の様⼦
左：斜め上視点からの復元結果 右：真上視点からの復元結果
4.2 シミュレーションデータでの⽐較実験
360 度画像を⽤いた SfM の精度検証を⾏うために，MATLAB 上でシミュレーションデ
ータを⽣成し，カメラの回転量と並進量を復元した．そして，提案⼿法による SfM の復元
精度と，ピンホールカメラモデルで撮影した通常画像を⽤いた SfM の復元精度を⽐較した．
4.2.1-1 シミュレーションデータの作成⽅法
シミュレーションデータは，原点から 2000〜5000 の距離に，10 万個の 3 次元点を，⼀様乱数を⽤いてランダムに⽣成した．3 次元点を撮影するカメラは，基準となるカメラ 1を原点に置き，カメラ 1 から並進，回転運動をさせた位置にカメラ 2 を配置した．この 2台のカメラで 3 次元点を投影し，SfM する場合についてシミュレーションした．すべての画像で条件が揃うように，復元に⽤いる観察点の点数は 1000 点に統⼀した．
4.2.1-2 通常カメラによる投影
通常のカメラで 3 次元点を画像⾯に投影する場合，内部パラメータと外部パラメータから透視投影変換⾏列（カメラ⾏列）を作成し，観察点を計算した．画像サイズは 1024 画
素×1024 画素，カメラの画⾓ 90 度になるように内部パラメータを設定した．カメラの内部パラメータを表 4.1 に⽰す．
表 4.1 内部パラメータの設定
画像サイズ
焦点距離
画像中⼼
⽔平画⾓

1024×1024
1023/2((1+1024)/2, (1+1024)/2)
90 度

通常画像では 10 万個の３次元点のうち，およそ 16000 点が画像⾯に投影された．このう
ち，1000 点をランダムに選んで残した．投影される点の座標は⼩数点以下の有効桁をもつ浮動⼩数点の値として記録した．

21

4.2.1-3 360 度カメラによる投影
360 度カメラでの観察点は，３次元点までの距離を１に正規化することで求めた．3 次
元点を単位球⾯上に投影したものを単位球⾯画像と呼ぶ．360 度カメラでは 10 万個すべての点を画像⾯に投影することが可能であるが，通常画像と⽐較しやすいように，単位球⾯
画像に投影される観察点の数を 1000 点にする．そのために，投影されたすべての観察点の中から，ランダムに 1000 点を選びだした．
4.2.1-4 ノイズの付与
画像⾯に投影した後，それぞれの観察点にノイズを加えた．通常画像に加えたノイズは
平均 0，標準偏差 1 の正規分布ノイズである．このノイズを x 軸，y 軸それぞれの座標値に独⽴に加えた． 標準偏差１は画素サイズに相当する．
単位球⾯画像においては，以下の考え⽅で，与えるノイズの量を決定した．通常画像の画⾓が 90 度であることと，単位球の円周が2𝜋であることから，通常画像で撮影している
90 度の範囲は，単位球の円周上で2𝜋/4 = 𝑝𝑖/2の⻑さになる．𝑝𝑖/2の範囲を 1024 画素で撮影すると考えると，1 画素あたりの⾓度は𝑁= = (𝑝𝑖/2)/1024 = 0.00153 …である．この値が通常画像の 1 画素に対応するものとして，単位球⾯画像には標準偏差𝑁= のノイズを与えた．
単位球⾯画像にノイズを加える⽅法を述べる．単位球上の観察点において，接平⾯を考える．接平⾯を構成する直交する 2 軸に標準偏差𝑁= のノイズを加えた後，再度単位球⾯に投影した．ノイズの加え⽅を図 4.4 に⽰す．2 軸に同じ量の値を加えることで，点𝑚が𝑚′に移動している．
$

!

%&'()

!
!"#$%

!′

"

%&'()

$

!′
!"#$%

!

#

#

図 4.4 ノイズの加え⽅
左：通常画像 右：単位球⾯画像
図 4.5 に投影した画像を可視化したものを⽰す．左は通常の 2 次元画像であり，右は単位球⾯の座標に点を投影した単位球⾯画像である．

22

図 4.5 SfM に使った画像
左：通常画像の例 右：単位球⾯画像の例
4.2.1-5 シミュレーションの⽅法
上記の⽅法で作成したシミュレーション画像を⽤いて SfM を実⾏する．通常画像については，画像座標から正規化画像座標に変換し，提案⼿法で並進ベクトルと回転⾏列を復元した．⼀⽅，360 度カメラの場合は，2 つの単位球⾯画像から提案⼿法で SfM を⾏った．
また，もう⼀つの⽐較のために追加の単位球⾯画像を作成した．この画像は，すべての点が投影された単位球⾯画像から，通常画像と同じ画⾓に投影されている点を，ランダムに同じ数取り出して作成した．このように作成した単位球⾯画像からも，本⼿法で SfM を⾏い，⽐較を⾏った．以下，この単位球⾯画像を単位球⾯ 1 と呼ぶ．また，既に述べた，
全⽅向の点を写し，観察点の数を通常画像と同じにした単位球⾯画像を単位球⾯ 2 と呼ぶ．実験に⽤いる画像の作成順序を図 4.6 に⽰す．なお，この⽐較実験では，RANSAC による外れ値の除去やバンドル調整は⾏なっていない．

23

単位球⾯2
N=1000
単位球⾯画像
N=100000

3次元点
N=100000
単位球⾯1N=1000

通常画像に投影されたすべての点
N=16000
通常画像
N=1000

図 4.6 通常画像と単位球⾯画像を作る流れ（N は点の数）
4.2.2 復元結果の⽐較⽅法
通常画像，単位球⾯ 1 と単位球⾯ 2 の３画像それぞれで，推定値された並進ベクトルと回転⾏列についてそれらの真値との誤差を⽐較する．⽐較する誤差量として，並進ベクト
ルでは，ノルムを 1 にした真値と推定値の差をとり，そのノルムを求めた．回転⾏列はオイラー⾓に変換し，真値と推定値の３つのオイラー⾓の差をとり，そのノルムを求めた．
異なる３次元点のデータを⽣成する試⾏を 100 回繰り返し，100 回の誤差の平均値と標準偏差を求めた．
4.2.3 カメラの種類・動きと SfM の誤差
カメラが右⽅向，上⽅向，前⽅向に動いたときの誤差の平均と標準偏差を検証した．与えるノイズの標準偏差は 1 に設定した．通常画像と単位球⾯ 1 の画⾓は，90 度に設定した．基準となるカメラ 1 を原点に置く．カメラ 2 を原点から，① 𝑥軸⽅向に 100 動かした
場合，② 𝑧軸⽅向に 100 動かした場合，③ 𝑦軸⽅向に 100 動かした場合，３通りについて，それぞれ 100 回プログラムを実⾏して，誤差の平均，標準偏差を計算した．結果の誤差の平均を表 4.2，標準偏差を表 4.3 に⽰す．

24

表 4.2 各軸⽅向に動かした場合の誤差の平均
移動量!の誤差の平均
通常画像!""の誤差の平均

単位球⾯１ 単位球⾯２
!"

通常画像

!"

単位球⾯１ 単位球⾯２!#2.13×10!# 4.27×10!$

x=100

3.52×10

4.45×10y=100

3.43×10!"

4.22×10!" 2.67×10!"

1.49×10!# 1.84×10!# 3.95×10!$

z=100

7.21×10!"

6.92×10!" 2.41×10!"

1.61×10!# 1.55×10!# 4.23×10!$

2.85×10

1.46×10

表 4.3 各軸⽅向に動かした場合の誤差の標準偏差
移動量!の誤差の標準偏差
通常画像!""の誤差の標準偏差

単位球⾯１ 単位球⾯２!"

通常画像 単位球⾯１ 単位球⾯２

!"

x=100

1.60×10

2.20×10

1.12×108.04×10!# 1.00×10!$ 2.20×10!#

y=100

1.41×10!"

2.09×10!"

1.13×10!"

8.83×10!# 1.15×10!$ 2.03×10!#

z=100

3.17×10!"

3.39×10!"

1.09×10!"

8.26×10!# 8.45×10!# 2.10×10!#

表 4.2，表 4.3 の結果をまとめてグラフにしたものを図 4.7 と図 4.8 に⽰す．
1.20E-03
1.00E-03
8.00E-04

誤差の 6.00E-04
平
均 4.00E-04
2.00E-04
0.00E+00

x=100
通常画像

y=100
単位球⾯１

z=100

単位球⾯２

図 4.7 回転⾏列の誤差の平均値と標準偏差3.50E-02
3.00E-02
2.50E-02

誤
差 2.00E-02の平 1.50E-02
均
1.00E-02
5.00E-03
0.00E+00

x=100
通常画像

y=100
単位球⾯１

z=100

単位球⾯２

図 4.8 並進ベクトルの誤差の平均値と標準偏差25この実験から次のことがわかる．
① 全⽅向の点を投影している単位球⾯ 2 を⽤いた SfM の復元精度が⾼い．
② 同じ点を投影している通常画像と単位球⾯ 1 を⽐較すると，𝑥 = 100と𝑦 = 100では通常画像の精度が少し⾼い．𝑧 = 100ではほとんど同じである．
③ 通常画像と単位球⾯ 1 では，カメラを前⽅向（z 軸⽅向）に移動させたとき，右⽅
向・上⽅向に⽐べて，𝑹の復元精度が悪い．全⽅向の点を投影した単位球⾯ 2 によるSfM ではそのような傾向は顕著でない．
4.2.4 ノイズの量を変化させた場合ノイズの⼤きさと SfM の精度を検証するために，正規分布ノイズの標準偏差を 0.5，
1，2 と変化させた．移動量は𝑥軸⽅向に 100 とした．通常カメラと単位球⾯ 1 の画⾓は 90度とした．100 回実⾏した結果の平均値と標準偏差を計算した．誤差の平均を表 4.4，誤差の標準偏差を表 4.5 に⽰す．
表 4.4 ノイズ量を変化させた場合の誤差の平均
SD

Rの誤差の平均
通常画像tの誤差の平均

単位球⾯１ 単位球⾯２

通常画像

単位球⾯１ 単位球⾯２

0.5 1.73×10!"

2.23×10!"

1.38×10!"

7.17×10!#

8.10×10!#2.08×10!#

1 3.52×10!"

4.45×10!"

2.85×10!"

1.46×10!$

2.13×10!$

4.27×10!#

2 7.79×10!"

9.54×10!"

5.35×10!"

4.32×10!$

7.08×10!$

8.81×10!#

表 4.5 ノイズ量を変化させた場合の誤差の標準偏差SD

Rの誤差の標準偏差
通常画像tの誤差の標準偏差

単位球⾯１ 単位球⾯２

通常画像

単位球⾯１ 単位球⾯２

0.5 6.65×10!"

1.05×10!#

5.51×10!"

3.77×10!$

4.04×10!$

1.08×10!$

1 1.60×10!#

2.20×10!#

1.12×10!#8.04×10!$1.00×10!%

2.20×10!$

2 2.83×10!#

4.70×10!#

2.43×10!#

2.84×10!%

4.26×10!%

4.98×10!$

結果をグラフにしたものを図 4.9 と図 4.10 に⽰す．

26

1.60E-03
1.40E-03
1.20E-03

誤 1.00E-03
差の 8.00E-04
平
均 6.00E-04
4.00E-04
2.00E-04
0.00E+00

0.5

1

2

ノイズの標準偏差[画素]
通常画像

単位球⾯１

単位球⾯２

図 4.9 ノイズ量を変化させた場合の𝑹の誤差の平均と標準偏差1.20E-01
1.00E-01
8.00E-02

誤差の 6.00E-02
平
均 4.00E-02
2.00E-02
0.00E+00

0.5

1

2

ノイズの標準偏差[画素]
通常画像

単位球⾯１

単位球⾯２

図 4.10 ノイズ量を変化させた場合の𝒕の誤差の平均と標準偏差
図 4.9 から，すべての場合において，ノイズの量が増えるほど推定誤差も増えていることがわかる．また，図 4.10 の場合は，通常画像と単位球⾯の誤差が増えているのに対して，単位球⾯ 2 の誤差があまり増えていないことがわかる．
4.2.5 シミュレーションデータを⽤いた実験についての考察
360 度画像の単位球⾯ 2 を⽤いた SfM の誤差は，通常画像の誤差より⼩さいことがわかった．また，観察点のノイズが増えた場合でも，並進量の誤差の増加量が⼩さいことがわ
かった．4.2.3 において，通常画像と視野⾓を同じにした単位球⾯ 1 では，誤差が通常画像と同じか，悪くなっていた．このことから，360 度画像では全⽅向の点を使って𝑬⾏列を計算できることが精度向上の要因であると考える．
単位球⾯ 2 において，カメラを右，上⽅向に動かした場合と前⽅向に動かした場合で回転の復元結果に差が⽣じなかった．これは，360 度カメラで観察される点の動きに⽅向性がないためと考えられる．通常画像では，カメラが前⽅向に動いた場合，観察点の移動量が⽐較的⼩さくなる．⼀⽅，360 度カメラでは，観察点の移動量が⽐較的⼤きいカメラ横⽅向の観察点も計算に利⽤することができる．このことが， 360 度カメラの回転量の復元
誤差が移動⽅向によらず，⼀定になる原因と考える．
27

4.3 実写画像を⽤いた動作検証
4.3.1 実験内容
作成したプログラムで実写 360 度画像から⽴体構造の復元を⾏った．また，通常画像とMATLAB 組み込みの関数を⽤いて，同じ環境を復元し，⽐較を⾏った．
360 度画像の撮影にはリコー社の RICHO THETA S を⽤いた．以下，このカメラを 360度カメラと呼ぶ．図 4.11 に⽤いた 360 度カメラを⽰す．

図 4.11 RICHO THETA S
THETA は撮影画像を正距円筒画像として保存する．THETA の仕様を表 4.6 に⽰す．
表 4.6RICHO THETA S の仕様
静⽌画解像度5376×2688
撮像素⼦サイズ1/2.3 CMOS（×2)
レンズ F 値
F2.0
通常画像は Apple 社のスマートフォン iPhone11 Pro Max の超広⾓カメラを⽤いて撮影した．以下，このカメラを通常カメラと呼ぶ．表 4.7 に通常カメラの仕様を⽰す．
表 4.7 通常カメラの仕様
静⽌画解像度撮像素⼦サイズ
レンズ F 値

4032×3024
1/3.8
F2.4
1.54mm13mm(35mm 換算)
対⾓ 114°⽔平 102°
垂直 86°

焦点距離
視野⾓

SfM に⽤いる通常カメラの内部パラメータは，MATLAB のカメラキャリブレーターによって取得した．
カメラの移動量を正確に管理するために，移動撮影ステージを⽤いた．図 4.12 に移動ス
テージの様⼦を⽰す．

28

図 4.12 使⽤した移動撮影ステージ
また，表 4.8 に移動ステージの仕様を⽰す．
表 4.8 使⽤した移動撮影ステージの仕様
型番
移動量
分解能
位置決め精度
繰り返し精度

中央精機社 ALS-220-C2P±100mm
0.004mm
0.02mm
0.002mm

使⽤した移動ステージは横⽅向の移動を⾏う X ステージと上下⽅向の移動を⾏う Z ステージに分かれている．本実験では，横⽅向に移動する X ステージを⽤いた．Z ステージは最上部に固定して実験を⾏った．
画像の撮影は，以下のように⾏った．まず，基準となる画像 1 を撮影する．画像 1 の位
置から右⽅向に 100mm カメラを移動させ，画像 2 を撮影した．撮影した画像を図 4.13 に⽰す．

図 4.13 撮影画像の１枚
左：通常カメラ 右：360 度カメラ

29

画像の撮影は室内で⾏った．壁にポスターなどを貼り付けることで，特徴点の検出ができるようにした．部屋の平⾯図と画像を撮影したカメラの位置を図 4.14 に⽰す．メジャー
で計測した部屋の⻑辺は 6350mm，短辺は 2850mm，⾼さは 2650mm だった．
家具

2850 mm

机
100 mm

ドア

画像1

窓

画像2

家具
6350 mm

図 4.14 部屋の平⾯図とカメラ配置
特徴点の検出数は 10000 点に設定した．また，360 度カメラで撮影した画像には移動ス
テージが写り込んでいる．加えて上下部分は像の歪みが⼤きい．この領域から特徴検出を⾏わないように，画像左上を原点として縦⽅向の特徴検出範囲を𝑦 = 300~1936に設定した．
本実験では，通常画像の復元に MATLAB の組み込み関数を⽤いた．𝑬⾏列の計算には，2 画像の対応する観察点から𝑬⾏列を求める estimateEssentialMatrix 関数を，カメラ移動量の復元には，𝑬⾏列から並進ベクトルと回転⾏列を求める relativeCameraPose 関数を⽤いた．
特徴点マッチングを⾏う際，明らかに誤った対応を削除するため，対応点の距離にしきい値を設定した．通常画像は 500 画素，360 度画像は 1000 画素をしきい値として，しきい値より離れている対応点を削除した．
復元結果をわかりやすくするため，特徴検出器で得られる特徴点に加えて，チェッカー
ボードの点を利⽤する．写り込んでいるチェッカーボードを，MATLAB のチェッカーボ
ードを検出する関数 detectCheckerboardPoints で検出し，特徴検出器で検出された特徴点に加えた．
3 次元点を復元した結果，復元された点に外れ値が存在した．明らかな外れ値は⽬視で確認して削除した．また，3 次元点のスケールを決めるためにカメラの移動量を利⽤した．カメラを真横⽅向に 100mm 動かしているが，カメラを据え付ける際にカメラの𝑥軸と移動⽅向にずれが発⽣する．本実験では，カメラが𝑥軸⽅向に 100mm 動いたと仮定してスケールを決めた．

30

4.3.2 実験結果
図 4.15 に通常カメラの復元結果を，斜め上からの視点と真上からの視点で表⽰したものを⽰す．

図 4.15 通常カメラの復元結果
左：斜め上からの視点 右：真上からの視点
図 4.15 左を⾒ると，壁に貼り付けたチェッカーボードが復元されていることがわかる．図4.15 右では，部屋の 3 つの壁に貼り付けたポスターなどが復元されていることがわかる．
また，復元された短辺の距離が約 2800mm となっており，実際の距離と近いことがわかる．3 つの⾯が傾いているのは，カメラを据え付ける際のずれによるものである．また，画像を撮影したカメラ位置が，原点と右に動いた位置の２箇所にプロットされている．
図 4.16 に 360 度カメラの復元結果を，斜め上からの視点と真上からの視点で表⽰したものを⽰す．また，図 4.17 に真横からの視点で表⽰したものを⽰す．

図 4.16 360 度カメラの復元結果
左：斜め上からの視点 右：真上からの視点

31

図 4.17 360 度カメラの復元結果（真横からの視点）
図 4.16 左を⾒ると，上部にチェッカーボードが復元されていることがわかる．図 4.16
右から，カメラを中⼼として，すべての⽅向に点が復元されていることがわかる．また，
図 4.16 右と図 4.17 から，部屋の形状が復元されていることがわかる．復元された部屋のサイズは短辺が約 2800mm，⻑辺が約 6400mm，⾼さが約 2600mm となっており，実際のサイズと近いことがわかる．
復元された回転量を表 4.9 に，並進量を表 4.10 に⽰す．計算の過程に RANSAC など乱数を⽤いるアルゴリズムがあり，同じ⼊⼒画像を⽤いて SfM を⾏っても復元結果が少し異なるため，10 回実⾏した平均値を⽰す．また，回転量は回転⾏列をオイラー⾓に変換して⽰す．
表 4.9 回転量の復元結果
通常カメラ
回転軸
平均
標準偏差

!

360度カメラ"#−9.62×10!" −4.81×10!" −1.02×10!#
2.20×10!"

6.52×10!"

2.57×10!"!

"#−5.83×10!"

5.60×10!"−2.13×10!"

1.14×10!$ 8.17×10!$

2.60×10!$

表 4.10 並進量の復元結果
通常カメラ

360度カメラ

!

"

#

!

"

#

平均(mm)

100

3.991-3.513100

3.338-1.648

標準偏差

0

0.444

0.293

0

0.007

0.006

移動軸

表 4.9 と表 4.10 の結果をグラフにしたものを図 4.18 に⽰す．なお，図 4.18 右ではスケールの決定に⽤いた𝑥軸の値を省いた．

32

5.0001.000.E-03

4.000
3.000

5.000.E-04

誤 2.000
差の 1.000
平 0.000
均[mm]

誤
差 0.000.E+00の平 -5.000.E-04
均-1.000.E-03-1.500.E-03-1.000-2.000-3.000-4.000-5.000

x

y

z

y

通常カメラ

z

移動軸

回転軸
通常カメラ

360度カメラ

360度カメラ

図 4.18 復元結果の⽐較
左：回転量 右：並進量
カメラの固定を⽬測で⾏ったため，カメラの並進⽅向と𝑥軸はずれている．カメラの正確な移動⽅向はわからないため，並進量の評価は⾏わない．回転量の真値は 0 であるから，復元量は 0 に近いほど誤差が少ない．表 4.9 と図 4.21 左を⾒ると，y の値以外は 360
度カメラのほうが⼩さくなっている．これは，4.2 節のシミュレーションの結果と⼀致するものである．
4.3.3 実写画像を⽤いた実験についての考察
360 度画像を使った復元の場合，通常画像を使った場合と⽐較して，広い範囲を⼀度に復元できている．実際の部屋のサイズと⽐較すると，実際のサイズと近い復元結果になった．
実写画像を⽤いた復元は，通常カメラの場合より，360 度カメラを⽤いた場合，回転の誤差が⼩さいという結果になった．また，2 枚の画像からすべての⽅向の点を復元できている．同じ広さの空間を復元するとき，通常カメラよりも少ない画像枚数で復元できると考える．

4.4 今後の課題
通常画像の場合と⽐較して，360 度画像を⽤いた SfM の精度が良くなる要因は全⽅向の点を使うことができることであると考えた．精度に影響するその他の要因をより明確にするのが今後の課題である．
本研究で作成したプログラムは 2 枚の画像から SfM を⾏うプログラムである．既存のSfM のライブラリでは，複数枚の画像から 3 次元構造とカメラ位置を復元することができる．複数枚の 360 度画像を処理できるプログラムを作成するのが今後の⽬標である．

33

第5章 結論
本研究では，360 度画像を⽤いた SfM の精度を通常画像の場合と⽐較し，検討を⾏った．はじめに 360 度画像を単位球⾯モデルでモデル化した場合の SfM の⽅法を⽰し．360
度画像を⽤いた SfM を⾏うプログラムを作成した．シミュレーションデータや実写画像を⽤いた実験では，通常画像を⽤いた場合と⽐べて，復元精度が向上していることが確認された．精度が向上した理由として，360 度画像では全ての⽅向の特徴点を利⽤できることがあると考える．通常画像と 360 度画像で，SfM の精度に影響する要因をより明確にするのが今後の課題である．

34

謝辞
本研究の遂⾏にあたり，粘り強く懇切丁寧に指導してくださった蚊野浩教授に深く感謝いたします．また，普段の会話で気分転換に付き合ってくださり，ときに研究について気づきを与えてくださった蚊野研究室のメンバー，⼤学院の同期の皆様に感謝いたします．
最後に，私の学⽣⽣活を精神⾯，⾦銭⾯で⽀えてくださり，２年間の貴重な⼤学院での研究機会を与えてくださった家族に深く感謝いたします．

参考⽂献[1] S. Agarwal, N. Snavely, I. Simon, S. M. Seitz and R. Szeliski, "Building Rome in a Day,"
IEEE 12th International Conference on Computer Vision, Sept. 29 2009-Oct. 2 2009,
pp.72‒79., 2009.
[2] 中村恭之, ⼩枝正直 , 上⽥悦⼦, OpenCV によるコンピュータビジョン・機械学習⼊⾨,
講談社, 2017.
[3] R. Hartley and A. Zisserman, Multiple View Geometry in computer vision, Cambridge
University Press, 2004.
[4] ⾦⾕健⼀, 菅⾕保之 , ⾦澤靖, 3 次元コンピュータビジョン計算ハンドブック, 森北出
版, 2016.
[5] "Equirectangular projection - Wikipedia," [Online]. Available:
https://en.wikipedia.org/wiki/Equirectangular_projection. [Accessed 14 1 2022].
[6] G. Klein and D. Murray, "Parallel tracking and mapping for small AR workspaces,," inProc. IEEE ACM Int. Symp. Mixed Augmented Reality, Nara, Japan, Nov. 2007, pp.
225‒234., 2007.
[7] R. Mur-Artal, J. M. M. Montiel and J. D. Tardos, "ORB-SLAM: A Versatile andAccurate Monocular SLAM System," IEEE Trans. Robot., vol. 31, no. 5, pp. 1147‒
1163, 2015.
[8] J. Engel, T. Schops and D. Cremers, "LSD-SLAM: Large-scale direct monocular
SLAM," in Proc. Eur. Conf. Comput. Vision, Zurich, Switzer- land, Sep. 2014, pp. 834‒
849., 2014.
[9] A. Torii and et.al., Two- and Three- View Geometry for Spherical Cameras,
Proceedings of the 6th workshop on omnidirectional vision, camera networks and nonclassical camera, pp.81-88, 2005.

35

付録
l 特異値分解コンピュータビジョンにおいてよく使われる⾏列の分解に，特異値分解がある．特異値
分解とは，ある⾏列𝑨'×' を以下の 3 つの⾏列の積に分解することである．
𝑨'×' = 𝑼𝑺𝑽(
ここで，𝑼, 𝑽は正規直交⾏列であり，𝑼, 𝑽の列ベクトルを，それぞれ左特異ベクトル，右特異ベクトルと呼ぶ．また，𝑺は以下のような対⾓⾏列である．
𝜎% 0 0𝑺 = . 0 𝜎& 0 /0 0 𝜎'
𝑆の対⾓成分𝜎% ~𝜎' は⾏列𝑨の特異値であり𝜎% ≥ 𝜎& ≥ 𝜎' ≥ 0である．
ここでは 3×3 ⾏列の場合を説明したが，⼀般の m×n ⾏列にも特異値分解を適⽤することができる．

l 固有値分解
固有値分解とは，ある正⽅⾏列𝑩を以下の３つの⾏列の積に分解することである．
𝑩7×7 = 𝑼𝚲𝑼:%
ここで，𝑼, 𝚲はそれぞれ以下のような⾏列である．
𝑼 = (𝒖%⋯ 𝒖7 ), 𝚲 = 𝑑𝑖𝑎𝑔(𝜆%⋯ 𝜆7 )

𝑼は𝑩の固有ベクトルを列に並べた⾏列であり，𝚲は𝑩の固有値を対⾓成分にもつ対⾓⾏列である．

l 作成したプログラム
本研究で作成した主なプログラムのリストを⽰す．
プログラム名プログラム内容

myEquiToSpherePoint.m

正距円筒画像上の座標を単位球⾯上の座標に変換するプログラム．

myEightPointAlgo.m

８点アルゴリズムで𝑬⾏列を求めるプログ
ラム．

myDecomposeEssentialMatrix.m

𝑬⾏列を回転⾏列𝑹と並進ベクトル𝒕に分解するプログラム．

calcPos3d_leastsq.m

𝑹, 𝒕から２つの単位球⾯上の観察点の３次元
位置を計算するプログラム．

bundleAdjustmentFor360.m

𝑹, 𝒕と３次元点座標をバンドル調整で補正す
るプログラム．

36