ओपनसीवी के कार्यों का अनुमान है RigidTransform() और warpAffine() जो इस तरह की समस्या को वास्तव में अच्छी तरह से संभालते हैं।
इसकी काफी इस के रूप में सरल:
Mat M = estimateRigidTransform(frame1,frame2,0)
warpAffine(frame2,output,M,Size(640,480),INTER_NEAREST|WARP_INVERSE_MAP)
अब output
frame2
की सामग्री है कि सबसे अच्छा frame1
को फिट करने के लिए गठबंधन किया जाता है। बड़ी बदलावों के लिए, एम शून्य मैट्रिक्स होगा या यह ओपनसीवी के संस्करण के आधार पर मैट्रिक्स नहीं हो सकता है, इसलिए आपको उन्हें फ़िल्टर करना होगा और उन्हें लागू नहीं करना होगा। मुझे यकीन नहीं है कि यह कितना बड़ा है; शायद आधा फ्रेम चौड़ाई, शायद अधिक।
अनुमानित करने के लिए तीसरा पैरामीटर RigidTransform एक बूलियन है जो यह बताता है कि क्या मनमाने ढंग से एफ़िन मैट्रिक्स को लागू करना है या इसे अनुवाद/रोटेशन/स्केलिंग तक सीमित करना है। कैमरे से छवि को स्थिर करने के प्रयोजनों के लिए आप शायद बाद वाले को चाहते हैं। वास्तव में, कैमरा छवि स्थिरीकरण के लिए आप केवल रोटेशन और अनुवाद के लिए इसे सामान्यीकृत करके लौटा मैट्रिक्स से किसी भी स्केलिंग को हटाना चाहते हैं।
इसके अलावा, एक चलती कैमरे के लिए, आप शायद समय के माध्यम से एम का नमूना देना चाहते हैं और एक माध्य की गणना करना चाहते हैं।
यहाँ estimateRigidTransform() बारे में अधिक जानकारी के लिए लिंक कर रहे हैं, और warpAffine()
महान जवाब! एक अच्छी सूची मुझे चरण सहसंबंध के बारे में पता नहीं था। धन्यवाद ! –