Tôi đang sử dụng chức năng SVM của Matlab để phân loại hình ảnh được đọc từ một thư mục. Những gì tôi muốn làm là lần đầu tiên đọc 20 hình ảnh từ thư mục, sau đó sử dụng chúng để đào tạo SVM, và sau đó cung cấp một hình ảnh mới làm đầu vào để quyết định xem hình ảnh đầu vào này có nằm trong cùng một danh mục của 20 hình ảnh đào tạo này hay không. Nếu có, kết quả phân loại sẽ cho tôi 1
, nếu không, thì tôi mong nhận được -1
.Matlab SVM để phân loại hình ảnh
Đến nay, mã bằng văn bản của tôi là như sau:
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);
Kể từ khi hình ảnh được đọc bởi hàng loạt từ thư mục, vì vậy camethe tế bào images
. Sau đó, tôi chuyển đổi chúng thành màu xám như được hiển thị trong mã, và thay đổi kích thước chúng, vì những hình ảnh đó KHÔNG có cùng kích thước. Vì vậy, sau bước này, tôi có 20 hình ảnh, tất cả đều có kích thước 200x200
. Và cuối cùng, tôi đã cung cấp các dữ liệu này để làm bộ dữ liệu đào tạo của mình, với các cột 20
và 200x200
. Tôi đã kiểm tra tất cả các kết quả kích thước này, và chúng dường như hoạt động tốt. Nhưng ngay bây giờ vấn đề duy nhất là, không có vấn đề gì loại hình ảnh đầu vào tôi cung cấp cho nó để dự đoán, nó luôn mang lại cho tôi một kết quả như 1
, ngay cả đối với những hình ảnh rất khác nhau. Có vẻ như nó không hoạt động chính xác. Ai đó có thể giúp tôi kiểm tra nơi có vấn đề ở đây? Tôi không thể tìm thấy bất kỳ lời giải thích nào từ các nguồn hiện có trên internet. Cảm ơn trước.
'hình ảnh {i} = im2double (hình ảnh {ii}); 'Tại sao' ii'? – chenaren
Liệu nó có trả về 1 trên hình ảnh từ tập huấn luyện có lớp -1 không? – Photon
xin lỗi, vì {ii}, tôi đã nhập sai câu hỏi của tôi ở đây. Tôi đã chỉnh sửa nó. –