Anda di halaman 1dari 18

TUGAS SISTEM FOTONIK

SOFTWARE IMAGE PROCESSING

DISUSUN OLEH :
FADIL ANANTA 02311940000030
HUDZAIFA DHIAUL AHNAF 02311940000102
ARRIFQI AGUNG PERMANA 02311940000166

DOSEN PENGAMPU :
DETAK YAN PRATAMA S.T., M.Sc.

DEPARTEMEN TEKNIK FISIKA


FAKULTAS TEKONOLOGI INDUSTRI DAN REKAYASA SISTEM
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
SURABAYA
2022
CODE SOFTWARE IMAGE PROCESSING
Di dalam software image processing yang kelompok kami gunakan terdapat tiga bagian
penting yaitu dimulai dari pelatihan, kemudian pengujian dan program GUI. Kodingan dari
ketiga bagian tersebut dapat dilihat seperti di bawah ini :

• Pelatihan
clc; %perintah untuk
membersihkan komen window
clear; %perintah
untuk membersihkan workspace window
close all; %perintah
untuk menutup semua figure yang telah dibuka
warning off all; %perintah
untuk menonaktifkan warning yang muncul

%%membaca data latih matang


nama_folder = 'Pelatihan/Matang'; %menetapkan
nama folder
nama_file = dir(fullfile(nama_folder,'*.jpg')); %membaca file
yang berekstensi .jpg
jumlah_file = numel(nama_file); %membaca
jumlah file yang berekstensi .jpg

%menginisialisasi variabel ciri matang dan target matang


ciri_matang = zeros(jumlah_file,10);
target_matang = zeros(jumlah_file,1);

%melakukan pengolahan citra terhadap seluruh file


for n = 1:jumlah_file
%membaca file citra rgb
Img =
im2double(imread(fullfile(nama_folder,nama_file(n).name)));
%%%figure,imshow(Img)

%im2double mengubah kelas data citra dari 8 bit ke kelas double


range 0 sampe 1
%fullfile menggabungkan antara nama folder dengan nama file pada
urutan ke n

%mengkonversi citra rgb


Img_gray = rgb2gray(Img);
%%%figure,imshow(Img_gray)

%mengkonversi citra grayscale menjadi citra biner


bw = imbinarize(Img_gray);
%%%figure, imshow(bw)

%melakukan operasi komplemen


bw = imcomplement(bw);
%%%figure, imshow(bw)

%melakukan operasi morfologi untuk menyempurnakan hasil


segmentasi

ii
%1. filling holes
bw = imfill(bw, 'holes');
%%%figure, imshow(bw)

%2. area opening = menghilangkan noise 1000 adalah nilai luas yang
akan dihilangkan
bw = bwareaopen(bw,1000);
%%%figure, imshow(bw)

%melakukan ekstraksi ciri warna RGB


R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);

R(~bw) = 0;
G(~bw) = 0;
B(~bw) = 0;

RGB = cat(3,R,G,B);
%%%figure, imshow(RGB)

Red = sum(sum(R))/sum(sum(bw));
Green = sum(sum(G))/sum(sum(bw));
Blue = sum(sum(B))/sum(sum(bw));

%melakukan ekstraksi ciri warna HSV


HSV = rgb2hsv(Img);
%%%figure, imshow(HSV)

%ekstrak masing2 komponen


H = HSV(:,:,1);
S = HSV(:,:,2);
V = HSV(:,:,3);

H(~bw) = 0;
S(~bw) = 0;
V(~bw) = 0;

Hue = sum(sum(H))/sum(sum(bw));
Saturation = sum(sum(S))/sum(sum(bw));
Value = sum(sum(V))/sum(sum(bw));

%ekstrak ciri tekstur dengan metode GLCM


Img_gray(~bw) = 0;

%membentuk matriks kookurensi


GLCM = graycomatrix(Img_gray,'Offset',[0 1; -1 1;-1 0;-1 -1]);
%0 1 adalah sudut 0 derajat
%-1 1 adalah 45 derajat
%-1 0 adalah 90 derajat
%-1 -1 adalah sudut 135 derajat

stats =
graycoprops(GLCM,{'Contrast','Correlation','Energy','Homogeneity'});
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
Homogeneity = mean(stats.Homogeneity);

%mengisi variabel ciri_matang dengan ciri hasil ekstraksi


ciri_matang(n,1) = Red;
ciri_matang(n,2) = Green;
ciri_matang(n,3) = Blue;
ciri_matang(n,4) = Hue;
ciri_matang(n,5) = Saturation;
ciri_matang(n,6) = Value;
ciri_matang(n,7) = Contrast;
ciri_matang(n,8) = Correlation;
ciri_matang(n,9) = Energy;
ciri_matang(n,10) = Homogeneity;

%mengisi variabel target_matang


target_matang(n,1) = 1;
end

%%membaca data latih mentah


nama_folder = 'Pelatihan/Mentah'; %menetapkan
nama folder
nama_file = dir(fullfile(nama_folder,'*.jpg')); %membaca file
yang berekstensi .jpg
jumlah_file = numel(nama_file); %membaca
jumlah file yang berekstensi .jpg

%menginisialisasi variabel ciri mentah dan target mentah


ciri_mentah = zeros(jumlah_file,10);
target_mentah = zeros(jumlah_file,1);

%melakukan pengolahan citra terhadap seluruh file


for n = 1:jumlah_file
%membaca file citra rgb
Img =
im2double(imread(fullfile(nama_folder,nama_file(n).name)));
%%%figure,imshow(Img)

%im2double mengubah kelas data citra dari 8 bit ke kelas double


range 0 sampe 1
%fullfile menggabungkan antara nama folder dengan nama file pada
urutan ke n

%mengkonversi citra rgb


Img_gray = rgb2gray(Img);
%%%figure,imshow(Img_gray)

%mengkonversi citra grayscale menjadi citra biner


bw = imbinarize(Img_gray);
%%%figure, imshow(bw)

%melakukan operasi komplemen


bw = imcomplement(bw);
%%%figure, imshow(bw)
%melakukan operasi morfologi untuk menyempurnakan hasil
segmentasi
%1. filling holes
bw = imfill(bw, 'holes');
%%%figure, imshow(bw)

%2. area opening = menghilangkan noise 1000 adalah nilai luas yang
akan dihilangkan
bw = bwareaopen(bw,1000);
%%%figure, imshow(bw)

%melakukan ekstraksi ciri warna RGB


R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);

R(~bw) = 0;
G(~bw) = 0;
B(~bw) = 0;

RGB = cat(3,R,G,B);
%%%figure, imshow(RGB)

Red = sum(sum(R))/sum(sum(bw));
Green = sum(sum(G))/sum(sum(bw));
Blue = sum(sum(B))/sum(sum(bw));

%melakukan ekstraksi ciri warna HSV


HSV = rgb2hsv(Img);
%%%figure, imshow(HSV)

%ekstrak masing2 komponen


H = HSV(:,:,1);
S = HSV(:,:,2);
V = HSV(:,:,3);

H(~bw) = 0;
S(~bw) = 0;
V(~bw) = 0;

Hue = sum(sum(H))/sum(sum(bw));
Saturation = sum(sum(S))/sum(sum(bw));
Value = sum(sum(V))/sum(sum(bw));

%ekstrak ciri tekstur dengan metode GLCM


Img_gray(~bw) = 0;

%membentuk matriks kookurensi


GLCM = graycomatrix(Img_gray,'Offset',[0 1; -1 1; -1 0; -1 -1]);
%0 1 adalah sudut 0 derajat
%-1 1 adalah 45 derajat
%-1 0 adalah 90 derajat
%-1 -1 adalah sudut 135 derajat
stats =
graycoprops(GLCM,{'Contrast','Correlation','Energy','Homogeneity'});
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
Homogeneity = mean(stats.Homogeneity);

%mengisi variabel ciri_mentah dengan ciri hasil ekstraksi


ciri_mentah(n,1) = Red;
ciri_mentah(n,2) = Green;
ciri_mentah(n,3) = Blue;
ciri_mentah(n,4) = Hue;
ciri_mentah(n,5) = Saturation;
ciri_mentah(n,6) = Value;
ciri_mentah(n,7) = Contrast;
ciri_mentah(n,8) = Correlation;
ciri_mentah(n,9) = Energy;
ciri_mentah(n,10) = Homogeneity;

%mengisi variabel target_mentah


target_mentah(n,1) = 2;
end

%menyusun variabel target_latih


target_latih = [target_matang;target_mentah];

%membuat model SOM pada masing2 kelas (matang & mentah)


net1 = selforgmap([2 2],'topologyFcn','gridtop'); %selain
gridtop ada hextop,randtop
net2 = selforgmap([2 2],'topologyFcn','gridtop');

%pelatihan jaringan
net1 = train(net1,ciri_matang'); %' transpose dilakukan untuk
membalikan dari data kolom menjadi data baris
net2 = train(net2,ciri_mentah');

%membaca nilai bobot jaringan


wnet1 = net1.IW{1,1};
wnet2 = net2.IW{1,1};

%menyimpai nilai bobot jaringan


save('wnet1.mat','wnet1')
save('wnet2.mat','wnet2')

%menghitung jarak masing2 kelas dengan titik pusat masing2 model SOM
pfn1 = dist(wnet1,[ciri_matang;ciri_mentah]');
pfn2 = dist(wnet2,[ciri_matang;ciri_mentah]');

%menghitung jarak terpendek


Group = zeros(numel(target_latih),2);
for i = 1:numel(target_latih)
Group(i,:) = [min(pfn1(:,i)),min(pfn2(:,i))];
end

%membaca nilai keluaran hasil pelatihan


[~,Groupmin] = min(Group,[],2);

%menghitung nilai akurasi pelatihan


akurasi = (sum(target_latih==Groupmin)/numel(target_latih))*100;
disp(['Akurasi Pelatihan =',num2str(akurasi),'%'])

• Pengujian
clc; %perintah
untuk membersihkan komen window
clear; %perintah
untuk membersihkan workspace window
close all; %perintah
untuk menutup semua figure yang telah dibuka
warning off all; %perintah
untuk menonaktifkan warning yang muncul

%%membaca data uji matang


nama_folder = 'Pengujian/Matang'; %menetapkan
nama folder
nama_file = dir(fullfile(nama_folder,'*.jpg')); %membaca
file yang berekstensi .jpg
jumlah_file = numel(nama_file); %membaca
jumlah file yang berekstensi .jpg

%menginisialisasi variabel ciri matang dan target matang


ciri_matang = zeros(jumlah_file,10);
target_matang = zeros(jumlah_file,1);

%melakukan pengolahan citra terhadap seluruh file


for n = 1:jumlah_file
%membaca file citra rgb
Img =
im2double(imread(fullfile(nama_folder,nama_file(n).name)));
%%%figure,imshow(Img)

%im2double mengubah kelas data citra dari 8 bit ke kelas double


range 0 sampe 1
%fullfile menggabungkan antara nama folder dengan nama file pada
urutan ke n

%mengkonversi citra rgb


Img_gray = rgb2gray(Img);
%%%figure,imshow(Img_gray)

%mengkonversi citra grayscale menjadi citra biner


bw = imbinarize(Img_gray);
%%%figure, imshow(bw)

%melakukan operasi komplemen


bw = imcomplement(bw);
%%%figure, imshow(bw)

%melakukan operasi morfologi untuk menyempurnakan hasil


segmentasi
%1. filling holes
bw = imfill(bw, 'holes');
%%%figure, imshow(bw)

%2. area opening = menghilangkan noise 1000 adalah nilai luas


yang akan dihilangkan
bw = bwareaopen(bw,1000);
%%%figure, imshow(bw)

%melakukan ekstraksi ciri warna RGB


R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);

R(~bw) = 0;
G(~bw) = 0;
B(~bw) = 0;

RGB = cat(3,R,G,B);
%%%figure, imshow(RGB)

Red = sum(sum(R))/sum(sum(bw));
Green = sum(sum(G))/sum(sum(bw));
Blue = sum(sum(B))/sum(sum(bw));

%melakukan ekstraksi ciri warna HSV


HSV = rgb2hsv(Img);
%%%figure, imshow(HSV)

%ekstrak masing2 komponen


H = HSV(:,:,1);
S = HSV(:,:,2);
V = HSV(:,:,3);

H(~bw) = 0;
S(~bw) = 0;
V(~bw) = 0;

Hue = sum(sum(H))/sum(sum(bw));
Saturation = sum(sum(S))/sum(sum(bw));
Value = sum(sum(V))/sum(sum(bw));

%ekstrak ciri tekstur dengan metode GLCM


Img_gray(~bw) = 0;

%membentuk matriks kookurensi


GLCM = graycomatrix(Img_gray,'Offset',[0 1; -1 1;-1 0;-1 -1]);
%0 1 adalah sudut 0 derajat
%-1 1 adalah 45 derajat
%-1 0 adalah 90 derajat
%-1 -1 adalah sudut 135 derajat

stats =
graycoprops(GLCM,{'Contrast','Correlation','Energy','Homogeneity'});
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
Homogeneity = mean(stats.Homogeneity);

%mengisi variabel ciri_matang dengan ciri hasil ekstraksi


ciri_matang(n,1) = Red;
ciri_matang(n,2) = Green;
ciri_matang(n,3) = Blue;
ciri_matang(n,4) = Hue;
ciri_matang(n,5) = Saturation;
ciri_matang(n,6) = Value;
ciri_matang(n,7) = Contrast;
ciri_matang(n,8) = Correlation;
ciri_matang(n,9) = Energy;
ciri_matang(n,10) = Homogeneity;

%mengisi variabel target_matang


target_matang(n,1) = 1;
end

%%membaca data uji mentah


nama_folder = 'Pengujian/Mentah'; %menetapkan
nama folder
nama_file = dir(fullfile(nama_folder,'*.jpg')); %membaca
file yang berekstensi .jpg
jumlah_file = numel(nama_file); %membaca
jumlah file yang berekstensi .jpg

%menginisialisasi variabel ciri mentah dan target mentah


ciri_mentah = zeros(jumlah_file,10);
target_mentah = zeros(jumlah_file,1);

%melakukan pengolahan citra terhadap seluruh file


for n = 1:jumlah_file
%membaca file citra rgb
Img =
im2double(imread(fullfile(nama_folder,nama_file(n).name)));
%%%figure,imshow(Img)

%im2double mengubah kelas data citra dari 8 bit ke kelas double


range 0 sampe 1
%fullfile menggabungkan antara nama folder dengan nama file pada
urutan ke n

%mengkonversi citra rgb


Img_gray = rgb2gray(Img);
%%%figure,imshow(Img_gray)

%mengkonversi citra grayscale menjadi citra biner


bw = imbinarize(Img_gray);
%%%figure, imshow(bw)

%melakukan operasi komplemen


bw = imcomplement(bw);
%%%figure, imshow(bw)
%melakukan operasi morfologi untuk menyempurnakan hasil
segmentasi
%1. filling holes
bw = imfill(bw, 'holes');
%%%figure, imshow(bw)

%2. area opening = menghilangkan noise 1000 adalah nilai luas


yang akan dihilangkan
bw = bwareaopen(bw,1000);
%%%figure, imshow(bw)

%melakukan ekstraksi ciri warna RGB


R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);

R(~bw) = 0;
G(~bw) = 0;
B(~bw) = 0;

RGB = cat(3,R,G,B);
%%%figure, imshow(RGB)

Red = sum(sum(R))/sum(sum(bw));
Green = sum(sum(G))/sum(sum(bw));
Blue = sum(sum(B))/sum(sum(bw));

%melakukan ekstraksi ciri warna HSV


HSV = rgb2hsv(Img);
%%%figure, imshow(HSV)

%ekstrak masing2 komponen


H = HSV(:,:,1);
S = HSV(:,:,2);
V = HSV(:,:,3);

H(~bw) = 0;
S(~bw) = 0;
V(~bw) = 0;

Hue = sum(sum(H))/sum(sum(bw));
Saturation = sum(sum(S))/sum(sum(bw));
Value = sum(sum(V))/sum(sum(bw));

%ekstrak ciri tekstur dengan metode GLCM


Img_gray(~bw) = 0;

%membentuk matriks kookurensi


GLCM = graycomatrix(Img_gray,'Offset',[0 1; -1 1; -1 0; -1 -1]);
%0 1 adalah sudut 0 derajat
%-1 1 adalah 45 derajat
%-1 0 adalah 90 derajat
%-1 -1 adalah sudut 135 derajat
stats =
graycoprops(GLCM,{'Contrast','Correlation','Energy','Homogeneity'});
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
Homogeneity = mean(stats.Homogeneity);

%mengisi variabel ciri_mentah dengan ciri hasil ekstraksi


ciri_mentah(n,1) = Red;
ciri_mentah(n,2) = Green;
ciri_mentah(n,3) = Blue;
ciri_mentah(n,4) = Hue;
ciri_mentah(n,5) = Saturation;
ciri_mentah(n,6) = Value;
ciri_mentah(n,7) = Contrast;
ciri_mentah(n,8) = Correlation;
ciri_mentah(n,9) = Energy;
ciri_mentah(n,10) = Homogeneity;

%mengisi variabel target_mentah


target_mentah(n,1) = 2;
end

%menyusun variabel target_uji


target_uji = [target_matang;target_mentah];

%memanggil nilai bobot jaringan


load('wnet1.mat')
load('wnet2.mat')

%menghitung jarak masing2 kelas dengan titik pusat masing2 model SOM
pfn1 = dist(wnet1,[ciri_matang;ciri_mentah]');
pfn2 = dist(wnet2,[ciri_matang;ciri_mentah]');

%menghitung jarak terpendek


Group = zeros(numel(target_uji),2);
for i = 1:numel(target_uji)
Group(i,:) = [min(pfn1(:,i)),min(pfn2(:,i))];
end

%membaca nilai keluaran hasil pengujian


[~,Groupmin] = min(Group,[],2);

%menghitung nilai akurasi pengujian


akurasi = (sum(target_uji==Groupmin)/numel(target_uji))*100;
disp(['Akurasi Pengujian =',num2str(akurasi),'%'])

• Program GUI
function varargout = program_gui(varargin)
% PROGRAM_GUI MATLAB code for program_gui.fig
% PROGRAM_GUI, by itself, creates a new PROGRAM_GUI or raises
the existing
% singleton*.
%
% H = PROGRAM_GUI returns the handle to a new PROGRAM_GUI or
the handle to
% the existing singleton*.
%
% PROGRAM_GUI('CALLBACK',hObject,eventData,handles,...) calls
the local
% function named CALLBACK in PROGRAM_GUI.M with the given input
arguments.
%
% PROGRAM_GUI('Property','Value',...) creates a new PROGRAM_GUI
or raises the
% existing singleton*. Starting from the left, property value
pairs are
% applied to the GUI before program_gui_OpeningFcn gets called.
An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to program_gui_OpeningFcn via
varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows
only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help program_gui

% Last Modified by GUIDE v2.5 01-Oct-2022 12:22:47

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @program_gui_OpeningFcn, ...
'gui_OutputFcn', @program_gui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before program_gui is made visible.


function program_gui_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to program_gui (see VARARGIN)

% Choose default command line output for program_gui


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);
movegui(hObject,'center');
% UIWAIT makes program_gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = program_gui_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%memanggil menu "browse file"


[nama_file, nama_folder] = uigetfile('*.jpg');

%jika ada nama file yang dipilih maka akan mengeksekusi perintah di
bawah
%ini
if ~isequal(nama_file,0)

%membaca file citra rgb


Img = im2double(imread(fullfile(nama_folder,nama_file)));

%menampilkan citra rgb pada axes


axes(handles.axes1)
imshow(Img)
title('Citra RGB')

%menampilkan nama file pada edit text


set(handles.edit1,'String',nama_file)

%menyimpan variabel Img pada lokasi handles agar dapat dipanggil


oleh
%pushbutton yang lain
handles.Img = Img;
guidata(hObject, handles)

else
%jika tidak ada nama file yang dipilih
return
end

% --- Executes on button press in pushbutton2.


function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%memanggil variabel Img yang ada di lokasi handless


Img = handles.Img;

%mengkonversi citra rgb


Img_gray = rgb2gray(Img);
%%%figure,imshow(Img_gray)

%mengkonversi citra grayscale menjadi citra biner


bw = imbinarize(Img_gray);
%%%figure, imshow(bw)

%melakukan operasi komplemen


bw = imcomplement(bw);
%%%figure, imshow(bw)

%melakukan operasi morfologi untuk menyempurnakan hasil


segmentasi
%1. filling holes
bw = imfill(bw, 'holes');
%%%figure, imshow(bw)

%2. area opening = menghilangkan noise 1000 adalah nilai luas


yang akan dihilangkan
bw = bwareaopen(bw,1000);
%%%figure, imshow(bw)

%menampilkan citra biner hasil segmentasi pada axes2


axes(handles.axes2)
imshow(bw)
title('Citra Biner')

%menyimpan variabel bw dan Img gray pada lokasi handles agar dapat
dipanggil oleh
%pushbutton yang lain
handles.bw = bw;
handles.Img_gray = Img_gray;
guidata(hObject, handles)

% --- Executes on button press in pushbutton3.


function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%memanggil variabel Img, bw, dan Img_gray yang ada di lokasi handles
Img = handles.Img;
bw = handles.bw;
Img_gray = handles.Img_gray;

%melakukan ekstraksi ciri warna RGB


R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);

R(~bw) = 0;
G(~bw) = 0;
B(~bw) = 0;

RGB = cat(3,R,G,B);
%%%figure, imshow(RGB)

Red = sum(sum(R))/sum(sum(bw));
Green = sum(sum(G))/sum(sum(bw));
Blue = sum(sum(B))/sum(sum(bw));

%melakukan ekstraksi ciri warna HSV


HSV = rgb2hsv(Img);
%%%figure, imshow(HSV)

%ekstrak masing2 komponen


H = HSV(:,:,1);
S = HSV(:,:,2);
V = HSV(:,:,3);

H(~bw) = 0;
S(~bw) = 0;
V(~bw) = 0;

Hue = sum(sum(H))/sum(sum(bw));
Saturation = sum(sum(S))/sum(sum(bw));
Value = sum(sum(V))/sum(sum(bw));

%ekstrak ciri tekstur dengan metode GLCM


Img_gray(~bw) = 0;

%membentuk matriks kookurensi


GLCM = graycomatrix(Img_gray,'Offset',[0 1; -1 1;-1 0;-1 -1]);
%0 1 adalah sudut 0 derajat
%-1 1 adalah 45 derajat
%-1 0 adalah 90 derajat
%-1 -1 adalah sudut 135 derajat

stats =
graycoprops(GLCM,{'Contrast','Correlation','Energy','Homogeneity'});
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
Homogeneity = mean(stats.Homogeneity);

%mengisi variabel ciri_uji dengan ciri hasil ekstraksi


ciri_uji(1,1) = Red;
ciri_uji(1,2) = Green;
ciri_uji(1,3) = Blue;
ciri_uji(1,4) = Hue;
ciri_uji(1,5) = Saturation;
ciri_uji(1,6) = Value;
ciri_uji(1,7) = Contrast;
ciri_uji(1,8) = Correlation;
ciri_uji(1,9) = Energy;
ciri_uji(1,10) = Homogeneity;

%menampilkan ciri hasil ekstraksi pada tabel


ciri_tabel = cell(10,2);
ciri_tabel{1,1} = 'Red';
ciri_tabel{2,1} = 'Green';
ciri_tabel{3,1} = 'Blue';
ciri_tabel{4,1} = 'Hue';
ciri_tabel{5,1} = 'Saturation';
ciri_tabel{6,1} = 'Value';
ciri_tabel{7,1} = 'Contrast';
ciri_tabel{8,1} = 'Correlation';
ciri_tabel{9,1} = 'Energy';
ciri_tabel{10,1} = 'Homogeneity';

%mengubah number ke string agar bisa muncul ke tabel


ciri_tabel{1,2} = num2str(Red);
ciri_tabel{2,2} = num2str(Green);
ciri_tabel{3,2} = num2str(Blue);
ciri_tabel{4,2} = num2str(Hue);
ciri_tabel{5,2} = num2str(Saturation);
ciri_tabel{6,2} = num2str(Value);
ciri_tabel{7,2} = num2str(Contrast);
ciri_tabel{8,2} = num2str(Correlation);
ciri_tabel{9,2} = num2str(Energy);
ciri_tabel{10,2} = num2str(Homogeneity);
set(handles.uitable1,'Data',ciri_tabel,'RowName',1:10)

%menyimpan variabel ciri_uji pada lokasi handles agar dapat


dipanggil oleh
%pushbutton yang lain
handles.ciri_uji = ciri_uji;
guidata(hObject, handles)

% --- Executes on button press in pushbutton4.


function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%memanggil variabel ciri_uji yang ada di lokasi handles


ciri_uji = handles.ciri_uji;
%memanggil nilai bobot jaringan
load('wnet1.mat')
load('wnet2.mat')

%menghitung jarak masing2 kelas dengan titik pusat masing2 model


SOM
pfn1 = dist(wnet1,[ciri_uji]');
pfn2 = dist(wnet2,[ciri_uji]');

%menghitung jarak terpendek


Group = [min(pfn1),min(pfn2)];

%membaca nilai keluaran hasil pengujian


[~,Groupmin] = min(Group,[],2);

%mengubah nilai keluaran menjadi kelas keluaran


switch Groupmin
case 1
kelas_keluaran = 'Matang';
case 2
kelas_keluaran = 'Mentah';

end

%menampilkan kelas keluaran pada edit text


set(handles.edit2,'String',kelas_keluaran)

% --- Executes on button press in pushbutton5.


function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%mereset tampilan GUI


set(handles.edit1,'String',[])
set(handles.edit2,'String',[])

axes(handles.axes1)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])

axes(handles.axes2)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])

set(handles.uitable1,'Data',[],'RowName',{'' '' ''})

function edit1_Callback(hObject, eventdata, handles)


% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1
as a double

% --- Executes during object creation, after setting all properties.


function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit2_Callback(hObject, eventdata, handles)


% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text


% str2double(get(hObject,'String')) returns contents of edit2
as a double

% --- Executes during object creation, after setting all properties.


function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

Anda mungkin juga menyukai