トップページ -> データベース関連技術 -> ステレオ画像 -> ステレオマッチングによりステレオ画像から距離画像を求める(Python + OpenCV を使用)
[サイトマップへ], [サイト内検索へ]

ステレオマッチングによりステレオ画像から距離画像を求める(Python + OpenCV を使用)

次で公開されているプログラムを参考に、ステレオ画像から距離画像を求める

https://github.com/opencv/opencv/blob/master/samples/python/stereo_match.py

サイト内の関連ページ


前準備

Python のインストール,pip の更新,Python 開発環境のインストール

Windows の場合

  1. Python のインストール

    Python の URL: http://www.python.org/

    インストール手順の詳細は: 別ページで説明している.

  2. pip と setuptools の更新Python 開発環境(JupyterLab, spyder)のインストール

    コマンドプロンプトを管理者として実行し,次のコマンドを実行.

    python -m pip install -U pip setuptools
    python -m pip install -U jupyterlab jupyter jupyter-console jupytext spyder
    

Ubuntu の場合

システム Python を使用(インストール操作は不要)

  1. pip と setuptools の更新Python 開発環境(JupyterLab, spyder)のインストール

    次のコマンドを実行.

    sudo apt -yV install python3-dev python3-pip python3-setuptools
    sudo apt -yV install jupyter-qtconsole jupyter-notebook python3-jupyter-client python3-jupyter-console python3-spyder spyder3
    

opencv-python パッケージのインストール

  1. Windows では,コマンドプロン プトを管理者として実行
  2. opencv-python パッケージのインストール

    ※ Windows では「python」,Ubuntu では「sudo python3 -m pip」

    python -m pip install -U opencv-python
    

    [image]

このページで説明のために使用する画像

  1. まず、C:\image のような作業用のディレクトリ(フォルダ)を作る

    [image]
  2. 次の Web ページを開く

    https://github.com/opencv/opencv/tree/master/samples/data

  3. aloeL.jpg, alorR.jpg の2つをダウンロードし、C:\image の下に保存

ステレオマッチングによりステレオ画像から距離画像を求める

  1. Jupyter Qt Console を起動

    jupyter qtconsole
    

    [image]

    Python プログラムを動かして,結果をビジュアルに見たい.

    ここでは,Jupyter Qt Console を使っている. 他の開発環境(spyderPyCharmPyScripter など)も便利である.

    ※ 「jupyter qtconsole」を入れたのに,jupyter qtconsole起動しない という場合には,次の操作で,インストールを行ってから,もう一度試してみる.

    ※ Windows では「python」,Ubuntu では「sudo python3 -m pip」

    python -m pip install -U jupyterlab jupyter jupyter-console jupytext spyder
    
  2. 次を実行
    import cv2 
    import numpy as np
    
    imgL = cv2.imread("C:/image/aloeL.jpg")
    imgR = cv2.imread("C:/image/aloeR.jpg")
    
    # disparity range is tuned for 'aloe' image pair
    window_size = 3
    min_disp = 16
    num_disp = 112-min_disp
    stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
        numDisparities = num_disp,
        blockSize = 16,
        P1 = 8*3*window_size**2,
        P2 = 32*3*window_size**2,
        disp12MaxDiff = 1,
        uniquenessRatio = 10,
        speckleWindowSize = 100,
        speckleRange = 32
    )
    
    print('computing disparity...')
    disparity = stereo.compute(imgL, imgR).astype(np.float32) / 16.0
    
    cv2.imshow('disparity', (disparity-min_disp)/num_disp)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    [image]

    画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる


本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]