필터 지우기
필터 지우기

i want to classify color feature of dataset with SVM, it can or not?

조회 수: 4 (최근 30일)
Anggita Puspawardani
Anggita Puspawardani 2019년 5월 19일
댓글: Anggita Puspawardani 2020년 10월 12일
Hi, I'm a newbee of Matlab. I have a problem that i want to classify with SVM, but i cannot. For segmentation, I'm using K-Means. And for feature extraction, I'm using Histogram.
I just want to classify of dataset based on color feature. So, what should i do?
here's my code:
clc;clear;close all;
[filename,pathname] = uigetfile({'*.*';'*.bmp';'*.tif';'*.gif';'*.png'},'Pick a Disease Affected Leaf');
I = imread([pathname,filename]);
figure, imshow(I);title('Disease Affected Leaf');
% Color Image Segmentation Using K-Means Clustering
cform = makecform('srgb2lab');
lab_he = applycform(I,cform);
figure, imshow(lab_he), title('L*a*b color space');
ab = double(lab_he(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 3;
[cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
'Replicates',3);
pixel_labels = reshape(cluster_idx,nrows,ncols);
RGB = label2rgb(pixel_labels);
figure, imshow(RGB,[]), title('image labeled by cluster index');
segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1,1,3]);
for k = 1:nColors
colors = I;
colors(rgb_label ~= k) = 0;
segmented_images{k} = colors;
end
figure, subplot(3,1,1);imshow(segmented_images{1});title('Cluster 1'); subplot(3,1,2);imshow(segmented_images{2});title('Cluster 2');
subplot(3,1,3);imshow(segmented_images{3});title('Cluster 3');
% Leaf segmentation
area_cluster1 = sum(sum(pixel_labels==1));
area_cluster2 = sum(sum(pixel_labels==2));
area_cluster3 = sum(sum(pixel_labels==3));
[~,cluster_leaf] = min([area_cluster1,area_cluster2,area_cluster3]);
leaf_bw = (pixel_labels==cluster_leaf);
leaf_bw = imfill(leaf_bw,'holes');
leaf_bw = bwareaopen(leaf_bw,1000);
leaf = I;
R = leaf(:,:,1);
G = leaf(:,:,2);
B = leaf(:,:,3);
R(~leaf_bw) = 0;
G(~leaf_bw) = 0;
B(~leaf_bw) = 0;
leaf_rgb = cat(3,R,G,B);
figure, imshow(leaf_rgb), title('the leaf only (RGB Color Space)');
% RGB Features Extraction
R_stats = regionprops(leaf_bw,R,'PixelValues','MeanIntensity',...
'MaxIntensity','MinIntensity');
G_stats = regionprops(leaf_bw,G,'PixelValues','MeanIntensity',...
'MaxIntensity','MinIntensity');
B_stats = regionprops(leaf_bw,B,'PixelValues','MeanIntensity',...
'MaxIntensity','MinIntensity');
R_pix_val = R_stats.PixelValues;
G_pix_val = G_stats.PixelValues;
B_pix_val = B_stats.PixelValues;
figure,
histogram(R_pix_val,256,'FaceColor','r','EdgeColor','r')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 15000])
grid on
title('Histogram of Red Channel')
figure,
histogram(G_pix_val,256,'FaceColor','g','EdgeColor','g')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 15000])
grid on
title('Histogram of Green Channel')
figure,
histogram(B_pix_val,256,'FaceColor','b','EdgeColor','b')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 15000])
grid on
title('Histogram of Blue Channel')
R_mean = R_stats.MeanIntensity;
G_mean = G_stats.MeanIntensity;
B_mean = B_stats.MeanIntensity;
R_max = R_stats.MaxIntensity;
G_max = G_stats.MaxIntensity;
B_max = B_stats.MaxIntensity;
R_min = R_stats.MinIntensity;
G_min = G_stats.MinIntensity;
B_min = B_stats.MinIntensity;
% HSV features extraction
leaf = rgb2hsv(I);
H = leaf(:,:,1);
S = leaf(:,:,2);
V = leaf(:,:,3);
H(~leaf_bw) = 0;
S(~leaf_bw) = 0;
V(~leaf_bw) = 0;
leaf_hsv = cat(3,H,S,V);
figure, imshow(leaf_hsv), title('the leaf only (HSV Color Space)');
H_stats = regionprops(leaf_bw,H,'PixelValues','MeanIntensity',...
'MaxIntensity','MinIntensity');
S_stats = regionprops(leaf_bw,S,'PixelValues','MeanIntensity',...
'MaxIntensity','MinIntensity');
V_stats = regionprops(leaf_bw,V,'PixelValues','MeanIntensity',...
'MaxIntensity','MinIntensity');
H_mean = H_stats.MeanIntensity;
S_mean = S_stats.MeanIntensity;
V_mean = V_stats.MeanIntensity;
H_max = H_stats.MaxIntensity;
S_max = S_stats.MaxIntensity;
V_max = V_stats.MaxIntensity;
H_min = H_stats.MinIntensity;
S_min = S_stats.MinIntensity;
V_min = V_stats.MinIntensity;
% Print the features in the command window.
disp('>>> Features Extracted <<<')
disp('<1> Red Channel')
fprintf('Mean = %6.2f \n',R_mean);
fprintf('Max = %6.0f \n',R_max);
fprintf('Min = %6.0f \n',R_min);
disp('<2> Green Channel')
fprintf('Mean = %6.2f \n',G_mean);
fprintf('Max = %6.0f \n',G_max);
fprintf('Min = %6.0f \n',G_min);
disp('<3> Blue Channel')
fprintf('Mean = %6.2f \n',B_mean);
fprintf('Max = %6.0f \n',B_max);
fprintf('Min = %6.0f \n',B_min);
disp('<4> Hue Channel')
fprintf('Mean = %6.4f \n',H_mean);
fprintf('Max = %6.4f \n',H_max);
fprintf('Min = %6.4f \n',H_min);
disp('<5> Saturation Channel')
fprintf('Mean = %6.4f \n',S_mean);
fprintf('Max = %6.4f \n',S_max);
fprintf('Min = %6.4f \n',S_min);
disp('<6> Value Channel')
fprintf('Mean = %6.4f \n',V_mean);
fprintf('Max = %6.4f \n',V_max);
fprintf('Min = %6.4f \n',V_min);
%% Classification Using SVM
% Load the training set
load Diseaseset.mat
% 'diasesefeat' contains the features of the disease affected leaves of both
% the types
% 'diseasetype' contains the corresponding label
% Train the classifier
svmStructDisease = fitcsvm(diseasefeat,diseasetype);
% Classify the test leaf
species_disease = predict(svmStructDisease,feat_disease)
% Observe the results on the command window
  댓글 수: 2
B Kiran Kumar
B Kiran Kumar 2020년 9월 26일
i have an errror in svm classification bro
it shows an error like "Unrecognized function or variable 'diseasefeat'"
how can i fix this ?.
Anggita Puspawardani
Anggita Puspawardani 2020년 10월 12일
What is your MATLAB version? You should change the function based on your MATLAB version.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Descriptive Statistics and Visualization에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by