Aplikasi Jaringan Syaraf Tiruan










Jaringan Syaraf Tiruan untuk Pengelompokan Jenis Daun


Memahami contoh penerapan jaringan syaraf tiruan dalam kehidupan sehari hari.

Jaringan syaraf tiruan merupakan suatu algoritma klasifikasi yang prinsip kerjanya meniru jaringan syaraf manusia. Algoritma ini memetakan data input menuju targer pada layer output melalui neuron neuron pada layer yang tersembunyi.

Jaringan saraf tiruan dibentuk sebagai generalisasi model matematika dari jaringan saraf biologis manusia, dengan asumsi bahwa:
  • Pemrosesan informasi terjadi pada banyak elemen sederhana (neuron).
  • Sinyal dikirimkan di antara neuron-neuron melalui penghubung-penghubung.
  • Penghubung antar neuron memiliki bobot yang akan memperkuat atau memperlemah sinyal.
Salah satu contoh dari aplikasi jaringan syaraf tiruan adalah untuk Mengidentifikasi Jenis Daun.

3. Langkah-langkah [kembali]

1. Langkah pertama yaitu mempersiapkan data untuk proses pelatihan dan pengujian

Berikut ini merupakan contoh data untuk proses pelatihan


data untuk pengujian :



2. Melakukan pelatihan jaringan dengan tahapan-tahapan sebagai berikut:

a. Membaca citra latih
b. Segmentasi citra dengan metode thresholding pada kanal merah
c. Operasi morfologi untuk memperbaiki hasil segmentasi
d. Ekstraksi ciri bentuk berdasarkan parameter metric dan eccentricity
e. Menetapkan target latih (kelas Bougainvillea sp disimbolkan dengan angka 1, kelas Geranium sp dengan angka 2, kelas Magnolia soulangeana dengan angka 3, dan kelas Pinus sp dengan angka 4)
f. Membangun arsitektur jaringan syaraf tiruan propagasi balik
g. Melatih jaringan dengan hasil ekstraksi ciri sebagai masukannya
h. Menghitung akurasi hasil pelatihan

Source code proses pelatihan jaringan adalah sebagai berikut:

clc;clear;close all;

image_folder = 'Citra Latih';
filenames = dir(fullfile(image_folder, '*.jpg'));
total_images = numel(filenames);

for n = 1:total_images
    full_name= fullfile(image_folder, filenames(n).name);
    I = imread(full_name);
    J = I(:,:,1);
    K = im2bw(J,.6);
    L = imcomplement(K);
    str = strel('disk',5);
    M = imclose(L,str);
    N = imfill(M,'holes');
    O = bwareaopen(N,5000);
    stats = regionprops(O,'Area','Perimeter','Eccentricity');
    area(n) = stats.Area;
    perimeter(n) = stats.Perimeter;
    metric(n) = 4*pi*area(n)/(perimeter(n)^2);
    eccentricity(n) = stats.Eccentricity;
end

input = [metric;eccentricity];
target = zeros(1,24);
target(:,1:6) = 1;
target(:,7:12) = 2;
target(:,13:18) = 3;
target(:,19:24) = 4;

net = newff(input,target,[10 5],{'logsig','logsig'},'trainlm');
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-6;
net = train(net,input,target);
output = round(sim(net,input));
save net.mat net

[m,n] = find(output==target);
akurasi = sum(m)/total_images*100


Salah satu tampilan citra hasil pengolahan ditunjukkan pada gambar di bawah ini:




Tampilan proses pelatihan jaringan :




Hasil klasifikasi proses pelatihan ditunjukkan oleh tabel berikut :




Berdasarkan pada tabel tersebut, akurasi yang dihasilkan sistem dalam proses pelatihan adalah 24/24*100% = 100%.

3. Melakukan pengujian jaringan dengan tahapan-tahapan sebagai berikut:

a. Membaca citra uji
b. Segmentasi citra dengan metode thresholding pada kanal merah
c. Operasi morfologi untuk memperbaiki hasil segmentasi
d. Ekstraksi ciri bentuk berdasarkan parameter metric dan eccentricity
e. Menetapkan target uji (kelas Bougainvillea sp disimbolkan dengan angka 1, kelas Geranium sp dengan angka 2, kelas Magnolia soulangeana dengan angka 3, dan kelas Pinus sp dengan angka 4)
f. Memanggil jaringan syaraf tiruan propagasi balik yang telah dibuat pada proses pelatihan
g. Menguji jaringan dengan hasil ekstraksi ciri sebagai masukannya
h. Menghitung akurasi hasil pengujian
Source code proses pengujian jaringan adalah sebagai berikut:
clc;clear;close all;

image_folder = 'Citra Uji';
filenames = dir(fullfile(image_folder, '*.jpg'));
total_images = numel(filenames);

for n = 1:total_images
    full_name= fullfile(image_folder, filenames(n).name);
    I = imread(full_name);
    J = I(:,:,1);
    K = im2bw(J,.6);
    L = imcomplement(K);
    str = strel('disk',5);
    M = imclose(L,str);
    N = imfill(M,'holes');
    O = bwareaopen(N,5000);
    stats = regionprops(O,'Area','Perimeter','Eccentricity');
    area(n) = stats.Area;
    perimeter(n) = stats.Perimeter;
    metric(n) = 4*pi*area(n)/(perimeter(n)^2);
    eccentricity(n) = stats.Eccentricity;
end

input = [metric;eccentricity];
target = zeros(1,16);
target(:,1:4) = 1;
target(:,5:8) = 2;
target(:,9:12) = 3;
target(:,13:16) = 4;

load net
output = round(sim(net,input));

[m,n] = find(output==target);
akurasi = sum(m)/total_images*100
Hasil klasifikasi proses pengujian ditunjukkan pada tabel berikut :



Pada tabel di atas terdapat satu kelas citra daun yang diklasifikasikan dengan salah sehingga akurasi yang dihasilkan jaringan dalam proses pengujian adalah sebesar 15/16*100% = 93,75%.
Akurasi yang dihasilkan sistem baik pada proses pelatihan maupun pengujian menunjukkan bahwa metode yang digunakan dapat mengklasifikasikan citra daun dengan baik.

4. Membuat tampilan GUI Matlab

Source code GUI Matlab untuk proses klasifikasi citra daun adalah sebagai berikut :

function varargout = Klasifikasi_daun(varargin)
% KLASIFIKASI_DAUN MATLAB code for Klasifikasi_daun.fig
%      KLASIFIKASI_DAUN, by itself, creates a new KLASIFIKASI_DAUN or raises the existing
%      singleton*.
%
%      H = KLASIFIKASI_DAUN returns the handle to a new KLASIFIKASI_DAUN or the handle to
%      the existing singleton*.
%
%      KLASIFIKASI_DAUN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in KLASIFIKASI_DAUN.M with the given input arguments.
%
%      KLASIFIKASI_DAUN('Property','Value',...) creates a new KLASIFIKASI_DAUN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Klasifikasi_daun_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Klasifikasi_daun_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 Klasifikasi_daun

% Last Modified by GUIDE v2.5 23-Oct-2016 15:06:14

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Klasifikasi_daun_OpeningFcn, ...
                   'gui_OutputFcn',  @Klasifikasi_daun_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 Klasifikasi_daun is made visible.
function Klasifikasi_daun_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 Klasifikasi_daun (see VARARGIN)

% Choose default command line output for Klasifikasi_daun
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');

% UIWAIT makes Klasifikasi_daun wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Klasifikasi_daun_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)
[nama_file,nama_path] = uigetfile({'*.*'});

if ~isequal(nama_file,0)
    I = imread(fullfile(nama_path,nama_file));
    axes(handles.axes1)
    imshow(I)
    handles.I = I;
    guidata(hObject,handles)
else
    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)
I = handles.I;
J = I(:,:,1);
K = im2bw(J,.6);
L = imcomplement(K);
str = strel('disk',5);
M = imclose(L,str);
N = imfill(M,'holes');
O = bwareaopen(N,5000);
stats = regionprops(O,'Area','Perimeter','Eccentricity');
area = stats.Area;
perimeter = stats.Perimeter;
metric = 4*pi*area/(perimeter^2);
eccentricity = stats.Eccentricity;

input = [metric;eccentricity];

load net
output = round(sim(net,input));

axes(handles.axes2)
imshow(O)

if output == 1
    kelas = 'Bougainvillea';
elseif output == 2
    kelas = 'Geranium';
elseif output == 3
    kelas = 'Magnolia soulangeana';
elseif output == 4
    kelas = 'Pinus';
end

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

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');


Tampilan GUI Matlab ditunjukkan pada gambar-gambar berikut ini :

1. Tampilan awal





2. Pengolahan citra daun untuk kelas Bougainvillea sp




3. Pengolahan citra daun untuk kelas Geranium sp




4. Pengolahan citra daun untuk kelas Magnolia soulangeana



5. Pengolahan citra daun untuk kelas Pinus sp



4. Video [kembali]




5. Link Download [kembali]

Download Citra Latih   [DISINI]
Download CItra Uji   [DISINI]
Download Listing Program   [DISINI]

Tidak ada komentar:

Posting Komentar