TIF_E41201115/Preprocessing.m

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