Learning Open3D

Created Date: 2020-02-02



Install

このファイルを作成時点のバージョン: 0.9.0.0

  • http://www.open3d.org/docs/getting_started.html#ubuntu

  • Ubuntu において python3使用を想定

    • Anaconda pythonとUbuntu組み込みのpython3のどちらをつかているかわからない場合: python -Vを実行させてみる。Anacondaが表示されなければUbuntu組み込み
    • Anacondaの場合: (場合によっては sudo が必要な場合がある)
      conda install -c open3d-admin open3d
    • Ubuntu組み込みのpython3の場合: (sudo apt update ; sudo apt upgradeを予めしたほうが良い)
      python3 -m pip install open3d

注意: 上のインストールでは、Tutorial用のいろいろなファイルが用意されない。TestData.zipをダウンロードし、このOpen3D.htmlファイルと同じディレクトリの下でunzip -x TestData.zipで展開する

  • 元サイトは `Open3D/build/lib/Tutorial/Basic'などを作業用ディレクトリとして、そこにあるPythonプログラムを実行するという形式をとっている。しかしここではnotebookからコードを実行するため、このような変更を行っている)

Compiling from source

ソースからのシステム構築

http://www.open3d.org/docs/release/compilation.html にあるように、Open3Dを発展させたいなどの要求がある場合、ソースコードからシステム構築をしたほうが良い。詳しくは先のページを参照のこと。

jupyter notebookによる可視化が0.4.0版から実験的についている。これを利用するのは node と npm (ともにNode.js)が必要である。
sudo apt install npm
を実行しておくとよい


Getting Started

Open3d module

open3d モジュールのimportの確認

In [1]:
import open3d
# もしくは(以下ではこちらの方が好まれる)
import open3d as o3d

注意:

2年ほど前まではpy3dという名称であった

Running Open3D tutorials

注意: Open3DのPython tutorial では、 numpy, matplotlib, opencvなどのモジュールを用いている。 ただしOpenCV は再構築システムとしてだけ使っている。用いているモジュールなど詳しくは scripts/install-deps-python.sh を読むこと。

Python tutorialとテスト用のデータを一式コピーし、Open3D Pythonインタフェースの使い方について学ぶ。Open3D_examples.zipをダウンロードし、展開する。

以下はLinuxを想定しているが、WindowsやMacOSでも同様にできる。ただしopen3dがpythonでimportできることが前提。

Open3D_examples.zipを展開したディレクトリを作業ディレクトリとしたところで、以下を実行する

cd examples/Python/Basic
python rgbd_redwood.py

これは一対のRGB-D画像を読み込み、視覚化するプログラムである。この rgbd_redwood.pyのソースを示す。またこれをJupyter notebookで実行するには以下を実行しておくと良い:

In [1]:
import os
os.chdir('/home/sirai/Open3D/examples/Python/Basic')
In [2]:
%matplotlib inline
In [3]:
# Open3D: www.open3d.org
# The MIT License (MIT)
# See license file or visit www.open3d.org for details

# examples/Python/Basic/rgbd_redwood.py

import open3d as o3d
import matplotlib.pyplot as plt

if __name__ == "__main__":
    print("Read Redwood dataset")
    color_raw = o3d.io.read_image("../../TestData/RGBD/color/00000.jpg")
    depth_raw = o3d.io.read_image("../../TestData/RGBD/depth/00000.png")
    rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
        color_raw, depth_raw)
    print(rgbd_image)

    plt.subplot(1, 2, 1)
    plt.title('Redwood grayscale image')
    plt.imshow(rgbd_image.color)
    plt.subplot(1, 2, 2)
    plt.title('Redwood depth image')
    plt.imshow(rgbd_image.depth)
    plt.show()

    pcd = o3d.geometry.PointCloud.create_from_rgbd_image(
        rgbd_image,
        o3d.camera.PinholeCameraIntrinsic(
            o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))
    # Flip it, otherwise the pointcloud will be upside down
    pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
    o3d.visualization.draw_geometries([pcd])
Read Redwood dataset
RGBDImage of size 
Color image : 640x480, with 1 channels.
Depth image : 640x480, with 1 channels.
Use numpy.asarray to access buffer data.

これはRGB-D画像をポイントクラウドに変換し、Open3D可視化プログラムでレンダリングする:

http://www.open3d.org/docs/release/_images/redwood_pcd.png

このPythonのコードは極めて簡単であり、詳しい説明は Redwood データセットにあるので参照のこと。Tutorialにはこれ以外にいろいろなものが試せるので参照のこと。

注:

ソースからのシステム構築、文書作成、Open3Dへの貢献、については本稿では省略する。関心のあるかたはOpen3D.orgを参照されたい