2017-01-02 5 views
9

मैं depth map with 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)) 

बाद में संपादित: 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

पर जाएं आपने अपना उत्तर वेलेंटाइन क्यों हटा दिया है? – user3601754

+0

[यह उत्तर] (http://stackoverflow.com/q/33497736/1510289) आपकी मदद कर सकता है। –

+0

धन्यवाद मैं इसे जांचता हूं;) – user3601754

उत्तर

4

मुझे जगह पर एक मोटा समाधान मिला है। आप इसे बाद में संशोधित कर सकते हैं।

मैंने दिए गए हीटमैप में रुचि के क्षेत्र को फसल करने के लिए ओपनसीवी में उपलब्ध माउस हैंडलिंग ऑपरेशंस का उपयोग किया।

(क्या मैंने अभी कहा था कि मैंने इस क्षेत्र को फसल करने के लिए माउस का उपयोग किया था?) हाँ, मैंने किया। OpenCV SEE THIS में माउस फ़ंक्शंस के बारे में अधिक जानने के लिए। इसके अलावा, कई अन्य अतः सवाल है कि आप इस संबंध में मदद कर सकते हैं :)

निम्नलिखित प्राप्त करने के लिए उन कार्यों मैं कर रहा था का उपयोग करना:।

enter image description here

अब झुकाव को दूर करने के अपने प्रश्न का । मैंने उपरोक्त छवि के कोने बिंदुओं को ले कर और एक निश्चित आकार की 'सफेद' छवि पर इसका उपयोग करके होमोग्राफी प्रिंसिपल का उपयोग किया। मैंने इसके लिए cv2.findHomography() फ़ंक्शन का उपयोग किया।

अब OpenCV में cv2.warpPerspective() समारोह का उपयोग कर, मैं निम्नलिखित प्राप्त करने में सक्षम था:

enter image description here

अब आप आप चाहते थे के रूप में इस छवि के लिए आवश्यक पैमाने कर सकते हैं।

कोड:

मैं भी आपके अवलोकन के लिए कोड के कुछ के टुकड़े संलग्न किया है:

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' बिंदुओं पर मैप किया जाना चाहता था:

pts_dst = np.array([[2.0, 2.0], [379.0, 2.0], [379.0, 435.0],[2.0, 435.0]]) 

अब मैं homography के प्रिंसिपल का प्रयोग किया:

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

अंत में मैं परिप्रेक्ष्य को बदलने का उपयोग कर सफेद छवि के लिए मूल छवि मैप किया।

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

संबंधित मुद्दे