More Related Content Similar to SSII2018TS: 3D物体検出とロボットビジョンへの応用 (9) SSII2018TS: 3D物体検出とロボットビジョンへの応用1. Aoki Media Sensing Lab., Keio Univ.
慶應義塾大学 秋月秀一(助教)
3D物体検出とロボットビジョンへの応用
-3D点群処理の基礎と位置姿勢推定のしくみ-
第24回画像センシングシンポジウム
2018/06/15
2. Aoki Media Sensing Lab., Keio Univ.
自己紹介:秋月秀一(あきづきしゅういち)
所属
慶應義塾大学 理工学部電子工学科 助教(有期)
中京大学 人工知能高等研究所特任研究員
経歴
2014年3月 中京大学大学院修士課程 修了
2016年9月 中京大学大学院博士課程 修了 博士(情報科学)
2016年度 日本学術振興会特別研究員(DC2, PD)
2017年度- 現職
連絡先
akizuki@elec.keio.ac.jp
2
3. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. データ構造
2. 基本的な処理
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. ロボットアームによるピッキングの例
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
3
4. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. データ構造
2. 基本的な処理
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. ロボットアームによるピッキングの例
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
4
5. Aoki Media Sensing Lab., Keio Univ.
本チュートリアルの目標
1. 3次元点群処理に興味を持っていただく
2. 基本的な処理から物体の位置姿勢推定まで,一通りの3次
元点群処理の仕組みがわかるようになる
3. 上記のアルゴリズムを実際に試すことができるようになる
5
6. Aoki Media Sensing Lab., Keio Univ.
研究の興味
3次元物体認識(特に点群データを利用したもの)とロボッ
トアプリケーションへの応用
6
高信頼な
キーポイントマッチング
ISVC2015
信学論2016
精密工学会誌2018ECCV2016WS
精密工学会誌2014
SHOT 特徴+提案 LRF
複数物体位置姿勢の同時認識 機能属性の推定
3D トラッキング
電学論2013
ばら積み物体認識
7. Aoki Media Sensing Lab., Keio Univ.
研究の興味
3次元物体認識(特に点群データを利用したもの)とロボッ
トアプリケーションへの応用
7
部品ピッキングロボット, 2013-15 日用品の操作, 2017-
NEDOプロジェクト
Amazon Robotics Challenge, 2015-17
物流ロボットの国際コンペ
三菱電機,中京大,中部大合同チーム
3 次元点群(特に3Dセンサで取得したもの)は実スケールの情報が
得らえるので,ロボットアプリケーションの開発に適している
8. Aoki Media Sensing Lab., Keio Univ.
3次元点群処理の活躍の場
8
ロボットピッキング
(対象物の位置姿勢認識)
形状モデリング
(デスクトップサイズから部屋規模,建物規模)
自動運転
(LiDARからの物体検出)
https://www.microsoft.com/ja-jp/hololens/hardware
http://redwood-data.org/indoor_lidar_rgbd/index.html
https://news.voyage.auto/an-introduction-to-lidar-the-key-self-driving-car-sensor-a7e405590cff
http://www.3ders.org/articles/20151209-best-3d-scanners-2015.html
http://people.sutd.edu.sg/~saikit/projects/sceneNN/shrec18/index.html
AR/MR
(エンターテイメント,医療,作業支援)
検索
(3D形状同士の検索)
9. Aoki Media Sensing Lab., Keio Univ.
点群処理ライブラリ・可視化ツール
点群処理ライブラリ
9
Point Cloud Library Open3D
Cloud CompareMeshLab
可視化ツール
10. Aoki Media Sensing Lab., Keio Univ.
RGBD カメラの種類
Active Stereo
赤外線プロジェクタ,IRカメラ,RGBカメラで構成される.
赤外光のパターン光を投影して測距をおこなう.
Time of Flight (ToF)
投光,受光の位相差によって距離を計測
距離,可視画像が同軸
Passive Stereo
ラフに広範囲の距離を取得することが得意.
距離精度は高くないので,点群というよりもそのままの画像と
して処理することに向いている.
10
11. Aoki Media Sensing Lab., Keio Univ.
様々な RGBD カメラ(Active stereo, ToF, Passive stereo の順)
名称 距離解像度(最大)
フレームレート
(最大解像度時)
計測距離 画角(H, V)
Intel
RealSense D435
1280x720 90fps 0.11 - 10.0m 85°, 58°
Intel
RealSense D415
1280x720 90fps 0.16 - 10.0m 63°, 40°
Orbbec
Astra & Pro
640x480
30fps
0.6 - 8.0m 60°, 49.5°
occipital
Structure sensor
640x480 60fps
0.4 - 3.5m
58°, 45°
Panasonic
GC1
320x240 24fps
- 12.0m
55°, 41°
90°, 70°
pmd
Pico Monster
352x287 60fps
0.5 - 6.0m 100°, 85°
Asus
Xtion2
640x480 30fps 0.8 - 3.5m 74°, 52°
LIPS
LIPSedge DL
640x480 30fps 0.2 - 1.2m
75.4°,
60.2°
STEREOLABS
ZED
4416x1242
3840x1080
15fps
(解像度下げると高
速になる)
0.5 - 20.0m 90°, 60°
11
※画像はメーカーHPより引用しています
12. Aoki Media Sensing Lab., Keio Univ.
RGBD カメラの比較
Active Stereo
解像度,フレームレートが両立し始めた.
最近のモデルは精度を犠牲にしがち.Intel SR300が最も精度が
高い印象.
ToF
屋外でも利用可能なモデルが多い.
フレームレートの高さが押しであったはずが,Active Stereoに
抜かれた?
Passive Stereo
受動的な測距をおこなう手法.
2つのRGBカメラで三角測量をおこなう.
12
13. Aoki Media Sensing Lab., Keio Univ.
計測データの比較
13
センサ名 SR300 D415 D435 Structure sensor
ボトル △ラベルのみ撮れる △透明部分が歪む △透明部分が歪む △ラベルのみ撮れる
光沢面(黒) × △不安定だが計測可 △不安定だが計測可 〇
細い部品(黒) ×細さより色が問題 〇 △ ×
プラスチック(黒) × 〇 〇 〇
木材 〇 〇 〇 〇
光沢面(青) 〇 〇 〇 〇
陶器 〇 〇 △歪みが出た 〇
プラスチック(白) 〇 〇 〇 〇
まとめ
奥行きの撮影範囲,材質・
色に関する制限があるが,
最も精度が高い.
この条件では最も良好.
後ろの壁など遠くでは誤差
が目立つ.
広角に撮影できる分,対象
物が低解像度になってし
まった?
数フレームの合成結果が得
られるので比較的良好?
ボトル(透明)
光沢面(黒)
光沢面(青)
陶器
プラスチック(白)木材
プラスチック(黒)
細い部品(黒)
14. Aoki Media Sensing Lab., Keio Univ.
計測データの比較(点群の可視化)
14
左から,SR300, D415, D435, Structure sensor
15. Aoki Media Sensing Lab., Keio Univ.
D415の計測データ(法線マップ,テクスチャ)
15
平面の比較:
光沢面の法線マップは
凹凸がある
円柱の比較:
透明素材だと法線マップ
の凹凸が目立つ
木材は特に良好
法線マップ テクスチャ付き点群
16. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. データ構造
2. 基本的な処理
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. ロボットアームによるピッキングの例
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
16
17. Aoki Media Sensing Lab., Keio Univ.
データ構造(点群データ)
x, y, z のデータ列で表現された形状データ
3Dメッシュモデルの頂点座標群
3Dセンサで計測された座標群
17
Points
x y z
0 -0.03 0.12 0.01
1 -0.04 0.13 0.00
2 -0.06 0.15 0.04
: : : :
n 0.03 0.11 0.03
T
i
i
zyx
niP
,,
,...,0
p
p点群:
点:Stanford bunny の点群
p0 p1
p2
18. Aoki Media Sensing Lab., Keio Univ.
点群データのバリエーション
様々な情報を点群に追加して表現することが可能
18
+法線方向 +ラベル +RGB
色情報や濃度勾配を
利用した特徴量抽出
セグメンテーション
問題の Ground Truth
法線方向を利用した
特徴量抽出,
光源を使ったリアルな
CG レンダリング
上記の付加情報は併用されることも多い
19. Aoki Media Sensing Lab., Keio Univ.
3つの頂点(点)を結んだ三角パッチの集合
データ構造(メッシュデータ)
19
Stanford bunny のメッシュ
Points
x y z
0 -0.03 0.12 0.01
1 -0.04 0.13 0.00
2 -0.06 0.15 0.04
: : : :
n 0.03 0.11 0.03
faces
頂点1 頂点2 頂点3
0 0 1 2
1 2 1 3
2 1 4 5
: : : :
m 5430 2001 2030
faces には接続する点の番号が記載
20. Aoki Media Sensing Lab., Keio Univ.
データ構造(RGBD画像)
RGB画像+距離画像のペア
点群データをRGB画像の座標系に射影して作成することも可能
20
RGB画像に重ね合わせた距離画像
距離画像
RGB画像
対応する色と距離が画像上で同一座標を示すので,処理の都合が非常に良い
(距離値を使った背景除去,2Dカーネルによるフィルタ処理等)
点群or
21. Aoki Media Sensing Lab., Keio Univ.
RGBD 画像の作り方
透視投影モデルを利用
実世界の Pworld と画像平面への射影Pimg の関係は下記の通り
21
X
Y
Z
レンズ中心
x
y
Pworld( X, Y, Z )
Pimg= (i, j)
画像平面
内部パラメータ
f : 焦点距離
ここではx,y共通の値とする
ci, cj:画像中心
多くのRGBDカメラでは
内部パラメータを知る
ための機能がある.
22. Aoki Media Sensing Lab., Keio Univ.
RGBD 画像の作り方
画像としてレンダリングする際は画像中心 (ci, cj) を考慮して
オフセットする.
画素値についてはデータセットによって異なるので注意.
ほとんどの文献ではそこまで触れていない.
ミリメートルをそのまま画素値にする,[0,255]で正規化,など.
22
jc
Z
Y
fj ic
Z
X
fi
このまま点群を投影するとずれが発生する場合がある.
投影先の画像(RGB画像)の原点と点群の原点が一致して
いるかどうか確認.
一致していない場合:
点群データをずれの量だけオフセットさせる.
Intel Realsense SR300だと,約 2.6 cmずれている.
23. Aoki Media Sensing Lab., Keio Univ.
RGBD画像のフォーマット例(Open3Dの標準形)
23
RGB画像
8bits x 3ch
距離画像
16 bits(unsigned short) x 1
ちなみに...
画像ビューワで表示すると真っ黒だが,色
調補正すると映っているものがわかる
color_raw = read_image(“color.png”)
depth_raw = read_image(“depth.png”)
rgbd_image = create_rgbd_image_from_color_and_depth( color_raw, depth_raw )
pcd = create_point_cloud_from_rgbd_image( rgbd_image, camera_intrinsic )
RGB画像の読込
距離画像の読込
RGBD画像の生成
点群の生成
カメラの内部パラメータ
(焦点距離,画像中心)
距離画像の各画素はミリメートル
単位の距離値を入れておく.
(未計測点にはゼロを入れる.)
RGB画像,距離画像からRGBD画像と点群を生成するコードの例
生成された点群
RGBD画像
24. Aoki Media Sensing Lab., Keio Univ.
基本的な処理
フィルタリング
サンプリング,ノイズ除去,背景除去等の画像処理でもお馴染
みの前処理
法線推定
各点の向きを計算する処理.画像処理で言うと勾配方向
近傍点探索
キーポイント検出器,特徴抽出,種々の統計量計算等のために
効率よく対象のデータを取り出す方法
24
25. Aoki Media Sensing Lab., Keio Univ.
フィルタリング(ダウンサンプリング)
処理時間の高速化に利用される手法.
3次元空間を一定サイズのボクセルで離散化.各ボクセル内の点
群データの平均値を代表点とする
スケールを保ったまま密度が疎になる
25
座標系
長さ 0.1m
0
5000
10000
15000
20000
25000
0 0.002 0.004 0.006 0.008 0.01
点数[pts.]
ダウンサンプリングサイズ [m]
ダウンサンプリングが処理時間
に与える影響は非常に大きい
一番左と比べて
1.7%の点数
21529点 7128点 1406点 376点
26. Aoki Media Sensing Lab., Keio Univ.
Statistical Outlier Removalによるノイズ除去
計測結果が不安定になる点を除去する(距離センサによくあ
るノイズ)
不安定な点は周囲の点に対して孤立しやすい
→「孤立性」を指標としたフィルタリングをおこなう
26
1. 点piに対して周囲 k 点との平均距離
diを計算.(※ diは正規分布に従う
と仮定)
2. 下記の条件をチェックしてインライ
アとアウトライアを決める.
outlieriselse
inlierisdthdif
i
ii
p
p)(
1
1
,
i
k
id
k
d
距離センサに起きやすい突発的
なノイズを削除できる
処理結果:赤点が削除された点群
27. Aoki Media Sensing Lab., Keio Univ.
フィルタリング(クロッピング)
Region of Interest (ROI) の設定に相当.指定範囲のデータを
取り出して,その範囲だけに処理を適用する.
3次元的なボリュームを指定する方法.
関数フィッティングによる方法.
27
28. Aoki Media Sensing Lab., Keio Univ.
3次元的なボリュームを指定する方法
3次元的なROIを指定し,その中のデータのみを取り出す.
28
2DのROIによる切り出し.背景が混入する.
3DのROIによる切り出し.イスのみを切り出すことができる.
29. Aoki Media Sensing Lab., Keio Univ.
関数フィッティングによる方法
RANSAC による平面フィッティング
例:机の上の物体の取り出し
机は平面でできているので,その部分だけを抜き出してしまえばよい
RANSAC で入力点群から平面方程式 ax+by+cz+d = 0 を算出し,それに合致す
る点を削除する.
29
入力画像 処理前後の点群データ平面部分以外の
取り出し結果
3次元的な構造を使ってマスクをおこなえば
RGB画像だけでは解決しにくいデータ処理が可能になる
30. Aoki Media Sensing Lab., Keio Univ.
近傍点探索1
点群は離散的・整列されていないデータなので,局所的な処
理が苦手(例:特定の点周りのデータの平均値の計算)
画像処理では簡単:1ピクセル隣に最近傍のデータが格納され
ていることが保証されている
30
Stanford bunnyの点の並び.
下から上に向かってidが割り振ら
れているが,隣のidが空間的に近
くにあるわけではない.
近傍点探索が効率化するように
事前に空間分割しておくことが一般的.
31. Aoki Media Sensing Lab., Keio Univ.
近傍点探索2
kd tree
2分木で構成された空間分割のためのデータ構造
kd treeで使われる探索方法
KNN:k近傍をサーチ
RNN:特定の距離内をサーチ
RKNN:上記を混ぜた方法
特定の範囲内で列挙する点数に
上限を設けることができる.
31
赤:クエリ点
緑:クエリ点の
半径0.01m内の点
F
C
H
E
A
B
G
A
B
C
EF
G
H
x軸分割
y軸分割
x軸分割
2次元データ(左)の kd tree の例(右)
32. Aoki Media Sensing Lab., Keio Univ.
法線推定1
PCA を利用した方法
共分散行列の最小固有値の固有ベクトルが法線
32
共分散行列
近傍点の総数
固有ベクトル
k
k
i
k
k
T
ii
kk 11
1
,))((
1
ppppppC
}2,1,0{, jjjj vvC 固有ベクトル v1 , v2
固有ベクトル v2= 法線
012
33. Aoki Media Sensing Lab., Keio Univ.
法線推定2
固有ベクトルの向きは不定なので,法線方向を修正する
33
法線をそのまま表示した例
修正後の法線分布
裏向きの部分
(失敗) 表向きの部分
(成功)
“視点位置”を設定し,そちらに向く方向を正とする
視点位置 v
0)( ii npv
この条件を満たす法線 ni の方向を正とする
34. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. 基本的な処理
2. データの取得方法
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. ロボットアームによるピッキングの例
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
34
35. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングによる位置姿勢推定
シーン中に存在する対象物の位置姿勢(並進,回転)を推定
する手法
対象物の3Dモデルをシーンへ照合し,誤差を最小化する位置姿
勢を算出する.
35
入力シーン3D モデル
入力シーンの外観
入力データ 出力データ
位置姿勢に基づいて
3Dモデル重畳した結果
対象物
36. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの手順
全体の手順(後でOpen3Dのコード例を紹介するので,その手順で紹介します.)
36
キーポイント
検出
データ入力 特徴量記述
RANSACに
よる姿勢推定
ICPによる
精密位置決め
入力点群
視点の異なるスキャンデータ
姿勢変換行列
4x4
source target
37. Aoki Media Sensing Lab., Keio Univ.
キーポイント検出
特徴量を計算するための点を少数選択する.
この例では単なるダウンサンプリング結果を特徴点とした.
37
ダウンサンプリング結果の点群
38. Aoki Media Sensing Lab., Keio Univ.
特徴量記述 (FPFHの例)
各キーポイントに対して多次元ベクトルとしての特徴量を算
出する.
FPFH 特徴(33次元)fFPFH(p)
キーポイントと近傍点の組を多数生成する.
2 点の位置関係( α,θ,φ,pt - ps )を計算し,ヒストグラム化 = SPFH
各キーポイントからSPFHを算出しておき,近傍点のSPFHを統合 = FPFH
38
ps
pt
v=(pt-ps)×u
法線 ns=u
w=u×v
v
u
w
法線 nt
pt-ps
φ
α
θ
R. B. Rusu, et al., ”Fast Point Feature Histograms(FPFH) for 3D Registration”, IEEE Proc. ICRA, pp.3212-3217, 2009.
39. Aoki Media Sensing Lab., Keio Univ.
特徴量間の照合処理
類似する特徴量同士を対応付ける
基本的な方法:特徴量間のユークリッド距離を閾値にする方法
39
||||, baba d
fFPFH(p) fFPFH(q)
40. Aoki Media Sensing Lab., Keio Univ.
特徴量間の照合処理
類似する特徴量同士を対応付ける
基本的な方法:特徴量間のユークリッド距離を閾値にする方法
これだけでは誤った対応点が発生する
40
・視点の違いにより見えていた部分が消え,
見えていなかった部分が出現する.
・外乱物体の混入によるデータ欠損.
・よく似た形状の別部分の存在.
赤:正解の対応,青:誤った対応
局所的な形状の類似性評価の限界
||||, baba d
fFPFH(p) fFPFH(q)
41. Aoki Media Sensing Lab., Keio Univ.
RANSACによる誤った対応の除外&姿勢推定①
問題設定
ミスを含む対応群から正しい対応付けのみを選択し,姿勢変換行
列を推定する
41
対応 (source, target)
= ( 0, 1),
( 1, 2),
( 5, 10),
( 8, 10),
(10,20),
(15,42),
(32, 7),
(60,40),
:
正しい対応
誤った対応
入力データの例
(対応点の見た目とデータとしての対応)
この時点では,どれが正しくてどれが誤っているのかわからない.
42. Aoki Media Sensing Lab., Keio Univ.
RANSACによる誤った対応の除外&姿勢推定②
以下のステップの繰り返し
1. 対応のランダムサンプリング
2. 枝刈り処理
3. 姿勢推定・整合性チェック
42
対応 (source, target)
= ( 0, 1),
( 1, 2),
( 5, 10),
( 8, 10),
(10,20),
(15,42),
(32, 7),
(60,40),
:
43. Aoki Media Sensing Lab., Keio Univ.
RANSACによる誤った対応の除外&姿勢推定③
以下のステップの繰り返し
1. 対応のランダムサンプリング
2. 枝刈り処理
3. 姿勢推定・整合性チェック
43
対応 (source, target)
= ( 0, 1),
( 1, 2),
( 5, 10),
( 8, 10),
(10,20),
(15,42),
(32, 7),
(60,40),
:
4つの対応をランダムサンプリングした例.
44. Aoki Media Sensing Lab., Keio Univ.
RANSACによる誤った対応の除外&姿勢推定④
以下のステップの繰り返し
1. 対応のランダムサンプリング
2. 枝刈り処理
3. 姿勢推定・整合性チェック
44
誤ったサンプルの早期棄却
・対応間のキーポイント間距離の類似性
et
es
||||9.0||||||||9.0|||| tsst eeee
・対応間の法線方向の類似性
枝刈り処理で棄却されなかったサンプルは
次のステップへ
対応間の幾何学的関係を利用した
フィルタリング処理になっている
45. Aoki Media Sensing Lab., Keio Univ.
RANSACによる誤った対応の除外&姿勢推定⑤
以下のステップの繰り返し
1. 対応のランダムサンプリング
2. 枝刈り処理
3. 姿勢推定・整合性チェック
45
姿勢推定:
sourceとtargetの点群を位置合わせ
する変換 T を算出.
整合性チェック:
サンプリング・整合性チェックを規定回数繰り返し,
エラーが最小となる T を解とする.
),(
,
1 1
0
2
i
n
i
i
QN
n
error
pq
Tpq
pi の Q に対する最近傍点
46. Aoki Media Sensing Lab., Keio Univ.
ICP による精密位置決め
ICPアルゴリズムによる精密位置決め
特徴点マッチングで得られた点のみから位置姿勢を決定すると
若干の誤差が残る.
得られた位置姿勢を初期値とし,ICPアルゴリズムによって誤差を修正す
る.
46
RANSAC で推定した変換の重ね合わせ結果
(端の方のずれが目立つ)
ICPの結果
47. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. 基本的な処理
2. データの取得方法
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. ロボットアームによるピッキングの例
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
47
48. Aoki Media Sensing Lab., Keio Univ.
ロボットアームによるピッキングの例
48
Tcam2tool
Σcam
Σtool
Σrobo
probo=Tcam2toolpcam
対応点を数十点用意して,
Tcam2toolについて解く
ロボットと3Dセンサ間の外部パラメータのキャリブレー
ション
カメラ座標をロボット座標に変換する行列 Tcam2toolを推定する
Trobo2tool
49. Aoki Media Sensing Lab., Keio Univ.
対応点の取り方の事例
49
誤差約3~5mm程度で
外部パラメータを決定
(誤差率約1.7%)
半径既知の球を持たせて,さまざまな位置にロボットを動か
しながら撮影.
球の重心をツール座標に一致させる
球の重心点(検出する)とロボットの制御パラメータ(ツール座標の位
置)を対応点とする
球体の検出は平行移動のみを考えればよいので楽
誤差の要因
・ハンドと球の取り付け甘さ
・球体検出の誤差
・センサの計測精度
:
50. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. 基本的な処理
2. データの取得方法
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. ロボットアームによるピッキングの例
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
50
51. Aoki Media Sensing Lab., Keio Univ.
Open3D : A Modern Library for 3D Data Processing
Python, C++両方から扱える3Dデータ処理ライブラリ
51
Qian-Yi Zhou, Jaesik Park, Vladlen Koltun, Open3D: A Modern Library for 3D Data Processing, arXiv2018.
Core features
Basic 3D data structures
Basic 3D data processing algorithms
Scene reconstruction
Surface alignment
3D visualization
Python binding
Supported compilers
GCC 4.8~ on Linux
XCode 8.0~ on OS X
Visual Studio 2015~
on Windows
52. Aoki Media Sensing Lab., Keio Univ.
Open3Dの特徴(PCLと比較して)
コードが圧倒的に少なくて済む
依存ライブラリが少ないのでビルドが早く導入が簡単
フィルタリング,法線推定,kd-treeなど,単純な前処理系の
基本機能が実装済み
RGBD画像処理が利用できる
PCLもサポートしているが利用例が少ない
現状で実装されているアルゴリズムの種類は限定的
3D特徴量,キーポイント検出器,セグメンテーションはPCLの方
が充実
可視化はOpen3Dの方が美しい
Scene Reconstructionのためのサポートが厚い
むしろこのためのサブモジュールが提供されているといった印象.
52
53. Aoki Media Sensing Lab., Keio Univ.
基本的な点群処理のコードサンプル1
点群の読み込み,表示,保存
53
pcd = read_point_cloud(“filename.pcd”) #点群の読み込み
draw_geometries([pcd]) #点群の画面表示
write_point_cloud(“output.pcd”, pcd) #点群の保存
ダウンサンプリング
pcd_ds = voxel_down_sample(pcd, voxel_size = 0.05)
入力点群 ダウンサンプリングのサイズ出力点群
54. Aoki Media Sensing Lab., Keio Univ.
基本的な点群処理のコードサンプル2
法線推定と向きの修正
54
estimate_normals(pcd, search_param =
KDTreeSearchParamHybrid(
radius = 0.1, max_nn = 30))
orient_normals_towards_camera_location(pcd, camera_location =
np.array([0.,0.,0.],dtype ='float64' ) )
点群 サーチの条件
半径0.1で最大30点使う
点群 視点位置の設定
修正後の法線分布
視点位置 (0.0,0.0,0.0)
法線分布
元の点群が法線を持っていた場合はその方向を
正とするが,そうでなければ方向は不定
55. Aoki Media Sensing Lab., Keio Univ.
基本的な点群処理のコードサンプル3
NumPyとの連携
10x3のNumPy行列の生成(値はランダム)
55
data = np.random.rand(10,3)
pcd = PointCloud ()
pcd.points = Vector3dVector(data)
NumPy行列をOpen3D点群に変換
xyz = np.asarray(pcd.points)
Open3D点群をNumPy行列に変換
色や法線も同様に変換可能
colors = np.asarray(pcd.colors)
normals = np.asarray(pcd.normals)
56. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
main文
56
#データ読み込み
source = read_point_cloud("bun.pcd")
target = read_point_cloud("bun045.pcd")
#キーポイント検出と特徴量抽出
voxel_size = 0.01
source_kp, source_fpfh = preprocess_point_cloud(source, voxel_size)
target_kp, target_fpfh = preprocess_point_cloud(target, voxel_size)
#RANSACによる姿勢推定
result_ransac = execute_global_registration(source_kp, target_kp,
source_fpfh, target_fpfh, voxel_size)
#ICPによる微修正
result_icp = refine_registration(source, target,
result_ransac.transformation, voxel_size)
#結果の表示
draw_registration_result(source, target, result_icp.transformation)
KP検出
データ入力
特徴量記述
RANSACに
よる姿勢推定
ICPによる
精密位置決め
57. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
キーポイント検出と特徴量抽出
57
def preprocess_point_cloud(pcd, voxel_size):
print(":: Downsample with a voxel size %.3f." % voxel_size)
pcd_kp = voxel_down_sample(pcd, voxel_size)
radius_normal = voxel_size * 2
viewpoint = np.array([0.,0.,100.], dtype='float64')
estimate_normals(pcd_kp, KDTreeSearchParamHybrid(radius = radius_normal, max_nn = 30))
orient_normals_towards_camera_location( pcd_kp, camera_location = viewpoint )
radius_feature = voxel_size * 5
print(":: Compute FPFH feature with search radius %.3f." % radius_feature)
pcd_fpfh = compute_fpfh_feature(pcd_kp,
KDTreeSearchParamHybrid(radius = radius_feature, max_nn = 100))
return pcd_kp, pcd_fpfh
58. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
キーポイント検出と特徴量抽出
58
def preprocess_point_cloud(pcd, voxel_size):
print(":: Downsample with a voxel size %.3f." % voxel_size)
pcd_kp = voxel_down_sample(pcd, voxel_size)
radius_normal = voxel_size * 2
viewpoint = np.array([0.,0.,100.], dtype='float64')
estimate_normals(pcd_kp, KDTreeSearchParamHybrid(radius = radius_normal, max_nn = 30))
orient_normals_towards_camera_location( pcd_kp, camera_location = viewpoint )
radius_feature = voxel_size * 5
print(":: Compute FPFH feature with search radius %.3f." % radius_feature)
pcd_fpfh = compute_fpfh_feature(pcd_kp,
KDTreeSearchParamHybrid(radius = radius_feature, max_nn = 100))
return pcd_kp, pcd_fpfh
ダウンサンプリング処理によってキーポイントを検出します
ダウンサンプリングによって残った点群をキーポイントとしています
検出されたキーポイント 入力点群 キーポイントの間隔(0.01)
59. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
キーポイント検出と特徴量抽出
59
def preprocess_point_cloud(pcd, voxel_size):
print(":: Downsample with a voxel size %.3f." % voxel_size)
pcd_kp = voxel_down_sample(pcd, voxel_size)
radius_normal = voxel_size * 2
viewpoint = np.array([0.,0.,100.], dtype='float64')
estimate_normals(pcd_kp, KDTreeSearchParamHybrid(radius = radius_normal, max_nn = 30))
orient_normals_towards_camera_location( pcd_kp, camera_location = viewpoint )
radius_feature = voxel_size * 5
print(":: Compute FPFH feature with search radius %.3f." % radius_feature)
pcd_fpfh = compute_fpfh_feature(pcd_kp,
KDTreeSearchParamHybrid(radius = radius_feature, max_nn = 100))
return pcd_kp, pcd_fpfh
キーポイント点群に対して法線を計算し,向きを修正します
視点位置の設定((0.0,0.0,100.0)を向く方向が正)
法線推定の範囲(PCAするので,十分な点を確保できる大きさで)
60. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
キーポイント検出と特徴量抽出
60
def preprocess_point_cloud(pcd, voxel_size):
print(":: Downsample with a voxel size %.3f." % voxel_size)
pcd_kp = voxel_down_sample(pcd, voxel_size)
radius_normal = voxel_size * 2
viewpoint = np.array([0.,0.,100.], dtype='float64')
estimate_normals(pcd_kp, KDTreeSearchParamHybrid(radius = radius_normal, max_nn = 30))
orient_normals_towards_camera_location( pcd_kp, camera_location = viewpoint )
radius_feature = voxel_size * 5
print(":: Compute FPFH feature with search radius %.3f." % radius_feature)
pcd_fpfh = compute_fpfh_feature(pcd_kp,
KDTreeSearchParamHybrid(radius = radius_feature, max_nn = 100))
return pcd_kp, pcd_fpfh
キーポイント点群に対してFPFH特徴を算出します
特徴量計算の範囲(法線算出よりもさらに大きく.)
61. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
RANSACによる姿勢推定
61
def execute_global_registration(
source_kp, target_kp, source_fpfh, target_fpfh, voxel_size):
distance_threshold = voxel_size * 1.5
result = registration_ransac_based_on_feature_matching(
source_kp, target_kp, source_fpfh, target_fpfh,
distance_threshold,
TransformationEstimationPointToPoint(False), 4,
[CorrespondenceCheckerBasedOnEdgeLength(0.9),
CorrespondenceCheckerBasedOnDistance(distance_threshold)],
RANSACConvergenceCriteria(40000, 500))
return result
Sourceとtargetの距離の閾値.
これより小さいものがインライア
枝刈り処理の条件
サンプリングの最大回数と
検証の最大回数
62. Aoki Media Sensing Lab., Keio Univ.
モデルベースマッチングの実装
def refine_registration(source, target, trans, voxel_size):
distance_threshold = voxel_size * 0.4
result = registration_icp(source, target,
distance_threshold,
trans,
TransformationEstimationPointToPlane())
return result
62
ICPによる精密位置決め
距離の閾値
姿勢の初期値(RANSACで推定したもの)
距離計算方法の指定
63. Aoki Media Sensing Lab., Keio Univ.
Scene Reconstruction
Open3Dの「Reconstruction system」を実行するだけでシー
ンの再構成が可能.
63
[1] S.Choi, Q.-Y. Zhou, and V. Koltun, Robust Reconstruction of Indoor Scenes, CVPR, 2015.
入力:連続したRGBD画像群 出力:テクスチャ付き3Dメッシュ
64. Aoki Media Sensing Lab., Keio Univ.
Contents
1. 導入
2. 3D点群処理の基礎
1. 基本的な処理
2. データの取得方法
3. 位置姿勢推定の仕組み
1. 位置姿勢推定の流れ
2. 最近の研究動向
4. ライブラリ・可視化ツールについて
1. Open3D
2. Cloud Compare
64
65. Aoki Media Sensing Lab., Keio Univ.
Cloud Compare
多機能な点群ビューワ(.pcdファイルをそのまま読込可能)
フィルタリング処理,複数点群のインタラクティブな位置合わ
せ等,様々な機能が実装されている
65
• 法線推定
• ダウンサンプリング
• ノイズ除去
• 姿勢変更
• ICP
• メッシュ生成
• 点のピッキング
:
などなど
点のピッキングで
2点間距離を計測した例
Cloud Compare の画面
http://www.danielgm.net/cc/
66. Aoki Media Sensing Lab., Keio Univ.
Cloud Compare
点群のレジストレーションの例
66
①
Edit -> Colors ->
Set unique で位置合わせ
前の点群の色を変更.
③
Tools -> Registration ->
Fine registration(ICP)
でICPによる位置合わせ
②
Edit -> Normals ->
Compute で法線推定
④
Edit -> Merge
で点群データを統合
67. Aoki Media Sensing Lab., Keio Univ.
まとめ
現在のセンサ・ライブラリ・可視化ツールの選択肢を説明
センサ:インドアではActive stereo方式が主流
ライブラリ:Open3Dが登場.点群処理の敷居が下がった.
可視化ツール:有名どころでMeshLab.Cloud compareも便利.
3次元点群処理について説明
点群のデータ構造
基本処理のアルゴリズム
位置姿勢認識の流れ
Open3D の実装例の紹介
67