2013-09-26 8 views
6

मैं औसत 0 और भिन्नता 1 के साथ यादृच्छिक संख्याओं के मैट्रिक्स (2xN) उत्पन्न करने के लिए सबसे अच्छा समाधान ढूंढ रहा हूं, जैसे कि रैंडन() मैटलैब में ।ओपनसीवी: रैंडन() जनरेटर जैसे मैटलैब

वहाँ OpenCV पुस्तकालयों में एक randn() समारोह है, लेकिन मैं यह कैसे कार्य करने के लिए तर्क पारित करने के लिए मतलब 0 और विचरण 1.

उत्तर

12

OpenCV के साथ संख्या उत्पन्न करने के लिए पता नहीं है एक randn() समारोह और यह भी एक RNG है कक्षा। नीचे मैटलैब कोड है जिसे आप प्रतिस्थापित करना चाहते हैं, और बराबर ओपनसीवी कोड।

मैटलैब:

matrix2xN = randn(2,N) 

OpenCV:

cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1); 
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1); 
cv::RNG rng(optional_seed); 
cv::Mat matrix2xN(2,N,CV_64FC1); 
rng.fill(matrix2xN, cv::RNG::NORMAL, mean, sigma); 

या

cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1); 
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1); 
cv::randn(matrix2xN, mean, sigma); 

आंतरिक रूप से, OpenCV लागू करता randn()का उपयोग कर। randn() का उपयोग करते समय नुकसान यह है कि आप बीज पर नियंत्रण खो देते हैं।

यदि matrix2xN ऊपर एक से अधिक चैनल थे तो प्रत्येक चैनल के लिए एक अलग अर्थ/सिग्मा का उपयोग किया जाता है। इस मामले में आपको matrix2xN में चैनलों की संख्या से मेल खाने के लिए पंक्तियों (या कोल्स) में औसत और सिग्मा की संख्या में प्रवेश करना होगा।

+0

इस उत्तर के लिए धन्यवाद। +1। एक sidenote के रूप में, यह एपीआई डिजाइन में मतलब या मानक विचलन निर्दिष्ट करने के लिए केवल एक तत्व के 'सीवी :: Mat' निर्दिष्ट करने के लिए अपमानजनक लगता है .... एक स्केलर, या 'सीवी :: स्केलर 'इसके बजाय अधिक उपयुक्त हो? अजीब। – rayryeng

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