2011-05-13 10 views
13

मैं Jean- Yves Bouget's Camera Calibration Toolbox का उपयोग कर कैमरा अंशांकन के लिए मैटलैब का उपयोग कर रहा हूं। मेरे पास अंशांकन प्रक्रिया से सभी कैमरा पैरामीटर हैं। जब मैं अंशांकन सेट में पर एक नई छवि का उपयोग नहीं करता, तो मैं इसके परिवर्तन समीकरण को प्राप्त कर सकता हूं उदा। एक्ससी = आर * एक्स + टी, जहां एक्स विश्व अंश में कैलिब्रेशन रिग (प्लानर) का 3 डी बिंदु है, और एक्ससी कैमरा फ्रेम में इसके निर्देशांक है। अन्य शब्दों में, मेरे पास सबकुछ है (बाहरी और आंतरिक पैरामीटर दोनों)।ज्ञात आंतरिक और बाह्य मानकों से Matlab में परिप्रेक्ष्य सुधार कैसे करें?

मुझे क्या करना चाहते हैं इस छवि अर्थात मैं इसे किसी भी परिप्रेक्ष्य को हटाने और अंशांकन रिग undistorted (अपने एक बिसात) देखना चाहते हैं पर परिप्रेक्ष्य सुधार प्रदर्शन करने के लिए है।

मैटलैब के नए कंप्यूटर विजन टूलबॉक्स एक 3X3 मैट्रिक्स एच समस्या है को देखते हुए, एक वस्तु है कि एक छवि पर एक दृष्टिकोण परिवर्तन करता है, मैं भी जाना जाता है आंतरिक और बाह्य पैरामीटर से यह मैट्रिक्स की गणना नहीं कर सकता!

+0

मैं इसका उत्तर भी जानना चाहूंगा। मुझे लगता है कि इस पेपर में कुछ सुराग हो सकता है: http://webee.technion.ac.il/~lihi/Publications/ZelnikIrani.Homogs.pami.pdf, हालांकि मेरे पास पढ़ने और पचाने का समय नहीं है। – n00dle

उत्तर

1

दृष्टिकोण 1: कैमरा अंशांकन टूलबॉक्स में आपको ध्यान रखना चाहिए कि आपके वर्कस्पेस में आपके चेकरबोर्ड की प्रत्येक छवि के लिए एच मैट्रिक्स है। मैं अभी तक कंप्यूटर दृष्टि टूलबॉक्स से परिचित नहीं हूं लेकिन शायद यह आपके मैट्रिक्स के लिए आवश्यक मैट्रिक्स है। ऐसा लगता है कि एच इसलिए की तरह की जाती है:

KK = [fc(1) fc(1)*alpha_c cc(1);0 fc(2) cc(2); 0 0 1]; 
H = KK * [R(:,1) R(:,2) Tc]; % where R is your extrinsic rotation matrix and Tc the translation matrix 
H = H/H(3,3); 

दृष्टिकोण 2: कंप्यूटर दृष्टि टूलबॉक्स समारोह आप के लिए काम नहीं करता है तो एक छवि के भावी प्रक्षेपण को खोजने के लिए मैं बहुत तरह interp2 समारोह का इस्तेमाल किया है :

[X, Y] = meshgrid(0:size(I,2)-1, 0:size(I,1)-1); 
im_coord = [X(:), Y(:), ones(prod(size(I_1)))]'; 
% Insert projection here for X and Y to XI and YI 
ZI = interp2(X,Y,Z,XI,YI); 

मैंने कुछ समय पहले एक परियोजना पर भावी अनुमानों का इस्तेमाल किया है और मुझे विश्वास है कि आप सजातीय निर्देशांक का उपयोग करने की जरूरत है। मुझे लगता है कि मुझे this विकिपीडिया लेख काफी उपयोगी पाया गया।

4

इतने सारे महीनों के बाद भी इसमें रुचि रखने वाले सभी लोगों के लिए, मैंने कोवेसी के कोड (http://www.csse.uwa.edu.au/~pk/research/matlabfns), और विशेष रूप से homography2d.m फ़ंक्शन का उपयोग करके सही होमोग्राफी मैट्रिक्स प्राप्त करने में कामयाब रहा है। आपको रिग के चार कोनों के पिक्सेल मानों की आवश्यकता होगी। अगर कैमरा स्थिर है, तो आपको इसे एक बार करने की आवश्यकता होगी। नीचे उदाहरण कोड देखें:

%get corner pixel coords from base image 
p1=[33;150;1]; 
p2=[316;136;1]; 
p3=[274;22;1]; 
p4=[63;34;1]; 
por=[p1 p2 p3 p4]; 
por=[0 1 0;1 0 0;0 0 1]*por; %swap x-y <-------------------- 

%calculate target image coordinates in world frame 
% rig is 9x7 (X,Y) with 27.5mm box edges 
XXw=[[0;0;0] [0;27.5*9;0] [27.5*7;27.5*9;0] [27.5*7;0;0]]; 
Rtarget=[0 1 0;1 0 0;0 0 -1]; %Rotation matrix of target camera (vertical pose) 
XXc=Rtarget*XXw+Tc_ext*ones(1,4); %go from world frame to camera frame 
xn=XXc./[XXc(3,:);XXc(3,:);XXc(3,:)]; %calculate normalized coords 
xpp=KK*xn; %calculate target pixel coords 

% get homography matrix from original to target image 
HH=homography2d(por,xpp); 
%do perspective transformation to validate homography 
pnew=HH*por./[HH(3,:)*por;HH(3,:)*por;HH(3,:)*por]; 

यह चाल चलाना चाहिए। ध्यान दें कि मैटलैब एक्स अक्ष को छवि में पंक्तियों इंडेक्स और वाई को कॉलम के रूप में परिभाषित करता है। इस प्रकार किसी को समीकरणों में एक्स-वाई को स्वैप करना होगा (जैसा कि आप शायद ऊपर दिए गए कोड में देखेंगे)। इसके अलावा, मैं पूरी तरह से पैरामीटर से होमोग्राफी मैट्रिक्स की गणना करने में कामयाब रहा था, लेकिन परिणाम थोड़ा दूर था (शायद अंशांकन टूलबॉक्स में राउंडऑफ त्रुटियां)। ऐसा करने का सबसे अच्छा तरीका उपर्युक्त है।

यदि आप केवल कैमरा पैरामीटर का उपयोग करना चाहते हैं (यानी, कोवेसी के कोड का उपयोग न करें), तो होमोग्राफी मैट्रिक्स एच = केके * रैमेट * inv_KK है। इस मामले में कोड है,

% corner coords in pixels 
p1=[33;150;1]; 
p2=[316;136;1]; 
p3=[274;22;1]; 
p4=[63;34;1]; 
pmat=[p1 p2 p3 p4]; 
pmat=[0 1 0;1 0 0;0 0 1]*pmat; %swap x-y 

R=[0 1 0;1 0 0;0 0 1]; %rotation matrix of final camera pose 
Rmat=Rc_ext'*R; %rotation from original pose to final pose 
H=KK*Rmat*inv_KK; %homography matrix 
pnew=H*pmat./[H(3,:)*pmat;H(3,:)*pmat;H(3,:)*pmat]; %do perspective transformation 

H2=[0 1 0;-1 0 0;0 0 1]*H; %swap x-y in the homography matrix to apply in image 
+0

@ मॉडरेटर: मैंने एक अनियंत्रित खाते के साथ प्रश्न पोस्ट किया है, इसे किसी अन्य अनियंत्रित खाते के साथ उत्तर दिया है और गणित के साथ एक पंजीकृत है .stackexchange! अगर कोई तीनों को एकजुट करेगा तो मैं अच्छा होगा। – Jorge

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