249 lines
6.0 KiB
Mathematica
249 lines
6.0 KiB
Mathematica
close all;
|
|
dataDirBuahNaga = fullfile('D:\PROPOSAL\Data skripsi\Buah naga merah\');
|
|
|
|
filenamesBuahNaga = dir(fullfile(dataDirBuahNaga, '*.JPG'));
|
|
|
|
total_images = numel(filenamesBuahNaga);
|
|
% for n = 1:total_images
|
|
for n = 1:1000
|
|
full_nameBuahnaga = fullfile(dataDirBuahNaga, filenamesBuahNaga(n).name);
|
|
gambar1 = imread(full_nameBuahnaga);
|
|
%mengubah ukuran jadi 400x400
|
|
gambar = imresize(gambar1,[400,400]);
|
|
% figure, imshow(gambar);
|
|
|
|
|
|
gray_image = im2gray(gambar);
|
|
|
|
% %figure, imshow(gray_image);
|
|
file_ALL = strcat('D:\PROPOSAL\Data Preprocessing\Data Grayscale Kecil\', filenamesBuahNaga(n).name);
|
|
imwrite(gray_image,file_ALL);
|
|
|
|
I = gray_image;
|
|
[tinggi, lebar] = size (I);
|
|
% Bentuk GLCM
|
|
GLCM0 = zeros(256, 256);
|
|
total_piksel0 = 0;
|
|
|
|
GLCM45 = zeros(256, 256);
|
|
total_piksel45 = 0;
|
|
|
|
GLCM90 = zeros(256, 256);
|
|
total_piksel90 = 0;
|
|
|
|
GLCM135 = zeros(256, 256);
|
|
total_piksel135 = 0;
|
|
|
|
for y = 2: tinggi-1
|
|
for x = 2: lebar-1
|
|
% untuk sudut 0
|
|
a = I(y,x);
|
|
b = I(y,x+1);
|
|
GLCM0(a+1, b+1) = GLCM0(a+1, b+1) + 1;
|
|
total_piksel0 = total_piksel0 + 1;
|
|
|
|
% untuk sudut 45
|
|
a = I(y,x);
|
|
b = I(y-1,x+1);
|
|
GLCM45(a+1, b+1) = GLCM45(a+1, b+1) + 1;
|
|
total_piksel45 = total_piksel45 + 1;
|
|
|
|
% untuk sudut 90
|
|
a = I(y,x);
|
|
b = I(y-1,x);
|
|
GLCM90(a+1, b+1) = GLCM90(a+1, b+1) + 1;
|
|
total_piksel90 = total_piksel90 + 1;
|
|
|
|
% untuk sudut 135
|
|
a = I(y,x);
|
|
b = I(y-1,x-1);
|
|
GLCM135(a+1, b+1) = GLCM135(a+1, b+1) + 1;
|
|
total_piksel135 = total_piksel135 + 1;
|
|
end
|
|
end
|
|
|
|
GLCM0 = GLCM0 / total_piksel0;
|
|
GLCM45 = GLCM45 / total_piksel45;
|
|
GLCM90 = GLCM90 / total_piksel90;
|
|
GLCM135 = GLCM135 / total_piksel135;
|
|
|
|
|
|
%Hitung ASM
|
|
asm0 = 0.0;
|
|
asm45 = 0.0;
|
|
asm90 = 0.0;
|
|
asm135 = 0.0;
|
|
|
|
for a = 0 : 255
|
|
for b = 0 : 255
|
|
asm0 = asm0 + (GLCM0(a+1,b+1) * GLCM0(a+1,b+1));
|
|
asm45 = asm45 + (GLCM45(a+1,b+1) * GLCM45(a+1,b+1));
|
|
asm90 = asm90 + (GLCM90(a+1,b+1) * GLCM90(a+1,b+1));
|
|
asm135 = asm135 + (GLCM135(a+1,b+1) * GLCM135(a+1,b+1));
|
|
end
|
|
end
|
|
|
|
%Hitung IDM
|
|
idm0 = 0.0;
|
|
idm45 = 0.0;
|
|
idm90 = 0.0;
|
|
idm135 = 0.0;
|
|
|
|
for a = 0 : 255
|
|
for b = 0 : 255
|
|
idm0 = idm0 + (GLCM0(a+1,b+1) / (1+(a-b)*(a-b)));
|
|
idm45 = idm45 + (GLCM45(a+1,b+1) / (1+(a-b)*(a-b)));
|
|
idm90 = idm90 + (GLCM90(a+1,b+1) / (1+(a-b)*(a-b)));
|
|
idm135 = idm135 + (GLCM135(a+1,b+1) / (1+(a-b)*(a-b)));
|
|
end
|
|
end
|
|
|
|
%Hitung Kontras
|
|
kontras0 = 0.0;
|
|
kontras45 = 0.0;
|
|
kontras90 = 0.0;
|
|
kontras135 = 0.0;
|
|
|
|
for a = 0 : 255
|
|
for b = 0 : 255
|
|
kontras0 = kontras0 + (a-b)*(a-b)* GLCM0(a+1,b+1);
|
|
kontras45 = kontras45 + (a-b)*(a-b)* GLCM45(a+1,b+1);
|
|
kontras90 = kontras90 + (a-b)*(a-b)* GLCM90(a+1,b+1);
|
|
kontras135 = kontras135 + (a-b)*(a-b)* GLCM135(a+1,b+1);
|
|
end
|
|
end
|
|
|
|
%Hitung Kovarians
|
|
korelasi0 = 0.0;
|
|
px0 = 0;
|
|
py0 = 0;
|
|
reratax0 = 0.0;
|
|
reratay0 = 0.0;
|
|
stdevx0 = 0.0;
|
|
stdevy0 = 0.0;
|
|
|
|
korelasi45 = 0.0;
|
|
px45 = 0;
|
|
py45 = 0;
|
|
reratax45 = 0.0;
|
|
reratay45 = 0.0;
|
|
stdevx45 = 0.0;
|
|
stdevy45 = 0.0;
|
|
|
|
korelasi90 = 0.0;
|
|
px90 = 0;
|
|
py90 = 0;
|
|
reratax90 = 0.0;
|
|
reratay90 = 0.0;
|
|
stdevx90 = 0.0;
|
|
stdevy90 = 0.0;
|
|
|
|
korelasi135 = 0.0;
|
|
px135 = 0;
|
|
py135 = 0;
|
|
reratax135 = 0.0;
|
|
reratay135 = 0.0;
|
|
stdevx135 = 0.0;
|
|
stdevy135 = 0.0;
|
|
|
|
for a = 0 : 255
|
|
for b = 0 : 255
|
|
px0 = px0 + a * GLCM0 (a+1, b+1);
|
|
py0 = py0 + b * GLCM0 (a+1, b+1);
|
|
|
|
px45 = px45 + a * GLCM45 (a+1, b+1);
|
|
py45 = py45 + b* GLCM45 (a+1, b+1);
|
|
|
|
px90 = px90 + a * GLCM90 (a+1, b+1);
|
|
py90 = py90 + b * GLCM90 (a+1, b+1);
|
|
|
|
px135 = px135 + a * GLCM135 (a+1, b+1);
|
|
py135 = py135 + b * GLCM135 (a+1, b+1);
|
|
end
|
|
end
|
|
|
|
%Hitung deviasi standar
|
|
for a = 0 : 255
|
|
for b = 0 : 255
|
|
stdevx0 = stdevx0 + (a-px0) * (a-px0) * GLCM0(a+1, b+1);
|
|
stdevy0 = stdevy0 + (b-py0) * (b-py0) * GLCM0(a+1, b+1);
|
|
|
|
stdevx45 = stdevx45 + (a-px45) * (a-px45) * GLCM45(a+1, b+1);
|
|
stdevy45 = stdevy45 + (b-py45) * (b-py45) * GLCM45(a+1, b+1);
|
|
|
|
stdevx90 = stdevx90 + (a-px90) * (a-px90) * GLCM90(a+1, b+1);
|
|
stdevy90 = stdevy90 + (b-py90) * (b-py90) * GLCM90(a+1, b+1);
|
|
|
|
stdevx135 = stdevx135 + (a-px135) * (a-px135) * GLCM135(a+1, b+1);
|
|
stdevy135 = stdevy135 + (b-py135) * (b-py135) * GLCM135(a+1, b+1);
|
|
|
|
end
|
|
end
|
|
|
|
%Hitung Korelasi
|
|
for a = 0 : 255
|
|
for b = 0 : 255
|
|
korelasi0 = korelasi0 + ((a-px0)*(b-py0) * GLCM0(a+1, b+1)/(stdevx0*stdevy0));
|
|
korelasi45 = korelasi45 + ((a-px45)*(b-py45) * GLCM45(a+1, b+1)/(stdevx45*stdevy45));
|
|
korelasi90 = korelasi90 + ((a-px90)*(b-py90) * GLCM90(a+1, b+1)/(stdevx90*stdevy90));
|
|
korelasi135 = korelasi135 + ((a-px135)*(b-py135) * GLCM135(a+1, b+1)/(stdevx135*stdevy135));
|
|
|
|
end
|
|
end
|
|
|
|
%Hitung Fitur
|
|
G0asm = asm0;
|
|
G0idm = idm0;
|
|
G0kontras = kontras0;
|
|
G0korelasi = korelasi0;
|
|
|
|
G45asm = asm45;
|
|
G45idm = idm45;
|
|
G45kontras = kontras45;
|
|
G45korelasi = korelasi45;
|
|
|
|
G90asm = asm90;
|
|
G90idm = idm90;
|
|
G90kontras = kontras90;
|
|
G90korelasi = korelasi90;
|
|
|
|
G135asm = asm135;
|
|
G135idm = idm135;
|
|
G135kontras = kontras135;
|
|
G135korelasi = korelasi135;
|
|
|
|
fitur = [G0asm ;G0idm ;G0kontras ;G0korelasi
|
|
;G45asm ;G45idm ;G45kontras ;G45korelasi
|
|
;G90asm ;G90idm ;G90kontras ;G90korelasi
|
|
;G135asm ;G135idm ;G135kontras ;G135korelasi];
|
|
fitur_post(n,:)=fitur(1:16,:);
|
|
|
|
|
|
xlswrite('data_latih.xlsx',fitur_post);
|
|
|
|
% klasifikasi naive bayes
|
|
load 'D:\PROPOSAL\Data skripsi\Buah naga merah\class.mat'
|
|
X = fitur_post;
|
|
Y = class;
|
|
rng('default')
|
|
cv = cvpartition(Y,'HoldOut',0.20);
|
|
trainInds = training(cv);
|
|
testInds = test(cv);
|
|
XTrain = X(trainInds,:);
|
|
YTrain = Y(trainInds);
|
|
XTest = X(testInds,:);
|
|
YTest = Y(testInds);
|
|
Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'buah naga bagus','buah naga jelek','buah naga cacar'})
|
|
idx = randsample(sum(testInds),30);
|
|
label = predict(Mdl,XTest);
|
|
table(YTest(idx),label(idx),'VariableNames',...
|
|
{'TrueLabel','PredictedLabel'})
|
|
cm = confusionchart(YTest,label);
|
|
cm.ColumnSummary = 'column-normalized';
|
|
cm.RowSummary = 'row-normalized';
|
|
cm.Title = 'Buah Naga Confusion Matrix';
|
|
end
|
|
|
|
|
|
|