2014-12-31 149 views
11

デプスマップを計算するために使用したいステレオ画像が2つあります。私は残念ながらC/C++を知らないのですが、私はPythonを知っています - だからthis tutorialを見つけたとき、私は楽観的でした。Python/OpenCV:ステレオ画像からデプスマップを計算する

残念ながら、このチュートリアルは多少古くなっているようです。チュートリアル自体で使用されたそれは、すべての(「StereoBM」にリネーム「createStereoBM」)で実行するように微調整する必要がないだけでなく、それが実行しない場合には、それが良い結果を与えるものではありません、でも例のステレオ画像に。

image-left image-right

import numpy as np 
import cv2 
from matplotlib import pyplot as plt 

imgL = cv2.imread('Yeuna9x.png',0) 
imgR = cv2.imread('SuXT483.png',0) 

stereo = cv2.StereoBM(1, 16, 15) 
disparity = stereo.compute(imgL, imgR) 

plt.imshow(disparity,'gray') 
plt.show() 

結果:ここで

は一例です

the result

これはチュートリアルの著者が実現するものとは非常に異なって見えます:

good result http://docs.opencv.org/trunk/_images/disparity_map.jpg

パラメータを調整しても問題は改善されません。私が見つけたすべてのドキュメントは、オリジナルのC言語版のopenCVコードであり、python-library-equivalentではありません。残念ながら、これを使って物事を改善することはできませんでした。

助けていただけたら幸いです!

+0

は、チュートリアルでは、将来(opencv3.0)からですが、はい、それは時代遅れです。現在の3.0では、cv2.StereoBM_create()またはcv2.StereoSGBM_create()を使用する必要があります。 – berak

+0

cv2.StereoBMが存在するようですが、cv2.StereoBM_create()またはcv2.StereoSGBM_create()を使用するとエラー(属性エラー)が発生します。 – jwdink

+0

もう一度、あなたは明らかに3.0ではなくopencv2.4を使用しています。 – berak

答えて

-1

の代わりに、のように変換されます。です。画像を90度回転させてから、試してみてください。 (画面を回転させることにより、自分自身にそれを証明私はちょうど私のラップトップをピックアップし、その端にそれを回した。。)あなたは別のソフトウェアに言及

。元の行とpyOpenCVの間に行のメジャー/列主なものがあるかもしれません。

+0

私があなたの提案を正しく理解しているなら、ソースイメージを90度回転させてから同じコードを実行してみるべきですか?私はちょうどこれを試みました - それはより良い結果を生み出しません。あなたはこれを働かせましたか?もしそうなら、あなたは結果を投稿できますか? – jwdink

+0

これはちょうど質問の書式設定だと思う...画像は水平に分離された2つの視点から来ている。 – will

+0

さらに、これが当てはまる場合、重要ではありません。左下に* bottom *画像を置くだけでいいです(参照フレームを回転させる)。それぞれの画像を個別に回転させると、実際には動作しなくなります。 – will

1

ブロックマッチングアルゴリズムのパラメータを調整し続ける必要がある可能性があります。

は、このブログの記事を見て:https://erget.wordpress.com/2014/03/13/building-an-interactive-gui-with-opencv/

記事の著者は、OpenCVのチュートリアルよりも合理化されたカメラのキャリブレーションのプロセスを作るために一連のクラスを構成しています。あなたがイメージに周りに間違った方法があり、このことができますhttps://github.com/erget/StereoVision

希望:)

15

:これらのクラスはは、PyPIパッケージとしてご利用いただけます。このチュートリアルでは、画像を見れば

# v 
imgR = cv2.imread('Yeuna9x.png',0) 
imgL = cv2.imread('SuXT483.png',0) 
#^

:画像で

ルックは、ランプの背後にある錫は

はただ、これを変更し、あなたが2枚の画像のカメラ位置をうまくすることができます彼らは leftフレームであり、それはあなたの rightと同じです。ここで

は、変更後の私の結果です。ちょうどレコードの

enter image description here

関連する問題