commit 172692df26b5ad8e01cec0850c7644e3c9b550da Author: selviatunhasanah Date: Fri May 31 13:35:32 2024 +0700 first commit diff --git a/Preprocessing.m b/Preprocessing.m new file mode 100644 index 0000000..4eea46f --- /dev/null +++ b/Preprocessing.m @@ -0,0 +1,248 @@ +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 + + +