मैं किसी फ़ोल्डर से पढ़ने वाली छवियों को वर्गीकृत करने के लिए मैटलैब के SVM फ़ंक्शन का उपयोग कर रहा हूं। मैं जो करना चाहता हूं वह पहले फ़ोल्डर से 20 छवियों को पढ़ता है, फिर एसवीएम को प्रशिक्षित करने के लिए इनका उपयोग करें, और फिर यह तय करने के लिए इनपुट के रूप में एक नई छवि दें कि यह इनपुट छवि इन 20 प्रशिक्षण छवियों की एक ही श्रेणी में आती है या नहीं। यदि ऐसा है, तो वर्गीकरण परिणाम मुझे 1
देना चाहिए, यदि नहीं, तो मुझे -1
प्राप्त होने की उम्मीद है।छवि वर्गीकरण के लिए Matlab SVM
अब तक, मेरे लिखे कोड इस प्रकार है:
imagefiles = dir('*.jpg');
nfiles = 20;
for i = 1:nfiles
currentfilename = imagefiles(i).name;
currentimage = imread(currentfilename);
images{i} = currentimage;
images{i} = im2double(images{i});
images{i} = rgb2gray(images{i});
images{i} = imresize(images{i},[200 200]);
images{i} = reshape(images{i}', 1, size(images{i},1)*size(images{i},2));
end
trainData = zeros(nfiles, 40000);
for ii=1:nfiles
trainData(ii,:) = images{ii};
end
class = [1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1];
SVMStruct = svmtrain (trainData, class);
inputImg = imread('testImg.jpg');
inputImg = im2double(inputImg);
inputImg = rgb2gray(inputImg);
inputImg = imresize(inputImg, [200 200]);
inputImg = reshape (inputImg', 1, size(inputImg,1)*size(inputImg,2));
result = svmclassify(SVMStruct, inputImg);
के बाद से छवियों, फ़ोल्डर से श्रृंखला द्वारा पढ़ा जाता है तो camethe सेल images
। फिर मैंने उन्हें कोड में दिखाए गए ग्रेस्केल में परिवर्तित कर दिया, और उनका आकार बदल दिया, क्योंकि उन छवियों का आकार समान नहीं था। इस प्रकार इस चरण के बाद, मेरे पास 20 छवियां थीं, प्रत्येक आकार 200x200
के साथ। और आखिर में, मैंने 20
पंक्तियों, और 200x200
कॉलम के साथ, मेरे प्रशिक्षण डेटासेट के रूप में सेवा करने के लिए दिया। मैंने इन सभी आकार के परिणामों की जांच की, और वे ठीक काम करने लगे। लेकिन अभी एकमात्र समस्या यह है कि इससे कोई फर्क नहीं पड़ता कि मैं किस प्रकार की इनपुट छवि को भविष्यवाणी करने के लिए देता हूं, यह हमेशा मुझे बहुत ही अलग छवियों के लिए 1
के परिणाम देता है। ऐसा लगता है कि यह सही ढंग से काम नहीं कर रहा है। क्या कोई मेरी मदद कर सकता है कि यहां समस्या कहां होनी चाहिए? मुझे इंटरनेट पर मौजूदा स्रोतों से कोई स्पष्टीकरण नहीं मिला। अग्रिम में धन्यवाद।
'छवियों {i} = im2double (छवियां {ii}); 'क्यों' ii'? – chenaren
क्या यह प्रशिक्षण सेट से छवियों पर 1 लौटाता है जिसमें -1 का वर्ग है? – Photon
क्षमा करें, {ii} के लिए, मैंने इसे यहां अपने प्रश्न में गलत तरीके से लिखा है। मैंने इसे संपादित किया। –