2017-01-02 57 views
9

저는 depth map with OpenCV에서 일하고 있습니다. 나는 그것을 얻을 수는 있지만 왼쪽 카메라 원점에서 재구성되고이 후자의 약간의 기울기가 있으며 그림에서 볼 수 있듯이 깊이는 "이동"합니다 (깊이는 가깝고 수평 그래디언트가 없어야 함) :Python - 회전 각도에서 OpenCV를위한 원근감 변환

나는 제로 각도로 표현을하고 싶습니다

enter image description here

,

P = np.dot(cam,np.dot(Transl,np.dot(Rot,A1))) 

dst = cv2.warpPerspective(depth, P, (2048, 2048)) 

와 ... 난 당신이 아래에 볼 수있는 워프 관점의 기능을 시도하지만 난 널 필드를 얻을 :

#Projection 2D -> 3D matrix 
A1 = np.zeros((4,3)) 
A1[0,0] = 1 
A1[0,2] = -1024 
A1[1,1] = 1 
A1[1,2] = -1024 
A1[3,2] = 1 

#Rotation matrice around the Y axis 
theta = np.deg2rad(5) 
Rot = np.zeros((4,4)) 
Rot[0,0] = np.cos(theta) 
Rot[0,2] = -np.sin(theta) 
Rot[1,1] = 1 
Rot[2,0] = np.sin(theta) 
Rot[2,2] = np.cos(theta) 
Rot[3,3] = 1 

#Translation matrix on the X axis 
dist = 0 
Transl = np.zeros((4,4)) 
Transl[0,0] = 1 
Transl[0,2] = dist 
Transl[1,1] = 1 
Transl[2,2] = 1 
Transl[3,3] = 1 

#Camera Intrisecs matrix 3D -> 2D 
cam = np.concatenate((C1,np.zeros((3,1))),axis=1) 
cam[2,2] = 1 
P = np.dot(cam,np.dot(Transl,np.dot(Rot,A1))) 

dst = cv2.warpPerspective(Z0_0, P, (2048*3, 2048*3)) 
LATER

편집 : https://filex.ec-lille.fr/get?k=cCBoyoV4tbmkzSV5bi6 :

당신은 여기에 32MB의 필드 데이터 집합을 다운로드 할 수 있습니다. 그런 다음 이미지로드 및보기 :

from matplotlib import pyplot as plt 
import numpy as np 

img = np.load('testZ0.npy') 
plt.imshow(img) 
plt.show() 
+0

왜 valentin 답을 삭제 했습니까? – user3601754

+0

[이 답변] (http://stackoverflow.com/q/33497736/1510289)이 도움이 될 수 있습니다. –

+0

감사합니다.) – user3601754

답변

4

나는 적절한 해결책을 가지고 있습니다. 나중에 수정할 수 있습니다.

OpenCV에서 사용할 수있는 마우스 조작을 사용하여 지정된 히트 맵에서 관심 영역을 자릅니다.

(단지 지역을 자르기 위해 마우스를 사용 했습니까?) 예, 했었습니다. OpenCV SEE THIS의 마우스 기능에 대해 자세히 알려면. 게다가,이 점에서 당신을 도울 수있는 다른 많은 SO 질문이 있습니다 :) 다음 얻기 위해 내가 할 수 있었다 이러한 기능을 사용

:.

이제

enter image description here

기울기를 제거하는 질문에 . 나는 위의 이미지의 모서리 점을 찍어 그것을 명확한 크기의 '흰색'이미지에 사용함으로써 동조 본을 사용했다. 나는 이것을 위해 cv2.findHomography() 함수를 사용했다.

이제 OpenCV의에서 cv2.warpPerspective() 기능을 사용

, 나는 다음과 같은 얻을 수 있었다 :

enter image description here

지금이 이미지에 필요한 규모는 당신이 원하는 수있다.

CODE :

나는 또한 당신의 열람에 대한 코드의 일부 조각을 첨부 :

pts_src = np.array([[25.0, 2.0],[403.0,22.0],[375.0,436.0],[6.0,433.0]]) 
:

#First I created an image of white color of a definite size 
back = np.ones((435, 379, 3)) # size 
back[:] = (255, 255, 255)  # white color 

다음 내가 아래로 기울어 진 이미지의 모서리 점을 pts_src를 얻을

위의 점을 아래에 주어진 점 'pts_dst'에 매핑하고 싶었습니다 :

h, status = cv2.findHomography(pts_src, pts_dst) 

마지막으로 내가 관점 변환을 사용하여 흰색 이미지 원본 이미지를 매핑 :
pts_dst = np.array([[2.0, 2.0], [379.0, 2.0], [379.0, 435.0],[2.0, 435.0]]) 

는 지금은 호모 그래피의 주체를 사용했다.

fin = cv2.warpPerspective(img, h, (back.shape[1],back.shape[0])) 
# img -> original tilted image. 
# back -> image of white color. 

희망이 있습니다. 나는 또한이 질문에서 많은 것을 배워야한다.

참고 : 'cv2.findHomography()'에 제공된 점수는 float이어야합니다. 동역학에 대한 자세한 내용은 THIS PAGE