2013-05-24 9 views
5

मैं किसी फ़ोल्डर से पढ़ने वाली छवियों को वर्गीकृत करने के लिए मैटलैब के 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 के परिणाम देता है। ऐसा लगता है कि यह सही ढंग से काम नहीं कर रहा है। क्या कोई मेरी मदद कर सकता है कि यहां समस्या कहां होनी चाहिए? मुझे इंटरनेट पर मौजूदा स्रोतों से कोई स्पष्टीकरण नहीं मिला। अग्रिम में धन्यवाद।

+1

'छवियों {i} = im2double (छवियां {ii}); 'क्यों' ii'? – chenaren

+1

क्या यह प्रशिक्षण सेट से छवियों पर 1 लौटाता है जिसमें -1 का वर्ग है? – Photon

+0

क्षमा करें, {ii} के लिए, मैंने इसे यहां अपने प्रश्न में गलत तरीके से लिखा है। मैंने इसे संपादित किया। –

उत्तर

3

यहाँ सभी छवियों है कि आप

function X = ReadImgs(Folder,ImgType) 
Imgs = dir(fullfile(Folder, ImgType)); 
NumImgs = size(Imgs,1); 
image = double(imread(fullfile(Folder, Imgs(1).name))); 
X = zeros([NumImgs size(image)]); 
for i=1:NumImgs, 
    img = double(imread(fullfile(Folder, Imgs(i).name))); 
    if (size(image,3) == 1) 
    X(i,:,:) = img; 
    else 
    X(i,:,:,:) = img; 
end 
end 

स्रोत मदद मिल सकती है पढ़ने के लिए एक समारोह है: http://computervisionblog.wordpress.com/2011/04/13/matlab-read-all-images-from-a-folder-everything-starts-here/

0

यह है MATLAB में काम करता है होना चाहिए

clear all; 
clc; 

folder = 'gambar 1'; 
dirImage = dir(folder); 

numData = size(dirImage,1); 

M ={} ; 

% read image 
for i=1:numData 
    nama = dirImage(i).name; 
    if regexp(nama, '(lion|tiger)-[0-9]{1,2}.jpg') 
     B = cell(1,2); 
     if regexp(nama, 'lion-[0-9]{1,2}.jpg') 
      B{1,1} = double(imread([folder, '/', nama])); 
      B{1,2} = 1; 
     elseif regexp(nama, 'tiger-[0-9]{1,2}.jpg') 
      B{1,1} = double(imread([folder, '/', nama])); 
      B{1,2} = -1; 
     end 
     M = cat(1,M,B); 
    end 
end 

% convert image holder from cell to array 
numDataTrain = size(M,1); 
class = zeros(numDataTrain,1); 
arrayImage = zeros(numDataTrain, 300 * 300); 

for i=1:numDataTrain 
    im = M{i,1} ; 
    im = rgb2gray(im); 
    im = imresize(im, [300 300]); 
    im = reshape(im', 1, 300*300); 
    arrayImage(i,:) = im; 
    class(i) = M{i,2}; 
end 

SVMStruct = svmtrain(arrayImage, class); 

% test for lion 
lionTest = double(imread('gambar 1/lion-test.jpg')); 
lionTest = rgb2gray(lionTest); 
lionTest = imresize(lionTest, [300 300]); 
lionTest = reshape(lionTest',1, 300*300); 
result = svmclassify(SVMStruct, lionTest); 

result 

https://github.com/gunungloli666/svm-test

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