Open3Dによる3次元点群処理まとめ
こんにちは。3Dエンジニアリングソリューション部のRataです。
本記事では、3部内の勉強会で行ったOpen3Dによる3次元点群処理を紹介します。本記事で紹介した3次元点群処理は書籍で紹介されているものの一部です。
参考書籍は以下です。
詳解 3次元点群処理 Pythonによる基礎アルゴリズムの実装 金崎 朝子 (著), 秋月 秀一 (著), 千葉 直也 (著)
▼前編はこちら
概要
Open3DとはC++およびPythonを用いて書かれた3次元点群データ処理関数を提供するオープンソースライブラリです。
本記事ではOpen3Dを用いて物体認識を行うための大まかな流れと用語、必要な関数を紹介します。使用言語はPythonです。
物体認識の流れは以下です。
まず3次元点群データセットを用意します。データセットは点群とそのラベルがセットになっているデータのことです。
次に、データセットと物体認識対象の3次元データから特徴量を抽出します。
データセットの特徴量とラベルを使用して、特徴量からラベルを推定する関数(識別子)を用意します。
最後に、識別子に物体認識対象の特徴量を入力することでラベルを推定します。
物体認識
物体認識とは、例えば現実世界の物体をセンサでスキャンして取得した点群とその物体の情報を結びつける処理です。点群の名称や姿勢を取得したり、ある範囲のデータから特定の物体を切り出したりすることができます。
ここでは狭義の物体認識である物体特定物体認識と一般物体認識について説明します。
特定物体認識:画像中の個別の物体を認識します。
一般物体認識:画像中の物体カテゴリーを認識します。
特定物体認識と一般物体認識のどちらも以下の手順で実行されます。
⓵3次元点群データセットを用意
⓶⓵から特徴量抽出(特徴量については次の項目で説明)
⓷特徴量からラベルを推定する関数(識別子)を用意
⓸物体認識対象の3次元データから特徴量を抽出
⓹関数(識別子)に⓸の特徴量を渡して⓶と⓸を比較してラベルを推定
f(物体認識対象例の特徴量) = スマイル
特徴量
特徴量とは入力データから何らかのパターンを表現するデータです。物体認識や位置合わせなど様々なことに使われます。大きく分けて大域特徴量と局所特徴量があります。
大域特徴量:データ全体を表現する特徴量で、クラス分類で使用されることが多いです。
局所特徴量:データの一部を表現する特徴量で、データ同士の対応付けを行うために使用されることが多いです。
以下では参考書籍にて物体認識で使われていた局所特徴量を取得する関数Fast Point Feature Histograms(FPFH)の使い方について説明します。FPFHでは近傍点探索関数と法線を使用します。
近傍点探索関数:点群から任意の点に近い点を探索するための関数。
法線:点群が物体表面に分布していると仮定して、その点における接平面に直行するベクトル。
import open3d as o3d
pcd = o3d.read_point_cloud(ファイル名)
# func :近傍点探索関数
# radious :半径
# max.nn :近傍点の最大個数
func =
o3d.geometry.KDTreeSearchParamHybrid(radious=0.01, max.nn=10)
# 法線計算を実行
pcd.estimate_normal(search_param=func)
局所特徴量 = o3d.pipelines.registration.compute_fpfh_feature(pcd, serch_program=func)
感想
今回は物体認識を行いました。物体認識で使用した特徴量は色々なところで使われているようです。参考にした書籍では他にも深層学習でクラス分類を行うモデルを作る方法でも使われていました。
#3D
#Open3D
#Python
#株式会社オープンストリームホールディングス
#ニュートラル株式会社
#openlab
#NTechブログ
#テックブログ
#IT
#エンジニア