Jaringan Syaraf Tiruan untuk Klasifikasi Citra Daun
Salah satu penerapan dari algoritma jaringan syaraf tiruan adalah untuk proses klasifikasi citra. Berikut ini merupakan contoh aplikasi pemrograman matlab untuk melakukan klasifikasi terhadap citra daun. Citra daun dikelompokkan ke dalam 4 kelas spesies yaitu Bougainvillea sp, Geranium sp, Magnolia soulangeana, dan Pinus sp. Pada contoh ini digunakan 40 citra daun yang terdiri dari 10 citra pada masing-masing kelas. Contoh dari citra daun yang digunakan ditunjukkan pada gambar di bawah ini:
Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Mempersiapkan citra latih dan citra uji. Pada contoh ini 40 citra daun dibagi menjadi dua bagian yaitu 24 citra untuk citra latih dan 16 citra untuk citra uji.
a. Citra latih berjumlah 24 citra yang terdiri dari 6 citra pada masing-masing kelas
b. Citra uji berjumlah 16 citra yang terdiri dari 4 citra pada masing-masing kelas
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); area = zeros(1,total_images); perimeter = zeros(1,total_images); metric = zeros(1,total_images); eccentricity = zeros(1,total_images); 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:
Sedangkan tampilan proses pelatihan jaringan yaitu:
Hasil klasifikasi proses pelatihan ditunjukkan pada 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); area = zeros(1,total_images); perimeter = zeros(1,total_images); metric = zeros(1,total_images); eccentricity = zeros(1,total_images); 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:
% Adi Pamungkas, S.Si, M.Si % Website: https://pemrogramanmatlab.com/ % Email : adipamungkas@st.fisika.undip.ac.id 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) R = I(:,:,1); G = I(:,:,2); B = I(:,:,3); R(~O) = 0; G(~O) = 0; B(~O) = 0; RGB = cat(3,R,G,B); axes(handles.axes3) imshow(RGB) 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'); end
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
File source code lengkap beserta citra daun untuk proses klasifikasi pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code
Penerapan algoritma jaringan syaraf tiruan untuk klasifikasi citra daun dapat dilihat pada video tutorial berikut ini:

Posted on October 24, 2016, in Data mining, Pengenalan Matlab, Pengenalan Pola, Pengolahan Citra and tagged aplikasi jaringan syaraf tiruan, aplikasi jst matlab, aplikasi jst untuk klasifikasi citra, contoh aplikasi matlab jaringan syaraf tiruan, contoh koding jst matlab, contoh pemrograman jst matlab, contoh program jaringan syaraf tiruan, contoh program jst matlab, definisi jaringan syaraf tiruan, download koding jst matlab, download koding matlab jst, download source code matlab, ekstraksi ciri citra, ekstraksi fitur, identifikasi citra menggunakan algoritma jaringan syaraf tiruan, jaringan syaraf tiruan, jaringan syaraf tiruan adalah, jaringan syaraf tiruan backpropagation, jaringan syaraf tiruan matlab, jaringan syaraf tiruan propagasi balik, jaringan syaraf tiruan untuk klasifikasi citra, jst backpropagation matlab, jst matlab, jst sederhana, klasifikasi citra, klasifikasi citra daun, operasi morfologi, pemrograman jst matlab, pemrograman matlab, penerapan jst untuk klasifikasi citra, pengertian jaringan syaraf tiruan, program jaringan syaraf tiruan, program matlab jaringan syaraf tiruan, thresholding citra. Bookmark the permalink. 162 Comments.
mas adi bagaimana cara menginisialisasikan bobot awal dg nilai yg tetap agar nilai akurasi tidak berubah ubah dan nilainya bisa tinggi pada pelatihan dan pengujiannya ??
Agar nilai akurasi tidak berubah2 maka inisialisasi bobot awal harus dilakukan menggunakan nilai yg tetap (tidak berubah2)
saya nyoba sama persis sama punya mas adi tapi hasilnya akurasinya sama, masih berubah2 mas. gmana mas ?
bisa dilakukan inisialiasi bobot awal agar hasil akurasi tidak berubah2
mas adi biar akurasi pengujian bisa naik itu gmna ?
Bisa memvariasikan parameter2 yg mempengaruhi performasi jst seperti learning rate, jenis fungsi aktivasi, jenis fungsi pelatihan, jumlah epoch, dll
di pelatihannya sudah mencapai 85% mas
akurasi pelatihan yang tinggi belum tentu di pengujiannya juga tinggi
oleh karena itu, perlu dilakukan variasi parameter2 yg mempengaruhi performansi jst seperti yg sudah saya jelaskan di atas agar diperoleh akurasi yg tinggi baik di pelatihan maupun pengujian
makasih mas Adi
Baik sama sama daus
mas mau tanya untuk fungsi pengubahan citra asli menjadi citra greyscale dan biner itu buat apa ??
Hal tsb dilakukan dalam proses segmentasi citra untuk memisahkan antara objek dengan background
Keluaran dari hasil segmentasi adalah berupa citra biner dimana objek bernilai 1 (berwarna putih) sedangkan background bernilai 0 (berwarna hitam)
ekstraksi ciri yang digunakan di program ini pake yg jenis apa mas ?
Pada materi di atas sudah disampaikan bahwa ekstraksi ciri bentuk berdasarkan parameter metric dan eccentricity
makasih mas adi
Sama sama putra
Mas mau tanya lagi
Kalo mencari nilai akurasi pada pengujian jaringan pake
Akurasi = sum(m)/ total_image*100
Kalo nilai m diganti pake nilai n gmna ?
Tidak masalah daus itu hanya penamaan variabel
Bisa dilakukan secara bebas
mas kalau kombinasi color moment dengan hsv gmna hitungnya ya?
mohon pencerahannya mas, soalnya untuk skrippsi trimakasih..
ini merupakan contoh koding untuk menghitung color moment
silakan dicoba
% Extract RGB Channel
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
% Extract Statistical features
% 1] MEAN
meanR=mean2(R);
meanG=mean2(G);
meanB=mean2(B);
% 2] Standard Deviation
stdR=std2(R);
stdG=std2(G);
stdB=std2(B);
A=[meanR meanG meanB stdR stdG stdB];
maaf mas, kalau perhitungan manualnya itu gmana ya rumusnya…
saya rasa itu hanya rumus umum menghitung nilai rata2 & standar deviasi
tidak susah untuk dihitung
oke terimakasih mas penjelasannya, semoga mas sehat sehat selalu dan banyak rejeki nya amin…./
assalamualikum.. mas bisa minta langsung source codenya? soalnya di copas ngikitun langkah yang diatas masuh eror 😦
Waalaikumsalam
Source code di atas tidak bisa dijalankan jika hanya dicopypaste saja
Source code lengkap bisa diperoleh melalui tokopedia sehingga bisa langsung dirunning dan dikembangkan
mas adi mau tanya, error dental pecan Too many outputs requested. Most likely cause is missing [] around left hand side that has a comma separated list
expansion. itu karena apa ya? terima kasih
mas kalo error Insufficient number of outputs from right hand side of equal sign to satisfy assignment. itu kenapa ya?
mas bedanya jst yang dipakai pada program ini sama lvq apa ya??
Bisa dipelajari lebih lanjut teori mengenai jaringan syaraf tiruan backpropagation dan learning vector quantization
mas adi, itu metode yang digunakan untuk klasifikasi daun, Backpropagation apa k-nearest neighbor?
Pada materi tersebut menggunakan jaringan syaraf tiruan backpropagation
mas adi, mau tanya lagi, apa hal pertama yang harus saya lakukan ketika saya ingin membuat klasikasi daun berdasarkan jenis tulang daunnya?
mohon pencerahaannya
terima kaish
Tahapan yang perlu dilakukan untuk membuat sistem klasifikasi citra bisa dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/pengenalan-pola-citra-digital-menggunakan-matlab/
mas adi, mau tanya, saya menggunakan metode GLCM untuk ekstraksi teksur, dan parameter inputan untuk train jst yang saya gunakan adalah contrast,correlation,energy dan homogeneity, setalah saya run ada peringatan di command window “Error using network/train (line 340)
Inputs and targets have different numbers of samples.
Error in pelatihan (line 34)
net = train(net,input,target);”
mohon pencerahannya?
terima kasih
Bisa dipelajari lagi pemrograman untuk jst
mas kalau tresholding menggunkana kanal hitam gimana ya mas ?
pada citra rgb hanya terdiri dari tiga kanal warna yaitu kanal merah, hijau, dan biru
mas mau nanya lagi kalau pada program ini fungsi aktifasi propagasi balik yang digunakan apa mas ?
fungsi aktivasi yang digunakan pada hidden layer adalah sigmoid biner
mas mau tanya kalau input untuk convolutional neural network apakah bisa pakai data set? jadi processing imagenya sudah dilakukan dan hasil pengolahannya berupa data set di excel. terima kasih.
input dari cnn bisa berupa dataset bisa juga berupa citra
Mas mau bertanya, pada bagian line 23 error, (Undefined function or variable ‘metric’)
Itu kenapa ya mas?, kan padahal sudah di jelaskan pada perulangan
Source code lengkap bisa diperoleh melalui tokopedia sehingga bisa langsung dirunning dan dikembangkan
Error using network/train (line 340)
Inputs and targets have different numbers of samples.
Error in pelatihan_jst (line 34)
net = train(net,input,target);
kalau eror kayak gini bagaimana ya penyelesaiannya?padahal codingannya belum saya edit sama sekali, eror dari pertama kali coba, terima kasih.
Source code dan data lengkap bisa dibeli di tokopedia sehingga bisa langsung dirunning tanpa error dan dikembangkan
mau tanya, kalau background citra aslinya engga berwarna RGB atau objeknya engga berwarna RGB bisa ga pake metode ini? Makasih sebelumnya
bisa dicoba diterapkan
selamat malam mas adi pamungkas, mau tanya tentang command “save net.mat net”, bagaimana cara mengetahui isi dari mat file tersebut dan apakah bisa dikonversi ke dalam bentuk lain seperti csv atau txt?
terimakasih
malam
untuk melihat isi dari file tsb bisa menggunakan perintah load
kak bagaimana cara membuat file.mat dan cara menghubungkannya ke file .fig/ file .m
boleh minta datasetnya kk
Source code dan data lengkap bisa dibeli di tokopedia
Mas adi, saya nyoba ngikutin kode mas di matlab online tapi muncul pemberitahuan Unrecognized function or variable ‘newff’. Itu kenapa ya mas ?
Bisa dicoba di matlab offline
Mas adi, apakah latar belakang untuk citra uji harus berwarna merah muda?
mas adi, ada minimal versi tidak untuk menggunakan program ini, saya pakai yang 2007 ada masalah dibagian
Error using ==> regionprops>ParseInputs at 837
Use bwlabel(BW) or double(BW) convert binary image to
a label matrix before calling regionprops.
Pakai matlab terbaru saja
permisi mas mau nanya kalau menggabungkan extrasi ciri HOG dan JST Gimana ya codingnnya
Bisa dipelajari lagi teori mengenai algoritma jaringan syaraf tiruan
Pingback: Pengertian Jaringan Syaraf Tiruan, Fuzzy Logic dan Algoritma Genetika – andre
Pingback: Kecerdasan Komputasional – Judul Situs