5

मैंने ओपनसीवी के findFundamentalMat का उपयोग करके दो कैमरों के बीच मौलिक मैट्रिक्स की गणना की है। फिर मैं छवि में epipolar लाइनों साजिश।मौलिक मैट्रिक्स से उत्पन्न और इसके विपरीत

Epipolar lines ok अब, मैं हार्टले & Zissserman दृष्टिकोण का उपयोग कर कि मौलिक मैट्रिक्स, कंप्यूटिंग पहले आवश्यक मैट्रिक्स से मुद्रा प्राप्त करने की कोशिश और उसके बाद: और मैं की तरह कुछ मिलता है।

K2=np.mat(self.calibration.getCameraMatrix(1)) 
K1=np.mat(self.calibration.getCameraMatrix(0)) 
E=K2.T*np.mat(F)*K1 

H&Z

w,u,vt = cv2.SVDecomp(np.mat(E)) 
if np.linalg.det(u) < 0: 
    u *= -1.0 
if np.linalg.det(vt) < 0: 
    vt *= -1.0 
#Find R and T from Hartley & Zisserman 
W=np.mat([[0,-1,0],[1,0,0],[0,0,1]],dtype=float) 
R = np.mat(u) * W * np.mat(vt) 
t = u[:,2] #u3 normalized. 

आदेश सब कुछ जाँच करने के लिए यहाँ तक सही था में, मैं ई और एफ recompute और epipolar लाइनों फिर साजिश।

S=np.mat([[0,-T[2],T[1]],[T[2],0,-T[0]],[-T[1],T[0],0]]) 
E=S*np.mat(R) 
F=np.linalg.inv(K2).T*np.mat(E)*np.linalg.inv(K1) 

लेकिन आश्चर्य की बात है कि लाइनें चली गई हैं और वे अब अंक से नहीं गुजरती हैं। क्या मैंने कुछ गलत किया?

epilines bad

यह इस सवाल http://answers.opencv.org/question/18565/pose-estimation-produces-wrong-translation-vector/ साथ संबंधित हो सकती है, लेकिन वे एक समाधान

प्रदान नहीं किया मैट्रिक्स मैं कर रहे हैं:

Original F=[[ -1.62627683e-07 -1.38840952e-05 8.03246936e-03] 
[ 5.83844799e-06 -1.37528349e-06 -3.26617731e-03] 
[ -1.15902181e-02 1.23440336e-02 1.00000000e+00]] 

E=[[-0.09648757 -8.23748182 -0.6192747 ] 
[ 3.46397143 -0.81596046 0.29628779] 
[-6.32856235 -0.03006961 -0.65380443]] 

R=[[ 9.99558381e-01 -2.72074658e-02 1.19497464e-02] 
    [ 3.50795548e-04 4.12906861e-01 9.10773189e-01] 
    [ -2.97139627e-02 -9.10366782e-01 4.12734058e-01]] 

T=[[-8.82445166e-02] 
[8.73204425e-01] 
[4.79298380e-01]] 

Recomputed E= 
[[-0.0261145 -0.99284189 -0.07613091] 
[ 0.47646462 -0.09337537 0.04214901] 
[-0.87284976 -0.01267909 -0.09080531]] 

Recomputed F= 
[[ -4.40154169e-08 -1.67341327e-06 9.85070691e-04] 
[ 8.03070680e-07 -1.57382143e-07 -4.67389530e-04] 
[ -1.57927152e-03 1.47100268e-03 2.56606003e-01]] 

उत्तर

2

पहले एफ अप करने के लिए परिभाषित किया गया है स्केल, इसलिए यदि आप लौटाए गए एफ की तुलना करने जा रहे हैं और ई से गणना की गई एफ मैट्रिक्स के साथ आपको यह सुनिश्चित करने के लिए सामान्यीकृत करने की आवश्यकता है कि दोनों एक ही पैमाने पर हैं। इसलिए आपको दूसरे गणना वाले एफ

+0

को सामान्यीकृत करने की आवश्यकता है, मैं संख्यात्मक रूप से दोनों की तुलना करने का लक्ष्य नहीं रखता हूं बल्कि केवल एपिपोलर लाइनों की साजिश करता हूं ... क्या यह महत्वपूर्ण है? सामान्यीकरण करते समय आपका मतलब सामान्यीकरण होता है? –

+0

हाँ एपिपोलर लाइनों की साजिश में आपको ओपनसीवी के फ़ंक्शन का उपयोग करना होगा और इसे मेरी समझ के अनुसार सामान्यीकृत मैट्रिक्स की भी आवश्यकता है। आपको ओपनसीवी में सामान्यीकरण के बारे में और कुछ पढ़ना होगा। (मैं सामान्यीकरण के प्रकार के बारे में बहुत निश्चित नहीं हूं क्योंकि मैंने इसे लंबे समय तक उपयोग किया था।) –

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