के साथ अपनी सामग्री के आधार पर 2 छवियों को संरेखित कैसे करें मैं ओपनसीवी के लिए बिल्कुल नया हूं और मैंने इसमें गोता लगाने शुरू कर दिया है। लेकिन मुझे थोड़ी सी मदद की ज़रूरत होगी।ओपनसीवी
तो मैं इन 2 छवियों संयोजित करना चाहते हैं:
2 छवियों उनके किनारों के साथ मैच के लिए (अब के लिए छवि के बहुत सही हिस्सा अनदेखी)
चाहते हैं कर सकते हैं कृपया मुझे सही दिशा में इंगित करें? मैंने findTransformECC
फ़ंक्शन का उपयोग करने का प्रयास किया है। यहाँ मेरी कार्यान्वयन है:
cv::Mat im1 = [imageArray[1] CVMat3];
cv::Mat im2 = [imageArray[0] CVMat3];
// Convert images to gray scale;
cv::Mat im1_gray, im2_gray;
cvtColor(im1, im1_gray, CV_BGR2GRAY);
cvtColor(im2, im2_gray, CV_BGR2GRAY);
// Define the motion model
const int warp_mode = cv::MOTION_AFFINE;
// Set a 2x3 or 3x3 warp matrix depending on the motion model.
cv::Mat warp_matrix;
// Initialize the matrix to identity
if (warp_mode == cv::MOTION_HOMOGRAPHY)
warp_matrix = cv::Mat::eye(3, 3, CV_32F);
else
warp_matrix = cv::Mat::eye(2, 3, CV_32F);
// Specify the number of iterations.
int number_of_iterations = 50;
// Specify the threshold of the increment
// in the correlation coefficient between two iterations
double termination_eps = 1e-10;
// Define termination criteria
cv::TermCriteria criteria (cv::TermCriteria::COUNT+cv::TermCriteria::EPS, number_of_iterations, termination_eps);
// Run the ECC algorithm. The results are stored in warp_matrix.
findTransformECC(
im1_gray,
im2_gray,
warp_matrix,
warp_mode,
criteria
);
// Storage for warped image.
cv::Mat im2_aligned;
if (warp_mode != cv::MOTION_HOMOGRAPHY)
// Use warpAffine for Translation, Euclidean and Affine
warpAffine(im2, im2_aligned, warp_matrix, im1.size(), cv::INTER_LINEAR + cv::WARP_INVERSE_MAP);
else
// Use warpPerspective for Homography
warpPerspective (im2, im2_aligned, warp_matrix, im1.size(),cv::INTER_LINEAR + cv::WARP_INVERSE_MAP);
UIImage* result = [UIImage imageWithCVMat:im2_aligned];
return result;
मैं termination_eps
और number_of_iterations
के साथ प्रयोग करना की कोशिश की और बढ़ गई हैं/उन मूल्यों में कमी आई है, लेकिन वे वास्तव में एक बड़ा अंतर नहीं किया।
परिणाम है:
मैं अपने परिणाम सुधारने के लिए क्या कर सकते हैं?
संपादित करें: मैंने लाल मंडलियों के साथ समस्याग्रस्त किनारों को चिह्नित किया है।
मैं अनुसंधान का एक छोटा सा था और मुझे डर लग रहा findTransformECC
समारोह मुझे नहीं देंगे: लक्ष्य नीचे छवि के ताने और यह ऊपर छवि से लाइनों के साथ मिलान करने के लिए है नतीजा यह है कि मैं चाहता हूं :-(
कुछ महत्वपूर्ण जोड़ने के लिए: मेरे पास वास्तव में उन छवियों "पट्टियों" की एक सरणी है, 8 इस मामले में, वे सभी यहां दिखाए गए चित्रों के समान दिखते हैं और उन्हें सभी की आवश्यकता है लाइन से मेल खाने के लिए संसाधित किया जाना चाहिए। मैंने ओपनसीवी के stitch
फ़ंक्शन के साथ प्रयोग करने का प्रयास किया है, लेकिन परिणाम भयानक थे।
संपादित करें:
यहाँ 3 स्रोत छवियों:
:
परिणाम कुछ इस तरह होना चाहिए
मैंने मिलान करने वाली रेखाओं के साथ हर छवि को बदल दिया। एक दूसरे से बहुत दूर की रेखाएं अनदेखा की जा सकती हैं (छवि के दाहिने भाग पर छाया और सड़क का टुकड़ा)
क्या आप हमें एक उदाहरण दिखा सकते हैं कि आप अपना परिणाम कैसा दिखाना चाहते हैं? – alhadhrami
@alhadhrami बेशक। मैंने प्रश्न में कुछ विवरण जोड़े हैं। – gasparuff
आपने मुझे गलत समझा। मैं एक सही आउटपुट का एक उदाहरण देखने के लिए कह रहा था, एक आउटपुट जिसे आप कोड बनाना चाहते हैं। @gasparuff – alhadhrami