Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SSII2018TS: 3D物体検出とロボットビジョンへの応用

SSII2018 チュートリアル講演
TS3 6月15日(金) 9:00~10:20 (メインホール)

  • Be the first to comment

SSII2018TS: 3D物体検出とロボットビジョンへの応用

  1. 1. Aoki Media Sensing Lab., Keio Univ. 慶應義塾大学 秋月秀一(助教) 3D物体検出とロボットビジョンへの応用 -3D点群処理の基礎と位置姿勢推定のしくみ- 第24回画像センシングシンポジウム 2018/06/15
  2. 2. Aoki Media Sensing Lab., Keio Univ. 自己紹介:秋月秀一(あきづきしゅういち)  所属  慶應義塾大学 理工学部電子工学科 助教(有期)  中京大学 人工知能高等研究所特任研究員  経歴  2014年3月 中京大学大学院修士課程 修了  2016年9月 中京大学大学院博士課程 修了 博士(情報科学)  2016年度 日本学術振興会特別研究員(DC2, PD)  2017年度- 現職  連絡先  akizuki@elec.keio.ac.jp 2
  3. 3. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. データ構造 2. 基本的な処理 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. ロボットアームによるピッキングの例 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 3
  4. 4. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. データ構造 2. 基本的な処理 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. ロボットアームによるピッキングの例 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 4
  5. 5. Aoki Media Sensing Lab., Keio Univ. 本チュートリアルの目標 1. 3次元点群処理に興味を持っていただく 2. 基本的な処理から物体の位置姿勢推定まで,一通りの3次 元点群処理の仕組みがわかるようになる 3. 上記のアルゴリズムを実際に試すことができるようになる 5
  6. 6. Aoki Media Sensing Lab., Keio Univ. 研究の興味  3次元物体認識(特に点群データを利用したもの)とロボッ トアプリケーションへの応用 6 高信頼な キーポイントマッチング ISVC2015 信学論2016 精密工学会誌2018ECCV2016WS 精密工学会誌2014 SHOT 特徴+提案 LRF 複数物体位置姿勢の同時認識 機能属性の推定 3D トラッキング 電学論2013 ばら積み物体認識
  7. 7. Aoki Media Sensing Lab., Keio Univ. 研究の興味  3次元物体認識(特に点群データを利用したもの)とロボッ トアプリケーションへの応用 7 部品ピッキングロボット, 2013-15 日用品の操作, 2017- NEDOプロジェクト Amazon Robotics Challenge, 2015-17 物流ロボットの国際コンペ 三菱電機,中京大,中部大合同チーム 3 次元点群(特に3Dセンサで取得したもの)は実スケールの情報が 得らえるので,ロボットアプリケーションの開発に適している
  8. 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. 9. Aoki Media Sensing Lab., Keio Univ. 点群処理ライブラリ・可視化ツール  点群処理ライブラリ 9 Point Cloud Library Open3D Cloud CompareMeshLab  可視化ツール
  10. 10. Aoki Media Sensing Lab., Keio Univ. RGBD カメラの種類  Active Stereo  赤外線プロジェクタ,IRカメラ,RGBカメラで構成される.  赤外光のパターン光を投影して測距をおこなう.  Time of Flight (ToF)  投光,受光の位相差によって距離を計測  距離,可視画像が同軸  Passive Stereo  ラフに広範囲の距離を取得することが得意.  距離精度は高くないので,点群というよりもそのままの画像と して処理することに向いている. 10
  11. 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. 12. Aoki Media Sensing Lab., Keio Univ. RGBD カメラの比較  Active Stereo  解像度,フレームレートが両立し始めた.  最近のモデルは精度を犠牲にしがち.Intel SR300が最も精度が 高い印象.  ToF  屋外でも利用可能なモデルが多い.  フレームレートの高さが押しであったはずが,Active Stereoに 抜かれた?  Passive Stereo  受動的な測距をおこなう手法.  2つのRGBカメラで三角測量をおこなう. 12
  13. 13. Aoki Media Sensing Lab., Keio Univ. 計測データの比較 13 センサ名 SR300 D415 D435 Structure sensor ボトル △ラベルのみ撮れる △透明部分が歪む △透明部分が歪む △ラベルのみ撮れる 光沢面(黒) × △不安定だが計測可 △不安定だが計測可 〇 細い部品(黒) ×細さより色が問題 〇 △ × プラスチック(黒) × 〇 〇 〇 木材 〇 〇 〇 〇 光沢面(青) 〇 〇 〇 〇 陶器 〇 〇 △歪みが出た 〇 プラスチック(白) 〇 〇 〇 〇 まとめ 奥行きの撮影範囲,材質・ 色に関する制限があるが, 最も精度が高い. この条件では最も良好. 後ろの壁など遠くでは誤差 が目立つ. 広角に撮影できる分,対象 物が低解像度になってし まった? 数フレームの合成結果が得 られるので比較的良好? ボトル(透明) 光沢面(黒) 光沢面(青) 陶器 プラスチック(白)木材 プラスチック(黒) 細い部品(黒)
  14. 14. Aoki Media Sensing Lab., Keio Univ. 計測データの比較(点群の可視化) 14 左から,SR300, D415, D435, Structure sensor
  15. 15. Aoki Media Sensing Lab., Keio Univ. D415の計測データ(法線マップ,テクスチャ) 15 平面の比較: 光沢面の法線マップは 凹凸がある 円柱の比較: 透明素材だと法線マップ の凹凸が目立つ 木材は特に良好 法線マップ テクスチャ付き点群
  16. 16. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. データ構造 2. 基本的な処理 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. ロボットアームによるピッキングの例 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 16
  17. 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. 18. Aoki Media Sensing Lab., Keio Univ. 点群データのバリエーション  様々な情報を点群に追加して表現することが可能 18 +法線方向 +ラベル +RGB 色情報や濃度勾配を 利用した特徴量抽出 セグメンテーション 問題の Ground Truth 法線方向を利用した 特徴量抽出, 光源を使ったリアルな CG レンダリング 上記の付加情報は併用されることも多い
  19. 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. 20. Aoki Media Sensing Lab., Keio Univ. データ構造(RGBD画像)  RGB画像+距離画像のペア  点群データをRGB画像の座標系に射影して作成することも可能 20 RGB画像に重ね合わせた距離画像 距離画像 RGB画像 対応する色と距離が画像上で同一座標を示すので,処理の都合が非常に良い (距離値を使った背景除去,2Dカーネルによるフィルタ処理等) 点群or
  21. 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. 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. 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. 24. Aoki Media Sensing Lab., Keio Univ. 基本的な処理  フィルタリング  サンプリング,ノイズ除去,背景除去等の画像処理でもお馴染 みの前処理  法線推定  各点の向きを計算する処理.画像処理で言うと勾配方向  近傍点探索  キーポイント検出器,特徴抽出,種々の統計量計算等のために 効率よく対象のデータを取り出す方法 24
  25. 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. 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. 27. Aoki Media Sensing Lab., Keio Univ. フィルタリング(クロッピング)  Region of Interest (ROI) の設定に相当.指定範囲のデータを 取り出して,その範囲だけに処理を適用する.  3次元的なボリュームを指定する方法.  関数フィッティングによる方法. 27
  28. 28. Aoki Media Sensing Lab., Keio Univ. 3次元的なボリュームを指定する方法  3次元的なROIを指定し,その中のデータのみを取り出す. 28 2DのROIによる切り出し.背景が混入する. 3DのROIによる切り出し.イスのみを切り出すことができる.
  29. 29. Aoki Media Sensing Lab., Keio Univ. 関数フィッティングによる方法  RANSAC による平面フィッティング  例:机の上の物体の取り出し  机は平面でできているので,その部分だけを抜き出してしまえばよい  RANSAC で入力点群から平面方程式 ax+by+cz+d = 0 を算出し,それに合致す る点を削除する. 29 入力画像 処理前後の点群データ平面部分以外の 取り出し結果 3次元的な構造を使ってマスクをおこなえば RGB画像だけでは解決しにくいデータ処理が可能になる
  30. 30. Aoki Media Sensing Lab., Keio Univ. 近傍点探索1  点群は離散的・整列されていないデータなので,局所的な処 理が苦手(例:特定の点周りのデータの平均値の計算)  画像処理では簡単:1ピクセル隣に最近傍のデータが格納され ていることが保証されている 30 Stanford bunnyの点の並び. 下から上に向かってidが割り振ら れているが,隣のidが空間的に近 くにあるわけではない. 近傍点探索が効率化するように 事前に空間分割しておくことが一般的.
  31. 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. 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. 33. Aoki Media Sensing Lab., Keio Univ. 法線推定2  固有ベクトルの向きは不定なので,法線方向を修正する 33 法線をそのまま表示した例 修正後の法線分布 裏向きの部分 (失敗) 表向きの部分 (成功)  “視点位置”を設定し,そちらに向く方向を正とする 視点位置 v 0)(  ii npv この条件を満たす法線 ni の方向を正とする
  34. 34. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. 基本的な処理 2. データの取得方法 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. ロボットアームによるピッキングの例 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 34
  35. 35. Aoki Media Sensing Lab., Keio Univ. モデルベースマッチングによる位置姿勢推定  シーン中に存在する対象物の位置姿勢(並進,回転)を推定 する手法  対象物の3Dモデルをシーンへ照合し,誤差を最小化する位置姿 勢を算出する. 35 入力シーン3D モデル 入力シーンの外観 入力データ 出力データ 位置姿勢に基づいて 3Dモデル重畳した結果 対象物
  36. 36. Aoki Media Sensing Lab., Keio Univ. モデルベースマッチングの手順  全体の手順(後でOpen3Dのコード例を紹介するので,その手順で紹介します.) 36 キーポイント 検出 データ入力 特徴量記述 RANSACに よる姿勢推定 ICPによる 精密位置決め 入力点群 視点の異なるスキャンデータ 姿勢変換行列 4x4 source target
  37. 37. Aoki Media Sensing Lab., Keio Univ. キーポイント検出  特徴量を計算するための点を少数選択する.  この例では単なるダウンサンプリング結果を特徴点とした. 37 ダウンサンプリング結果の点群
  38. 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. 39. Aoki Media Sensing Lab., Keio Univ. 特徴量間の照合処理  類似する特徴量同士を対応付ける  基本的な方法:特徴量間のユークリッド距離を閾値にする方法 39   ||||, baba d fFPFH(p) fFPFH(q)
  40. 40. Aoki Media Sensing Lab., Keio Univ. 特徴量間の照合処理  類似する特徴量同士を対応付ける  基本的な方法:特徴量間のユークリッド距離を閾値にする方法  これだけでは誤った対応点が発生する 40 ・視点の違いにより見えていた部分が消え, 見えていなかった部分が出現する. ・外乱物体の混入によるデータ欠損. ・よく似た形状の別部分の存在. 赤:正解の対応,青:誤った対応 局所的な形状の類似性評価の限界   ||||, baba d fFPFH(p) fFPFH(q)
  41. 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. 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. 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. 44. Aoki Media Sensing Lab., Keio Univ. RANSACによる誤った対応の除外&姿勢推定④  以下のステップの繰り返し 1. 対応のランダムサンプリング 2. 枝刈り処理 3. 姿勢推定・整合性チェック 44 誤ったサンプルの早期棄却 ・対応間のキーポイント間距離の類似性 et es ||||9.0||||||||9.0|||| tsst eeee  ・対応間の法線方向の類似性 枝刈り処理で棄却されなかったサンプルは 次のステップへ 対応間の幾何学的関係を利用した フィルタリング処理になっている
  45. 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. 46. Aoki Media Sensing Lab., Keio Univ. ICP による精密位置決め  ICPアルゴリズムによる精密位置決め  特徴点マッチングで得られた点のみから位置姿勢を決定すると 若干の誤差が残る.  得られた位置姿勢を初期値とし,ICPアルゴリズムによって誤差を修正す る. 46 RANSAC で推定した変換の重ね合わせ結果 (端の方のずれが目立つ) ICPの結果
  47. 47. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. 基本的な処理 2. データの取得方法 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. ロボットアームによるピッキングの例 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 47
  48. 48. Aoki Media Sensing Lab., Keio Univ. ロボットアームによるピッキングの例 48 Tcam2tool Σcam Σtool Σrobo probo=Tcam2toolpcam 対応点を数十点用意して, Tcam2toolについて解く  ロボットと3Dセンサ間の外部パラメータのキャリブレー ション  カメラ座標をロボット座標に変換する行列 Tcam2toolを推定する Trobo2tool
  49. 49. Aoki Media Sensing Lab., Keio Univ. 対応点の取り方の事例 49 誤差約3~5mm程度で 外部パラメータを決定 (誤差率約1.7%)  半径既知の球を持たせて,さまざまな位置にロボットを動か しながら撮影.  球の重心をツール座標に一致させる  球の重心点(検出する)とロボットの制御パラメータ(ツール座標の位 置)を対応点とする  球体の検出は平行移動のみを考えればよいので楽 誤差の要因 ・ハンドと球の取り付け甘さ ・球体検出の誤差 ・センサの計測精度 :
  50. 50. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. 基本的な処理 2. データの取得方法 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. ロボットアームによるピッキングの例 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 50
  51. 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. 52. Aoki Media Sensing Lab., Keio Univ. Open3Dの特徴(PCLと比較して)  コードが圧倒的に少なくて済む  依存ライブラリが少ないのでビルドが早く導入が簡単  フィルタリング,法線推定,kd-treeなど,単純な前処理系の 基本機能が実装済み  RGBD画像処理が利用できる  PCLもサポートしているが利用例が少ない  現状で実装されているアルゴリズムの種類は限定的  3D特徴量,キーポイント検出器,セグメンテーションはPCLの方 が充実  可視化はOpen3Dの方が美しい  Scene Reconstructionのためのサポートが厚い  むしろこのためのサブモジュールが提供されているといった印象. 52
  53. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 64. Aoki Media Sensing Lab., Keio Univ. Contents 1. 導入 2. 3D点群処理の基礎 1. 基本的な処理 2. データの取得方法 3. 位置姿勢推定の仕組み 1. 位置姿勢推定の流れ 2. 最近の研究動向 4. ライブラリ・可視化ツールについて 1. Open3D 2. Cloud Compare 64
  65. 65. Aoki Media Sensing Lab., Keio Univ. Cloud Compare  多機能な点群ビューワ(.pcdファイルをそのまま読込可能)  フィルタリング処理,複数点群のインタラクティブな位置合わ せ等,様々な機能が実装されている 65 • 法線推定 • ダウンサンプリング • ノイズ除去 • 姿勢変更 • ICP • メッシュ生成 • 点のピッキング : などなど 点のピッキングで 2点間距離を計測した例 Cloud Compare の画面 http://www.danielgm.net/cc/
  66. 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. 67. Aoki Media Sensing Lab., Keio Univ. まとめ  現在のセンサ・ライブラリ・可視化ツールの選択肢を説明  センサ:インドアではActive stereo方式が主流  ライブラリ:Open3Dが登場.点群処理の敷居が下がった.  可視化ツール:有名どころでMeshLab.Cloud compareも便利.  3次元点群処理について説明  点群のデータ構造  基本処理のアルゴリズム  位置姿勢認識の流れ  Open3D の実装例の紹介 67

×