मैं एक पीआईवी-वर्कफ़्लो पर काम कर रहा हूं और मैं वर्तमान में हूंछवियों को पूर्व प्रसंस्करण। मुझे छवियों में परिप्रेक्ष्य विरूपण से छुटकारा पाना होगा। मेरे पास "छवि प्रसंस्करण टूलबॉक्स" और "कैमरा कैलिब्रेटर" है। मैं पहले से ही लेंस विरूपण से छुटकारा पा रहा हूं "undistortImage ();" और कैमरा पैराम्स ऑब्जेक्ट, जिसे एक शतरंज पैटर्न के माध्यम से अनुमानित किया जाता है।
पहला प्रश्न: छवि को विकृत रूप से विकृत करने के लिए कैमरा पैराम ऑब्जेक्ट का उपयोग करना संभव है, ताकि मेरी शतरंज छवि में सुधार हो?
दूसरा सवाल: चूंकि मैं कैमरा पैराम का उपयोग करने में सक्षम नहीं थावस्तु, मैंने मैन्युअल रूप से परिवर्तन कार्यों का उपयोग करने की कोशिश की। मैंने नियंत्रण-बिंदुओं के जोड़ों का उपयोग करने की कोशिश की (सीपीसीलेक्शन टूल, मूल छवि और जेनरेट की गई शतरंज-छवि के साथ) और फिटजोट्रान (मूविंग पॉइंट्स, फिक्स्ड पॉइंट्स, "प्रोजेक्टिव"); मेरे tform-object पाने के लिए समारोह। हालांकि मुझे हमेशा त्रुटि संदेश मिलता है:
Error using fitgeotrans>findProjectiveTransform (line 189)
At least 4 non-collinear points needed to infer projective transform.
Error in fitgeotrans (line 102)
tform = findProjectiveTransform(movingPoints,fixedPoints);
मैंने नियंत्रण-बिंदुओं (4 जोड़े या अधिक) के कई अलग-अलग जोड़े की कोशिश की। लेकिन मुझे अभी भी यह त्रुटि मिल रही है। मुझे विश्वास है कि मुझे यहां कुछ नजरअंदाज करना होगा।
किसी भी मदद की सराहना की है, धन्यवाद।
स्टीफ़न
उत्तर:
जवाब के लिए 2 № 1यदि आप अंशांकन छवियों में से किसी एक का उपयोग कर रहे हैं, तो आपको आवश्यक सभी जानकारीएं हैं cameraParams
वस्तु।
मान लें कि आप अंशांकन छवि 1 का उपयोग कर रहे हैं, और इसे कॉल करें I
। सबसे पहले, छवि को अनदेखा करें:
I = undistortImage(I, cameraParams);
अपनी छवि के लिए extrinsics (रोटेशन और अनुवाद) प्राप्त करें:
R = cameraParams.RotationMatrices(:,:,1);
t = cameraParams.TranslationVectors(1, :);
फिर एक मैट्रिक्स में रोटेशन और अनुवाद गठबंधन करें:
R(3, :) = t;
अब चेकरबोर्ड और छवि विमान के बीच होमोग्राफी की गणना करें:
H = R * cameraParams.IntrinsicMatrix;
होमोग्राफी के विपरीत का उपयोग कर छवि को बदलें:
J = imwarp(I, projective2d(inv(H)));
imshow(J);
आपको चेकरबोर्ड के "पक्षी" की आंखों का दृश्य देखना चाहिए। यदि आप अंशांकन छवियों में से किसी एक का उपयोग नहीं कर रहे हैं, तो आप गणना कर सकते हैं R
तथा t
का उपयोग करते हुए extrinsics
समारोह।
ऐसा करने का एक और तरीका उपयोग करना है detectCheckerboardPoints
तथा generateCheckerboardPoints
, और फिर उपयोग कर होमोग्राफी की गणना करें fitgeotform
.