2枚の画像(左画像と右画像)からステレオ法により,物体の3次元情報を抽出しようとしています.画像内容は図形(三角錐,直方体など)が重なって配置してあるものです.
カメラパラメータは未知であるが,平行ステレオで撮影されており,カメラ中心間の距離,直方体のある一つの頂点の奥行き(撮影者からの距離)はわかっている状態です.
この状態から,画像内の図形の頂点座標を抽出,さらには撮影位置以外の地点から撮影したらどのような画像になるかを知りたいです
精度は悪いですが,一枚の画像から頂点を抽出しプロットすることには以下のコードで成功しました.
しかし,カメラ中心間の距離,直方体のある一つの頂点の奥行き(撮影者からの距離)を用いずopenCVを用い実装したため,2枚の画像を組み合わせて,3次元の座標を抽出できていません.
解決方法を教えていただきたいです.また,さらに,別方面からの撮影画像の生成の方法を教えていただきたいです.
Python
1import cv2 2import numpy as np 3 4filename = 'left.jpg' 5img = cv2.imread(filename) 6gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 7 8# find Harris corners 9gray = np.float32(gray) 10dst = cv2.cornerHarris(gray,2,3,0.04) 11dst = cv2.dilate(dst,None) 12ret, dst = cv2.threshold(dst,0.01*dst.max(),255,0) 13dst = np.uint8(dst) 14 15# find centroids 16ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst) 17 18# define the criteria to stop and refine the corners 19criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001) 20corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria) 21 22# Now draw them 23res = np.hstack((centroids,corners)) 24res = np.int0(res) 25img[res[:,1],res[:,0]]=[0,0,255] 26img[res[:,3],res[:,2]] = [0,255,0] 27 28cv2.imwrite('subpixel5.png',img)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。