दिलचस्प पोस्ट
प्रतिबिंब के माध्यम से मैं निजी तरीकों और निजी डेटा सदस्यों का कैसे उपयोग कर सकता हूं? वर्तमान दिनांक पास करना पीडीएफ फ़ाइल अपलोड करना सर्वर एंड्रॉइड को छवियां अपलोड करना मैं iOS7 में datePicker के फ़ॉन्ट का रंग बदल सकता हूँ? किसी दृश्य के पूर्ण निर्देशांक कैसे प्राप्त करें एक विधि का पुन: शुद्ध करने का सबसे अच्छा तरीका क्या है जिसमें बहुत अधिक (6+) मापदंड हैं? मैं एक्लिप्स में अपने एडीटी को कैसे अपडेट कर सकता हूं? मैं विंडोज प्रोग्राम के साथ C ++ में कंसोल आउटपुट कैसे प्राप्त करूं? कैसे बनाने के लिए एकाधिक क्वेरी कहाँ क्वेरी क्वेरी Laravel Eloquent? JQuery के सत्यापन प्लगइन के साथ बूटस्ट्रैप 3 Sass में गतिशील रूप से चर को बनाना या संदर्भ देना setTimeout / स्पष्ट टाइमआउट समस्याओं ऐप पुन: आरंभ होता है, फिर से शुरू होता है आर.सी. 1 में बाइंडिंग सिंटैक्स का उपयोग करके कुछ शैलियों को जोड़ा नहीं जा सकता है

छवियों के साथ ओपनसीवी और एसवीएम का उपयोग करना

मुझे एक छवि पढ़ने, प्रशिक्षण के लिए सुविधाओं को निकालने में कठिनाई हो रही है, और एसवीएम का उपयोग करके ओपनसीवी में नई छवियों का परीक्षण करना है। कोई मुझे एक महान लिंक करने के लिए बिंदु कर सकते हैं? मैंने वेक्टर मशीनों का समर्थन करने के लिए ओपनसीवी परिचय देखा है लेकिन यह छवियों में पढ़ने में मदद नहीं करता है, और मुझे यकीन नहीं है कि इसे कैसे शामिल किया जाए।


इस स्पष्टीकरण के लिए बहुत बहुत धन्यवाद मेरे लक्ष्यों को एक छवि में पिक्सेल वर्गीकृत करना है ये पिक्सेल घटता से संबंधित होगा। मैं प्रशिक्षण मैट्रिक्स बनाने के लिए समझता हूँ (उदाहरण के लिए, छवि ए 1,1 1,2 1,3 1,4 1,5 2,1 2,2 2,3 2,4 2,5 3,1 3,2 3, 3 3,4 3,5

मैं [3] [2] = {{1,1} {1,2} {1,3} {1,4} {1,5} {2,1}। {} के रूप में अपना प्रशिक्षण मैट्रिक्स बनायेगा }

हालांकि, मैं लेबल्स के बारे में थोड़ा भ्रमित हूं। मेरी समझ से, मुझे निर्दिष्ट करना होगा कि प्रशिक्षण मैट्रिक्स में कौन सी पंक्ति (छवि) मेल खाती है, जो वक्र या गैर-वक्र से मेल खाती है लेकिन, मैं एक प्रशिक्षण मैट्रिक्स पंक्ति (छवि) कैसे लेबल कर सकता हूँ अगर वक्र से संबंधित कुछ पिक्सल और कुछ वक्र से संबंधित हैं उदाहरण के लिए, मेरी प्रशिक्षण मैट्रिक्स है [3] [2] = {{1,1} {1,2} {1,3} {1,4} {1,5} {2,1} .. {}} , पिक्सल {1,1} और {1,4} वक्र से संबंधित हैं, लेकिन बाकी नहीं है

बहुत बहुत धन्यवाद –

वेब के समाधान से एकत्रित समाधान "छवियों के साथ ओपनसीवी और एसवीएम का उपयोग करना"

मुझे हाल ही में इस से निपटना पड़ा है, और यह है कि मैं छवियों के लिए एसवीएम काम करने के लिए क्या कर रहा हूं।

छवियों के सेट पर अपने एसवीएम को प्रशिक्षित करने के लिए, पहले आपको एसवीएम के लिए प्रशिक्षण मैट्रिक्स का निर्माण करना होगा। इस मैट्रिक्स को निम्नानुसार निर्दिष्ट किया गया है: मैट्रिक्स की प्रत्येक पंक्ति एक छवि से मेल खाती है, और उस पंक्ति में प्रत्येक तत्व वर्ग की एक विशेषता से मेल खाती है – इस स्थिति में, एक निश्चित बिंदु पर पिक्सेल का रंग। चूंकि आपकी छवियां 2 डी हैं, इसलिए आपको उन्हें 1 डी मैट्रिक्स में कनवर्ट करना होगा। प्रत्येक पंक्ति की लंबाई छवियों का क्षेत्र होगा (नोट करें कि चित्र एक समान आकार होने चाहिए)।

मान लें कि आप 5 अलग-अलग छवियों पर एसवीएम को प्रशिक्षित करना चाहते थे, और प्रत्येक छवि 4×3 पिक्सल थी। पहले आपको प्रशिक्षण मैट्रिक्स को प्रारंभ करना होगा मैट्रिक्स में पंक्तियों की संख्या 5 होगी, और कॉलम की संख्या छवि का क्षेत्रफल होगी, 4 * 3 = 12

int num_files = 5; int img_area = 4*3; Mat training_mat(num_files,img_area,CV_32FC1); 

आदर्श रूप से, num_files और img_area हार्डकोड नहीं किया जाएगा, लेकिन एक निर्देशिका के माध्यम से पाशन और छवियों की संख्या की गिनती और एक छवि के वास्तविक क्षेत्र लेने से प्राप्त किया।

अगला कदम है training_mat की पंक्तियों को प्रत्येक छवि से डेटा के साथ भरें। नीचे यह एक उदाहरण है कि यह मानचित्रण एक पंक्ति के लिए कैसे काम करेगी।

2 डी छवि मैट्रिक्स को 1 डी मैट्रिक्स में कनवर्ट करें

मैंने छवि मैट्रिक्स के प्रत्येक तत्व को गिना है, जहां प्रशिक्षण मैट्रिक्स में इसी पंक्ति में जाना चाहिए। उदाहरण के लिए, यदि वह तीसरी छवि थी, तो यह प्रशिक्षण मैट्रिक्स की तीसरी पंक्ति होगी।

आपको प्रत्येक छवि के माध्यम से पाश करना होगा और उसके अनुसार उत्पादन मैट्रिक्स में मूल्य निर्धारित करना होगा। यहां एकाधिक चित्रों के लिए एक उदाहरण है:

एकाधिक छवियों के साथ मैट्रिक्स प्रशिक्षण

आप इसे कोड में कैसे करेंगे, इसके लिए आप फिर से reshape() उपयोग कर सकते हैं, लेकिन मेरे पास मैट्रिक्स के कारण होने वाली समस्याएं लगातार नहीं हैं I मेरे अनुभव में मैंने ऐसा कुछ किया है:

 Mat img_mat = imread(imgname,0); // I used 0 for greyscale int ii = 0; // Current column in training_mat for (int i = 0; i<img_mat.rows; i++) { for (int j = 0; j < img_mat.cols; j++) { training_mat.at<float>(file_num,ii++) = img_mat.at<uchar>(i,j); } } 

यह प्रत्येक प्रशिक्षण छवि के लिए करें ( file_num को बढ़ाना याद रखना) इसके बाद, आपको अपने प्रशिक्षण मैट्रिक्स को एसवीएम फ़ंक्शन में जाने के लिए ठीक से स्थापित करना चाहिए। बाकी चरणों में ऑनलाइन उदाहरणों के समान होना चाहिए

ध्यान दें कि ऐसा करते समय, आपको प्रत्येक प्रशिक्षण छवि के लिए लेबल सेट करना होगा उदाहरण के लिए यदि आप चित्रों के आधार पर आंखों और गैर-आँखों को वर्गीकृत कर रहे थे तो आपको निर्दिष्ट करना होगा कि प्रशिक्षण मैट्रिक्स में कौन सी पंक्ति एक आंख और एक गैर-आंख से मेल खाती है। इसे 1 डी मैट्रिक्स के रूप में निर्दिष्ट किया गया है, जहां 1 डी मैट्रिक्स में प्रत्येक तत्व 2 डी मैट्रिक्स में प्रत्येक पंक्ति से मेल खाती है। प्रत्येक कक्षा के लिए मूल्य चुनें (जैसे, 1-आँख के लिए -1 और आंखों के लिए 1) और उन्हें लेबल मैट्रिक्स में सेट करें

 Mat labels(num_files,1,CV_32FC1); 

इसलिए यदि इस labels मैट्रिक्स में तीसरा तत्व -1 था, तो इसका मतलब है कि प्रशिक्षण मैट्रिक्स की तीसरी पंक्ति "गैर-आभा" कक्षा में है। आप इन मानों को लूप में सेट कर सकते हैं जहां आप प्रत्येक छवि का मूल्यांकन करते हैं। एक बात आप कर सकते हैं कि प्रत्येक डेटा के लिए अलग-अलग निर्देशिकाओं में प्रशिक्षण डेटा को सॉर्ट करना, और प्रत्येक डायरेक्टरी में छवियों के माध्यम से लूप करना और डायरेक्टरी पर आधारित लेबल सेट करना है।

अगली बात करना आपके एसवीएम मापदंडों को स्थापित किया गया है। ये मूल्य आपके प्रोजेक्ट के आधार पर भिन्न होंगे, लेकिन मूलतः आप एक CvSVMParams ऑब्जेक्ट घोषित करेंगे और मान सेट करेंगे:

 CvSVMParams params; params.svm_type = CvSVM::C_SVC; params.kernel_type = CvSVM::POLY; params.gamma = 3; // ...etc 

इन मापदंडों को सेट करने के तरीके के बारे में ऑनलाइन कई उदाहरण हैं, जैसे कि प्रश्न में आपके द्वारा पोस्ट की गई लिंक में।

इसके बाद, आप एक CvSVM ऑब्जेक्ट बनाते हैं और इसे अपने डेटा के आधार पर प्रशिक्षित करते हैं!

 CvSVM svm; svm.train(training_mat, labels, Mat(), Mat(), params); 

आपके पास कितना डेटा है इसके आधार पर, यह एक लंबा समय ले सकता है यह प्रशिक्षण पूरा करने के बाद, आप प्रशिक्षित एसएमएम को बचा सकते हैं ताकि आपको इसे हर बार फिर से प्रशिक्षित न करना पड़े।

 svm.save("svm_filename"); // saving svm.load("svm_filename"); // loading 

प्रशिक्षित एसवीएम का उपयोग करके अपनी छवियों का परीक्षण करने के लिए, बस एक छवि पढ़ें, इसे 1 डी मैट्रिक्स में बदल दें, और इसे svm.predict() :

 svm.predict(img_mat_1d); 

यह आपके लेबल के रूप में सेट किए जाने के आधार पर एक मूल्य वापस करेगा (उदाहरण के लिए, -1 या 1, मेरी आँख / गैर-आंखों के उदाहरण के आधार पर) वैकल्पिक रूप से, यदि आप एक समय में एक से अधिक छवियों का परीक्षण करना चाहते हैं, तो आप उस मैट्रिक्स को बना सकते हैं जिसकी पहले से परिभाषित प्रशिक्षण मैट्रिक्स के रूप में एक समान प्रारूप है और उस तर्क के रूप में पारित कर सकते हैं। वापसी मूल्य अलग होगा, हालांकि।

सौभाग्य!