Anda di halaman 1dari 40

1

Pengolahan Citra Digital Menggunakan


MATLAB

oleh :
Andik Mabrur, S.Si

Tulungagung, Juni 2011


www.its-matematika.blogspot.com

Ditulis Menggunakan LATEX


2

1. Tentang MATLAB
1.1 Sejarah Matlab
Nama MATLAB merupakan singkatan dari matrix laboratory. MATLAB pada
awalnya ditulis untuk memudahkan akses perangkat lunak matrik yang telah dibentuk
oleh LINPACK dan EISPACK. Saat ini perangkat MATLAB telah menggabung dengan
LAPACK dan BLAS library, yang merupakan satu kesatuan dari sebuah seni tersendiri
dalam perangkat lunak untuk komputasi matrik.

1.2 Kegunaan Matlab


Dalam lingkungan perguruan tinggi teknik, Matlab merupakan perangkat standar
untuk memperkenalkan dan mengembangkan penyajian materi matematika, rekayasa dan
kelimuan. Di industri, MATLAB merupakan perangkat pilihan untuk penelitian dengan
produktifitas yang tinggi, pengembangan dan analisanya.
Penggunaan Matlab meliputi bidang - bidang :

• Matematika dan Komputasi

• Pembentukan Algorithm

• Akusisi Data

• Pemodelan, simulasi, dan pembuatan prototipe

• Analisa data, explorasi, dan visualisasi

• Grafik Keilmuan dan bidang Rekayasa

1.3 Fasilitas Matlab


Fitur-fitur MATLAB sudah banyak dikembangkan, dan lebih kita kenal dengan
nama toolbox. Sangat penting bagi seorang pengguna Matlab, toolbox mana yang man-
dukung untuk learn dan apply technologi yang sedang dipelajarinya. Toolbox toolbox ini
merupakan kumpulan dari fungsi-fungsi MATLAB (M-files) yang telah dikembangkan
ke suatu lingkungan kerja MATLAB untuk memecahkan masalah dalam kelas particu-
lar. Area-area yang sudah bisa dipecahkan dengan toolbox saat ini meliputi pengolahan
sinyal, system kontrol, neural networks, fuzzy logic, wavelets, dan lain-lain.
Selain toolbox, matlab juga dilengakapi dengan Simulink yang sangat powerfull
untuk mensimulasikan dan menyelesaikan masalah - masalah yang berhubungan dengan
Pemodelan Matematika. Dengan Simulink, kita dapat dengan mudah mengecek kestabi-
lan suatu model Matematika yang kita punya.
Sebagai sebuah sistem, MATLAB tersusun dari 5 bagian utama:
3

1. Development Environment. Merupakan sekumpulan perangkat dan fasilitas yang


membantu anda untuk menggunakan fungsi-fungsi dan file-file MATLAB. Beber-
apa perangkat ini merupakan sebuah graphical user interfaces (GUI). Termasuk di-
dalamnya adalah MATLAB desktop dan Command Window, command history, se-
buah editor dan debugger, dan browsers untuk melihat help, workspace, files, dan
search path.

2. MATLAB Mathematical Function Library. Merupakan sekumpulan algoritma


komputasi mulai dari fungsi-fungsi dasar sepertri: sum, sin, cos, dan complex arith-
metic, sampai dengan fungsi-fungsi yang lebih kompek seperti matrix inverse, ma-
trix eigenvalues, Bessel functions, dan fast Fourier transforms.

3. MATLAB Language. Merupakan suatu high-level matrix/array language den-


gan control flow statements, functions, data structures, input/output, dan fitur-fitur
object-oriented programming. Ini memungkinkan bagi kita untuk melakukan ke-
dua hal baik "pemrograman dalam lingkup sederhana " untuk mendapatkan hasil
yang cepat, dan "pemrograman dalam lingkup yang lebih besar" untuk memper-
oleh hasil-hasil dan aplikasi yang komplek.

4. Graphics. MATLAB memiliki fasilitas untuk menampilkan vektor dan matrik se-
bagai suatu grafik. Di dalamnya melibatkan high-level functions (fungsi-fungsi
level tinggi) untuk visualisasi data dua dimensi dan data tiga dimensi, image pro-
cessing, animation, dan graphics presentation. Ini juga melibatkan fungsi level ren-
dah yang memungkinkan bagi anda untuk membiasakan diri untuk memunculkan
grafik mulai dari bentuk yang sederhana sampai dengan tingkatan graphical user
interfaces (GUI) pada aplikasi MATLAB anda.

5. MATLAB Application Program Interface (API). Merupakan suatu library yang


memungkinkan program yang telah anda tulis dalam bahasa C dan Fortran mampu
berinterakasi dengan MATLAB. Ini melibatkan fasilitas untuk pemanggilan rou-
tines dari MATLAB (dynamic linking), pemanggilan MATLAB sebagai sebuah
computational engine, dan untuk membaca dan menuliskan MAT-files.

2. MEMULAI MATLAB
2.1 Membuka Matlab
Apabila komputer sudah terinstal program Matlab, maka kita akan dengan sangat
mudah membuka program Matlab. Caranya yaitu klik Menu Start pada Desktop, ke-
mudian pilih All Program, lalu pilih program Matlab sesuai dengan versi yang sudah
terinstal pada komputer atau tinggal klik 2 kali pada shortcut program Matlab pada Desk-
top. Tampilan program Matlab ketika dibuka pertama kali adalah seperti gambar di bawah
ini.
4

2.2 Memulai Memakai Matlab


Untuk percobaan pertama, kita akan membuat 2 variabel yakni panjang dan lebar
dengan nilai tertentu. Kemudian akan dicari Luas dari 2 variabel yang disimpan tersebut.

>> panjang=10 (lalu tekan "enter")

panjang =

10

>> lebar=5

lebar =

>> Luas=panjang*lebar

Luas =

50

>>

Untuk percobaan kedua, akan dicoba operasi matrik. Operasi yang akan dicoba adalah
operasi penambahan.

>> a=[1 2 3 4]

a =
5

1 2 3 4

>> b=[8 7 6 5]

b =

8 7 6 5

>> c=a+b

c =

9 9 9 9

>>

Untuk percobaan ketiga, akan dicoba program yang memanfaatkan fungsi - fungsi
bawaan Matlab seperti Sinus, Cosinus, dan pi. Selain itu juga akan dicoba perintah dengan
menambahkan ; yang berfungsi untuk menyembunyikan hasil yang beru saja dikerjakan
dengan Matlab.

>> A=pi/6;
>> sin(A)

ans =

0.5000

>> cos(A)

ans =

0.8660

>>

3. Pemrograman M-File Matlab


Pemrograman dengan M-File Matlab memberikan kontrol lebih banyak diband-
ingkan dengan pemrograman dengan Command Window seperti yang dibicarakan se-
belumnya. Dengan M-File kita bisa melakukan percabangan, perulangan, pembuatan
fungsi, dan lain - lain. Struktur Program M-File mirip dengan bahasa C yang membagi
blok program berupa fungsi-fungsi. Tiap fungsi dapat memanggil fungsi-fungsi yang lain.
Script dalam Command Window berguna untuk menyelesaikan permasalahan yang pen-
6

dek. Sebaliknya M-File dapat dipakai untuk membuat berbagai aplikasi sesuai keinginan
pemakai.
Dalam bab ini dibahas tentang dasar-dasar pembuatan program dalam M-File.
Program-program yang membutuhkan fungsi yang lebih kompleks contohnya dapat dili-
hat pada Demo atau Help yang menjadi fasilitas Matlab.
Jendela M-File dapat dibuka melalui menu File->New->M->File atau langsung
saja dengan menekan Ctrl+N. Jendela M-File terlihat seperti pada gambar di bawah ini.

3.1 Membuat Fungsi dengan M-File


Salah satu kemampuan M-File yang begitu baik adalah membuat fungsi. Seperti
layaknya fungsi - fungsi yang sudah terdefinisi di Matlab, kita juga bisa membuat fungsi
sendiri yang bisa dipanggil layaknya fungsi bawaan Matlab.
Bentuk deklarasi sebuah fungsi dalam Matlab adalah sebagai berikut :

function <argumen_keluaran>=<nama_fungsi><argumen_masukan>

Sebagai contoh adalah bentuk deklarasi untuk menghitung luas sebuah persegi panjang :

function Luas = FLuas (panjang,lebar)

Untuk memudahkan pemahaman akan dibuat contoh pembuatan fungsi yang lengkap.
Fungsi yang dibuat adalah fungsi untuk menghitunhg luas persegi panjang seperti contoh
definisi di atas tadi. Berikut ini adalah fungsi lengkapnya.

function Luas = FLuas (panjang,lebar)


Luas=panjang*lebar;
7

Simpan file-nya dengan nama yang sama dengan nama yang sama dengan nama fungsinya.
Karena nama fungsinya FLuas, maka simpan dengan nama "FLuas.m". Kemudian fumgsi
ini akan dicoba pada Command Window Matlab dengan bagian panjang = 10 dan lebar =
5.

>> FLuas(10,5)

ans =

50

>>

3.2 Pemakaian M-File dengan Inputan dari Keyboard


Untuk dapat melakukan inputan di Command Window Matlab, kita bisa menggu-
nakan perintah :

var=input(’Masukkan nilai : ’)

Sedangkan untuk keluarannya, kita bisa menggunakan perintah :

disp(var)

var merupakan variabel tempat menyimpan nilai inputan.


Untuk memudahkan pemahaman, lihat contoh di bawah ini. Di sini akan dibuat
program untuk menghitung luas trapesium. Inputan yang ditampilkan adalah ’Sisi Alas’,
’Sisi Atas’, dan tinggi.

clc;
clear;
a=input(’Masukkan panjang Sisi Alas : ’);
b=input(’Masukkan panjang Sisi Atas : ’);
t=input(’Masukkan tinggi : ’);
Luas=0.5*(a*b)*t;
disp(’Luas Trapesium adalah : ’)
disp(Luas)

Setelah di-running dengan inputan Sisi Alas=20, Sisi Atas=15, dan tinggi=8, maka
tampilan di Command Window adalah sebagai berikut :

Masukkan panjang Sisi Alas : 20


Masukkan panjang Sisi Atas : 15
Masukkan tinggi : 8
Luas Trapesium adalah :
1200

>>
8

3.3 Contoh Kasus Penyelesaian dengan M-File


1. Menghitung Luas Permukaan dan Volume Balok. Untuk menyelesaikan per-
masalahan ini kita akan memakai inputan yang tetap berupa panjang, lebar, dan
tinggi. Untuk output dari program ini adalah berupa Luas Permukaan dan Volume
balok yang akan ditampilkan pada Command Window di Matlab.

clc;
clear;
panjang=10;
lebar=5;
tinggi=4;
Luas=2*panjang*lebar+2*panjang*tinggi+2*lebar*tinggi
Volume=panjang*lebar*tinggi

Hasil running-nya di Command Window adalah seperti di bawah ini.

Luas =

220

Volume =

200

>>

2. Menghitung n Suku Pertama dari Deret Aritmatika. Untuk membuat program


ini, akan dipakai masukan berupa nilai suku pertama, nilai beda, dan nilai n. Inputan
akan dibuat dinamis yang dapat langsung diinputkan dari keyboard ketika running
program berlangsung. Hasil dari program ini yang berupa n suku pertama dari deret
Aritmatika juga akan ditampilkan dalam Command Window.

clear;
a=input(’Masukkan suku pertama : ’);
b=input(’Masukkan beda : ’);
n=input(’Masukkan nilai n : ’);
for i=1:n
hasil(i)=a+b*(i-1);
end
hasil

Hasil running-nya di Command Window adalah seperti di bawah ini.


9

Masukkan suku pertama : 5


Masukkan beda : 3
Masukkan nilai n : 7

hasil =

5 8 11 14 17 20 23

>>

4. Citra Digital dan Pengolahannya di Matlab


4.1 Citra Digital
Sebuah citra digital adalah kumpulan piksel-piksel yang disusun dalam larik dua
dimensi. Indeks baris dan kolom (x,y) dari sebuah piksel yang dinyatakan dalam bilan-
gan bulat dan nilai-nilai tersebut mendefinisikan suatu ukuran intensitas cahaya pada titik
tersebut. Satuan atau bagian terkecil dari suatu citra disebut piksel (picture element).
Umumnya citra dibentuk dari persegi empat yang teratur sehingga jarak horizontal dan
vertikal antara piksel satu dengan yang lain adalah sama pada seluruh bagian citra. Pik-
sel (0,0) terletak pada sudut kiri atas pada citra, dimana indeks x bergerak ke kanan dan
indeks y bergerak ke bawah. Untuk menunjukkan koordinat (m-1,n-1) digunakan posisi
kanan bawah dalam citra berukuran m x n pixel. Hal ini berlawanan untuk arah vertikal
dan horizontal yang berlaku pada sistem grafik dalam matematika.
Video sebenarnya juga merupakan salah satu bentuk dari citra digital. Video meru-
pakan kumpulan dari beberapa frame dari citra digital. Satu frame merupakan satu citra
digital. Oleh karena itu, apabila di video ada satuan yang menyatakan 12 fps(frame per
second) artinya bahwa video tersebut memainkan 12 frame/citra digital dalam tiap de-
tiknya.

4.2 Membaca File Citra Digital di Matlab dan Menampilkannya


Dalam Matlab, citra digital direpresentasikan dalam matriks berukuran m x n
sesuai dengan ukuran m x n ukuran citra digital dalam pixel. Jadi setiap pixel dari citra
digital diwaklili oleh sebuah matriks berukuran 1x1 apabila citra tersebut berupa citra
Grayscale atau citra Biner, dan 3 matriks apabila citra digital berupa citra RGB. Misalkan
kita punya citra digital berukuran 640x480 pixel, maka sebenarnya citra tersebut diwakili
oleh matriks berukuran 640x480.
Untuk membaca sebuah file citra di Matlab, maka digunakan perintah :

A=imread(’nama_File’)

dengan syarat file yang dibaca berada pada direktori yang aktif. File yang dibaca kemu-
dian disimpan dalam variabel "A" dalam bentuk matriks penyusun citra.
Sedangkan untuk menampilkan file citra yang telah dibaca digunakan perintah :
10

imshow(A)

"A" merupakan variabel tempat menyimpan matriks penyusun citra yang telah dibaca
sebelumnya.
Untuk mempermudah pemahaman, akan langsung digunakan contoh. Misalkan
kita akan membaca sebuah file citra dengan nama file "logo-batu.jpg", kemudian akan
langsung ditampilkan. Ingat!!! Sebelum di-running simpan filenya terlebih dahulu.

clc;
clear;
A=imread(’logo-batu.jpg’);%Membaca file citra
imshow(A)%Menampilkan file citra

Hasil running-nya adalah sebagai berikut :

Untuk contoh kedua, kita masih akan membaca file yang sama, akan tetapi kali
ini akan diambil masing - masing matriks penyusun citra (matriks R, matriks G, dan
Matriks B) karena memang file yang dibaca adalah gambar RGB (berwarna). Semua
matriks ini kemudian akan ditampilkan ke dalam 1 figure (plot). Berikut ini adalah listing
programnya yang ditulis dalam M-File.

clc;
clear;
A=imread(’logo-batu.jpg’);%Membaca file citra
red=A(:,:,1);%Mengambil matriks penyusun citra merah
green=A(:,:,2);%Mengambil matriks penyusun citra hijau
blue=A(:,:,3);%Mengambil matriks penyusun citra biru
subplot(2,2,1)
imshow(A)
subplot(2,2,2)
imshow(red)
11

subplot(2,2,3)
imshow(green)
subplot(2,2,4)
imshow(blue)

Hasil running-nya adalah sebagai berikut :

Untuk membaca file citra yang berbeda direktori dengan direktori yang aktif adalah
dengan menuliskan direktori tempat file berada + nama_file. Misalkan filenya berada pada
direktori "D:/Picture", maka tinggal ditulis saja :

A=imread(’D:/Picture/logo-batu.jpg’)

4.3 Membaca File Video di Matlab dan Menampilkannya


Tidak semua file vieo bisa dibaca di Matlab. Hanya file video dengan format ".avi"
saja yang bisa dibaca di Matlab. Untuk bisa membaca file dengan format ".avi" ada 2
fungsi yang bisa kita pakai.

• Menggunakan fungsi vid=aviread(’nama_file’)

• Menggunakan fungsi video=mmreader(’nama_file’) dan vd=read(video,frame)

Sedangkan untuk menampilkannya juga ada 2 cara :

• Untuk yang membacanya menggunakan fungsi vid=aviread(’nama_file’), maka menampilkan


videonya menggunakan :

movie(vid);

• Untuk yang membacanya menggunakan fungsi video=mmreader(’nama_file’), maka


menampilkannya adalah dengan menggunakan :
12

imshow(vd);

Dengan cara ini maka yang dapat ditampilkan hanyalah satu frame sesuai dengan
frame yang dibaca dengan syntax vd=read(video,frame). Apabila ingin ditampilkan
seperti layaknya video, maka harus dilakukan perulangan sesuai dengan jumlah
frame dalam video yang dibaca tersebut.

Untuk mempermudah pemahaman, maka akan langsung digunakan contoh. Mis-


alkan kita akan membaca sebuah file video dengan format .avi dengan nama "1-1.avi".
Untuk contoh pertama akan dibaca menggunakan fungsi : vid=aviread(’nama_file’).

clc;
clear;
vid = aviread(’1-1.avi’); %Membaca file video
movie(mov); %Menampilkan file video

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini :

Untuk contoh kedua akan dibaca dengan fungsi video=mmreader(’nama_file’)


dan vd=read(video,frame). Pada contoh ini video akan ditampilkan tiap frame sehingga
tampilannya akan seperti video.

clc;
clear;
video = mmreader(’1-1.avi’); %Membaca file video
ukuran = size(read(video1));%Menampilkan ukuran video
frame=ukuran(4); %Menghitung jumlah frame
for i=1:frame
vd=read(video,i);
imshow(vd)
end
13

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini.

4.4 Pengolahan Citra Digital yang Dapat Dilakukan dengan Fungsi


Bawaan Matlab
Ada beberapa pengolahan citra yang bisa kita lakukan dengan fungsi - fungsi yang
sudah didefinisikan di dalam Matlab. Untuk mempermudah pemahaman, maka masing -
masing pengolahan citra tersebut akan disertai contoh yang menggunakan citra berwarna
(RGB) dengan nama "logo-bitung.jpg". Pengolahan citra tersebut antara lain :

1. Grayscaling
Grayscalling adalah teknik yang digunakan untuk mengubah citra berwana (RGB)
menjadi bentuk grayscale atau tingkat keabuan (dari hitam ke putih). Dengan pen-
gubahan ini, matriks penyusun citra yang sebelumnya 3 matriks akan berubah men-
jadi 1 matriks saja. Pengubahan dari citra berwarna ke bentuk grayscale biasanya
mengikuti aturan sebagai berikut :

R(i, j) + G(i, j) + B(i, j)


I(i, j) =
3
dimana :
I(i, j) = Nilai intensitas citra grayscale
R(i, j) = Nilai intensitas warna merah dari citra asal
G(i, j) = Nilai intensitas warna hijau dari citra asal
B(i, j) = Nilai intensitas warna biru dari citra asal
Untuk melakukan Grayscaling di Matlab, kita bisa menggunakan fungsi :

I = rgb2gray(RGB)

Berikut ini adalah contoh lengkapnya ketika diterapkan dalam sebuah citra digital :
14

clc;
clear;
RGB=imread(’logo-bitung.jpg’);
I=rgb2gray(RGB); %Proses Grayscaling
subplot(1,2,1)
imshow(RGB)
subplot(1,2,2)
imshow(I)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri adalah gambar asli, sedangkan yang di sebelah kanan
adalah gambar setelah mengalami proses Grayscaling.

2. Binerisasi Citra
Binerisasi citra merupakan proses merubah citra ke dalam bentuk biner (0 dan 1).
Dengan merubah ke bentuk biner, citra hanya akan mempunyai 2 warna yakni hitam
dan putih. Dengan proses ini, citra RGB juga akan menjadi 1 matriks penyusun saja.
Untuk melakukan Binerisasi citra di Matlab, kita bisa menggunakan fungsi :

I = im2bw(RGB)

Berikut ini adalah contoh lengkapnya ketika diterapkan dalam sebuah citra digital.

clc;
clear;
RGB=imread(’logo-bitung.jpg’);
I=im2bw(RGB); %Binerisasi citra
subplot(1,2,1)
imshow(RGB)
subplot(1,2,2)
imshow(I)
15

Hasil running programnya adalah seperti terlihat pada gambardi bawah ini dimana
gambar yang di sebelah kiri adalah gambar asli, sedangkan yang di sebelah kanan
adalah gambar setelah mengalami proses Binerisasi citra.

3. Rotasi Citra
Rotasi citra di sini maksudnya adalah memutar citra sesuai dengan sudut yang diten-
tukan dengan pusat yang berada pada titik pusat citra digital yang diputar tersebut.
Untuk bisa melakukan rotasi citra di Matlab kita menggunakan fungsi :

B = imrotate(A,angle)

"A" merupakan variabel tempat untuk menyimpan matriks penyusun citra yang
telah dibaca. sedangkan "angle" merupakan besarnya sudut rotasi dari citra dalam
derajat berlawanan arah dengan arah jarum jam. Berikut ini adalah contoh lengkap-
nya ketika diterapkan dalam sebuah citra digital.

clc;
clear;
A=imread(’logo-bitung.jpg’);
B = imrotate(A,45);
subplot(1,2,1)
imshow(A)
subplot(1,2,2)
imshow(B)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri adalah gambar asli, sedangkan yang di sebelah kanan
adalah gambar setelah mengalami proses Rotasi citra sebesar 45 derajat.
16

4. Cropping Citra
Cropping citra artinya adalah pengambilan bagian tertentu dari suatu citra digital
menjadi matriks baru yang independent. Tentu saja cropping ini sangat berguna
apabila kita hanya membutuhkan bagian tertentu dari suatu citra digital. Misalkan
saja kita punya digital foto seluruh badan, padahal yang kita butuhkan hanya seten-
gah badan, tentunya kita akan menggunakan cropping ini untuk mengambil bagian
yang setengah badan tersebut. Untuk bisa melakukan cropping, di Matlab dapat
menggunakan fungsi :

B = imcrop(A,[a b c d]);

"A" merupakan matriks penyusun citra, "a" dan "b" merupakan titik awal mulainya
cropping, sedangkan "c" dan "d" merupakan besarnya cropping yang dilakukan
dalam satuan pixel. Berikut ini adalah contoh lengkapnya ketika diterapkan dalam
sebuah citra digital :

clc;
clear;
A=imread(’logo-bitung.jpg’);
B = imcrop(A,[30 30 100 100]);
subplot(1,2,1)
imshow(A)
subplot(1,2,2)
imshow(B)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri adalah gambar asli, sedangkan yang di sebelah kanan
adalah gambar yang sudah dicrop.
17

5. Resizing Citra
Resizing citra artinya adalah mengubah besarnya ukuran citra digital dalam pixel.
Ada kalanya ukurannya berubah menjadi lebih kecil dari file aslinya dan ada kalanya
sebaliknya. Untuk dapat melakukan resizing citra kita bisa menggunakan fungsi :

B = imresize(A, skala)
B = imresize(A, [mrows ncols])

"A" merupakan matriks penyusun citra, "skala" merupakan skala untuk resizing
(prubahan ukuran) citra, "mrows" adalah jumlah baris matriks yang baru, sedan-
gkan "ncols" adalah jumlah kolom matriks yang baru. Berikut ini adalah contoh
penerapannya pada citra digital :

clc;
clear;
RGB=imread(’logo-bitung.jpg’);
size(RGB)
B1=imresize(RGB,0.5);
size(B1)
B2=imresize(RGB,1.2);
size(B2)
B3=imresize(RGB,[100 70]);
size(B3)
subplot(2,2,1)
imshow(RGB)
subplot(2,2,2)
imshow(B1)
subplot(2,2,3)
imshow(B2)
subplot(2,2,4)
imshow(B3)
18

Perintah size() digunakan untuk mencari ukuran dari suatu matriks kemudian menampilkan-
nya di Command Window. Hasil running-nya di Command Window :

ans =

243 250 3

ans =

122 125 3

ans =

292 300 3

ans =

100 70 3

>>

Dari sini terlihat bahwa ukuran matriksnya berubah - ubah dari ukuran aslinya (nilai
yang pertama) karena memang telah dilakukan resizing pada matriks citra. Sedan-
gkan hasil tampilan citranya adalah seperti gambar di bawah ini, dimana yang kiri
atas adalah citra asli, kanan atas adalah citra dengan skala 0.5, kiri bawah adalah
citra dengan skala 1.2, dan kanan bawah adalah citra dengan resize ukuran 100x70
pixel.
19

6. Filtering Citra
Filtering adalah suatu proses dimana diambil sebagian sinyal dari frekwensi tertentu
dan membuang sinyal pada frekwensi yang lain. Filtering pada citra juga menggu-
nakan prinsip yang sama, yaitu mengambil fungsi citra pada frekwensi - frekwensi
tertentu dan membuang fungsi citra pada frekwensi - frekwensi tertentu juga.
Di Matlab, untuk bisa melakukan filtering kita bisa menggunakan fungsi :

h = fspecial(type)
h = fspecial(type, parameters)

Untuk type-nya kita bisa menggunakan :

• ’average’ : adalah untuk filter rata - rata.


• ’disk’ : adalah untuk filter rata - rata lingkaran.
• ’gaussian’ : adalah untuk gaussian lowpass filter.
• ’laplacian’ : adalah untuk memperkirakan operator laplace 2-D.
• ’log’ : adalah untuk Laplacian of Gaussian filter
• ’motion’ : adalah untuk memperkirakan gerak linier kamera.
• ’prewitt’ : adalah untuk filter edge Prewitt.
• ’sobel’ : adalah untuk filter edge Sobel.
• ’unsharp’ : adalah untuk Unsharp contrast enhancement filter.

Untuk parameter - parameternya bisa dilihat pada HELP Matlab.


Berikut ini adalah contoh penerapannya pada citra digital :

clc;
clear;
A=imread(’logo-bitung.jpg’);
H1 = fspecial(’average’);
T1 = imfilter(A,H1,’replicate’);
H2 = fspecial(’disk’);
T2 = imfilter(A,H2,’replicate’);
H3 = fspecial(’gaussian’);
T3 = imfilter(A,H3,’replicate’);
B=rgb2gray(A);
subplot(2,2,1)
imshow(A)
subplot(2,2,2)
imshow(T1)
subplot(2,2,3)
imshow(T2)
subplot(2,2,4)
imshow(T3)
20

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri atas adalah gambar asli, di sebelah kanan atas adalah
gambar dengan filter ’average’, di sebelah kiri bawah adalah gambar dengan filter
’disk’, sedangkan yang kanan bawah adalah gambar dengan filter ’gaussian’.

Contoh - contoh di atas adalah untuk yang tidak menggunakan parameter. Untuk
yang menggunakan parameter akan dicoba langsung pada contoh di bawah ini :

clc;
clear;
A=imread(’logo-bitung.jpg’);
H1 = fspecial(’motion’,20,45);
T1 = imfilter(A,H1,’replicate’);
H2 = fspecial(’log’, [4 4], 0.4);
T2 = imfilter(A,H2,’replicate’);
H3 = fspecial(’laplacian’, 0.25);
T3 = imfilter(A,H3,’replicate’);
B=rgb2gray(A);
subplot(2,2,1)
imshow(A)
subplot(2,2,2)
imshow(T1)
subplot(2,2,3)
imshow(T2)
subplot(2,2,4)
imshow(T3)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri atas adalah gambar asli, di sebelah kanan atas adalah
gambar dengan filter ’motion’ dengan parameternya, di sebelah kiri bawah adalah
gambar dengan filter ’log’ dengan parameternya, sedangkan yang kanan bawah
adalah gambar dengan filter ’laplacian’ juga dengan parameternya.
21

7. Menambahkan Gangguan (Noise) pada Citra


Untuk bisa menambahkan gangguan (noise) pada citra digital kita bisa menggu-
nakan fungsi :

J = imnoise(I,type)
J = imnoise(I,type,parameters)

"I" merupakan matriks penyusun citra, "type" merupakan jenis metode penamba-
han gangguan yang kita gunakan, sedangkan "parameters" merupakan parameter -
parameter yang dipakai. Untuk "type" yang bisa dipakai adalah :

• ’gaussian’ : Gangguan Gaussian putih dengan mean dan variance yang tetap.
• ’localvar’ : Gangguan Zero-mean Gaussian putih dengan variance intensity-
dependent.
• ’poisson’ : Gangguan poison
• ’salt & pepper’ : Gangguan pixel on dan off.
• ’speckle’ : Gangguan Multiplicative.

Sedangkan untuk parameter - parameternya silahkan dilihat pada HELP Matlab.


Berikut ini adalah contoh penggunaannya pada citra digital :

clc;
clear;
RGB=imread(’logo-bitung.jpg’);
N1=imnoise(RGB,’gaussian’);
N2=imnoise(RGB,’salt & pepper’);
N3=imnoise(RGB,’speckle’);
subplot(2,2,1)
imshow(RGB)
subplot(2,2,2)
imshow(N1)
22

subplot(2,2,3)
imshow(N2)
subplot(2,2,4)
imshow(N3)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri atas adalah gambar asli, di sebelah kanan atas adalah
gambar dengan noise ’gaussian’ , di sebelah kiri bawah adalah gambar dengan
noise ’salt & pepper’, sedangkan yang kanan bawah adalah gambar dengan noise
’speckle’.

8. Histogram Citra
Histogram citra adalah grafik yang menggambarkan penyebaran nilai intensitas
pixel dari suatu citra. Histogram dapat menjadi penunjuk kadar kecerahan (bright-
ness) dan kontras citra. Normalnya nilai histogram dari suatu citra adalah 0-255,
begitu pula dengan histogram citra bawaan dari Matlab. Untuk bisa menampilkan
histogram citra, maka digunakan fungsi :

imhist(Matriks-Citra)

Perlu diperhatikan bahwa imhist hanya dapat digunakan untuk matrik image 1 di-
mensi sehingga bila diimplementasikan pada matriks gambar maka hanya berupa
matriks merah saja, hijau saja, biru saja atau grayscale. Berikut ini adalah contoh
lengkapnya ketika diterapkan dalam sebuah citra digital.

clc;
clear;
A=imread(’logo-bitung.jpg’);
B=rgb2gray(A);
subplot(1,2,1)
imshow(B)
subplot(1,2,2)
imhist(B)
23

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri adalah gambar citra grayscale, sedangkan yang di se-
belah kanan adalah histogramnya.

Nah, bila tadi hanya bisa menampilkan histogram dari 1 matriks citra, maka den-
gan memanfaatkan fungsi imhist() kita juga bisa menampilkan histogram dari 3
matriks citra sekaligus. Fungsi imhist() selain mampu menampilkan histogram dari
matriks citra, fungsi ini juga mampu untuk menghitung besarnya histogram citra.
Kemampuan inilah yang bisa kita manfaatkan untuk menampilkan histogram dari
keseluruhan matriks penyusun citra. Kode programnya adalah sebagai berikut :

clc;
clear;
A=imread(’logo-bitung.jpg’);%Membaca file citra
red=A(:,:,1);%Mengambil matriks penyusun citra merah
green=A(:,:,2);%Mengambil matriks penyusun citra hijau
blue=A(:,:,3);%Mengambil matriks penyusun citra biru
hred=imhist(red);%Menghitung histogram matriks citra biru
hgreen=imhist(green);
hblue=imhist(blue);
range=0:255;
subplot(1,2,1)
imshow(A)
subplot(1,2,2)
%Plot histogram matriks citra merah
plot(range,hred,’Color’,’red’);
hold on
plot(range,hgreen,’Color’,’green’);
plot(range, hblue,’Color’,’blue’);
24

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri adalah gambar citra RGB (berwarna), sedangkan yang
di sebelah kanan adalah histogramnya.

9. Deteksi Tepi Seleksi objek biasanya selanjutnya dilakukan langkah deteksi tepi
dalam proses pengolahan citra, di MATLAB proses pendeteksian tepi dilakukan
dengan fungsi :

BW = edge(I)
BW = edge(I,’Metode’)

"I" merupakan matriks penyusun citra (harus 1 matriks). Untuk "Metode" ada be-
berapa metode yang bisa dipakai yakni sobel, prewitt, roberts, Canny, laplacian of
gaussian, dan zero cross. Yang penting diperhatikan pada deteksi tepi bahwa hanya
dapat dilakukan menggunakan citra grayscale atau citra 2-D.
Berikut ini adalah contoh penggunaan fungsi edge() pada citra digital :

clc;
clear;
A=imread(’logo-bitung.jpg’);
I=rgb2gray(A);
E1=edge(I);
E2=edge(I,’prewitt’);
E3=edge(I,’Canny’);
subplot(2,2,1)
imshow(I)
subplot(2,2,2)
imshow(E1)
subplot(2,2,3)
25

imshow(E2)
subplot(2,2,4)
imshow(E3)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri atas adalah gambar citra grayscale, sedangkan yang di
sebelah kanan atas adalah gambar hasil deteksi tepi tanpa menggunakan metode,
bawah kiri adalah hasil deteksi tepi menggunakan metode ’prewitt’, sedangkan
bawah kanan adalah hasil deteksi tepi menggunakan metode ’Canny’.

10. Convert RGB ke NTSC


Selain warna RGB yang membagi citra menjadi 3 matriks yakni matriks R(Red),
matriks G(Green), dan matriks B(Blue), citra juga dapat dibagi ke dalam matriks
lain yakni Y, I dan Q yang merupakan komponen warna NTSC. Untuk bisa melakukan
konversi RGB ke NTSC di Matlab sangatlah mudah karena memang disediakan
fungsi khusus untuk melakukan konversi ini, yaitu :

YIQ = rgb2ntsc(RGB)

Berikut ini adalah contoh penerapan fungsi rgb2ntsc(RGB) dalam citra digital ;

clc;
clear;
RGB=imread(’logo-bitung.jpg’);
NTSC=rgb2ntsc(RGB);
Y=NTSC(:,:,1);
26

I=NTSC(:,:,2);
Q=NTSC(:,:,3);
subplot(2,2,1)
imshow(NTSC)
subplot(2,2,2)
imshow(Y)
subplot(2,2,3)
imshow(I)
subplot(2,2,4)
imshow(Q)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri atas adalah gambar citra dengan warna NTSC, sedan-
gkan yang di sebelah kanan atas adalah gambar citra Y, bawah kiri adalah gambar
citra I, sedangkan bawah kanan adalah gambar citra Q.

Nah, untuk melakukan hal sebaliknya, yakni mengkonversi NTSC ke RGB kita bis
menggunakan fungsi :

RGB = ntsc2rgb(YIQ)

11. Convert RGB ke YBcBr


Selain RGB dan NTSC, ada lagi warna YBcBr. Seperti halnya RGB dan NTSC,
warna YBcBr juga membagi citra berwarna ke dalam 3 matriks, yaitu "Y", "Bc",
dan "Br". Di Matlab sangatlah mudah mengkonversi warna RGB ke dalam warna
YBcBr karena memang matlab sudah menyediakannya dengan fungsi :
27

YCBCR = rgb2ycbcr(RGB)

Berikut ini adalah contoh penerapannya dalam citra digital :

clc;
clear;
RGB=imread(’logo-bitung.jpg’);
YCBCR = rgb2ycbcr(RGB);
Y=YCBCR(:,:,1); %Ekstraksi matriks Y
Cb=YCBCR(:,:,2); %Ekstraksi matriks Bc
Cr=YCBCR(:,:,3); %Ekstraksi matriks Br
subplot(2,2,1)
imshow(YCBCR)
subplot(2,2,2)
imshow(Y)
subplot(2,2,3)
imshow(Cb)
subplot(2,2,4)
imshow(Cr)

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana
gambar yang di sebelah kiri atas adalah gambar citra dengan warna YCbCr, sedan-
gkan yang di sebelah kanan atas adalah gambar citra Y, bawah kiri adalah gambar
citra Cb, sedangkan bawah kanan adalah gambar citra Cr.

Kemudian, untuk melakukan hal sebaliknya, yakni mengkonversi YCbCr ke RGB


kita bisa menggunakan fungsi :

RGB = ycbcr2rgb(YCBCR)
28

4.4 Contoh Aplikasi yang Memanfaatkan Pengolahan Citra


Dengan pengolahan Citra, banyak aplikasi(terapan) yang bisa kita gunakan mis-
alkan saja pattern recognition (pengenalan pola), perbaikan citra, normalisasi citra, dan
lain - lain. Adapun alikasi pengolahan citra yang akn dibahas di sini tidak hanya dibuat
dengan menggunakan M-File saja, akan tetapi dibuat dengan menggunakan GUI (Graphic
User Interface) yang akan memudahkan user untuk memakai aplikasi.
Kode program yang akan ditampilkan di sini adalah kode program yang terletak
pada tombol (button) dan dituliskan di bawah kode program tertentu. Misalkan yang
dijelaskan adalah kode program pada tombol btnVid_on, maka kode program yang dita-
mpilkan adalah kode program setelah kode program di bawah ini.

% --- Executes on button press in btnVid_on.


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

Berikut ini adalah beberapa aplikasi dari pengolahan citra :

1. Aplikasi untuk Kompresi Citra Digital


Kompresi citra adalah memperkecil ukuran (besar file) citra digital dengan cara
mengurangi detail citra. Dengan dilakukan kompresi, maka ukuran citra akan men-
jadi lebih kecil sehingga akan bisa mempercepat proses transfer file.

(a) Desain Tampilan


Desain tampilan yang dibuat adalah sebagai berikut :

Dari gambar di atas terlihat beberapa component yang dipakai, yaitu :


• axes yang dipakai ada 2 yaitu : yang sebelah kiri dengan Tag "axes1" di-
gunakan untuk menampilkan citra input, kemudian yang sebelah kanan
dengan Tag "axes2" digunakan untuk menampilkan citra yang sudah
dikompress.
29

• Pop-up Menu yang dipakai hanya 1 buah dengan Tag Popup dan string-
nya diisi dengan :
25
50
75
100

Ini merupakan pilihan - pilihan yang kualitas dari citra yang akan disim-
pan dalam persen.
• Button yang dipakai sebanyalk 3 buah yaitu :
– Button dengan Tag btnOpen dan string OPEN digunakan untuk mem-
buka file citra yang akan dikompress dan menampilkannya pada "axes1".
– Button dengan Tag btnKompress dan string KOMPRESS digunakan
untuk melakukan proses kompresi citra digital kemudian menampilkan-
nya pada "axes2".
– Button dengan Tag btnKeluar dan string KELUAR digunakan untuk
keluar dari aplikasi.
(b) Kode Program
i. Tombol "OPEN"
[nama_file1, nama_path1]=uigetfile ( ...
{’*.jpg’,’File JPEG(*.jpg)’;
’*.png’,’File PNG(*.png)’;...
’*.bmp’,’File BMP(*.bmp)’;...
’*.*’,’Semua file(*.*)’},...
’Buka File Citra Asli’);
if ~isequal(nama_file1, 0)
handles.data1=imread(fullfile(nama_path1,...
nama_file1));
guidata(hObject,handles);
handles.current_data1=handles.data1;
axes(handles.axes1);
imshow(handles.current_data1);
else
return;
end
Keterangan :
• uigetfile() : merupakan fungsi untuk menampilkan tampilan GUI un-
tuk mengambil file.
• isequal(a,b) : merupakan fungsi untuk menentukan ketidaksamaan
2 objek. Dalam hal ini tentu saja ketidaksamaan antara a dengan b.
ii. Tombol "KOMPRESS"
val=get(handles.Popup,’value’);
str=get(handles.Popup,’string’);
30

kualitas = str2num(str{val});

[nama_file_simpan, path_simpan]=uiputfile(...
{’*.jpg’,’File JPEG(*.jpg)’;
’*.png’,’File PNG(*.png)’;...
’*.bmp’,’File BMP(*.bmp)’;...
’*.*’,’Semua file(*.*)’},...
’Menyimpan File Hasil Kompresi’);
if ~isequal(nama_file_simpan,0)
imwrite(handles.data1,fullfile(path_simpan,...
nama_file_simpan),’quality’,kualitas);
citra_kompres=imread(fullfile(path_simpan,...
nama_file_simpan));
axes(handles.axes2);
imshow(citra_kompres);
end
Keterangan :
• val=get(handles.Popup,’value’) : digunakan untuk mengambil ’value’(nilai)
dari "Pop-up Menu" dengan Tag Popup dan menyimpannya dalam
variabel val.
• str=get(handles.Popup,’string’) : digunakan untuk mengambil string
dari "Pop-up Menu" dengan Tag Popup.
• strval : digunakan untuk mengambil string dengan value tertentu.
• str2num() : digunakan untuk merubah nilai string menjadi nilai nu-
merik.
• imwrite() : digunakan untuk menyimpan citra.
iii. Tombol "KELUAR"
button = questdlg(’Apakah anda mau keluar ?’, ...
’Konfirmasi Keluar’,’Ya’,’Tidak’,’Tidak’);
switch button
case ’Ya’,
clc;
close;
case ’Tidak’,
quit cancel;
end
Keterangan :
• button = questdlg(’Apakah anda mau keluar ?’,...
’Konfirmasi Keluar’,’Ya’,’Tidak’,’Tidak’);
digunakan untuk menampilkan tampilan GUI untuk menampilkan
pertanyaan pada use beserta jawabannya. Tentu saja di sini pertanyaan-
nya adalah "Apakah anda mau keluar ?" dengan jawaban "Ya" dan
"Tidak" dengan default jawaban pada "Tidak". Sedangkan nama GUI-
nya adalah "Konfirmasi Keluar".
31

(c) Cara Penggunaan


Cara menggunakan aplikasi ini sangatlah mudah, pertama - tama buka file
citra dengan klik tombol "OPEN", lalu pilih citra yang mau dikompress, lalu
klik OK. Setelah file citra yang dibuka ditampilkan pada axes1 (sebelah kiri),
pilih kualitas citra yang akan dikompress pada "Pop-up Menu". Setelah itu
untuk melakukan kompresi, tinggal klik tombol "KOMPRESS" lau simpan
citra yang dikompress dengan nama dan format yang kamu inginkan, lalu klik
OK.
Untuk keluar dari aplikasi, tinggal klik tombol "KELUAR" lalu klik tombol
"Ya". Sedangkan untuk membatalkan, klik tombol "Tidak".
Gambar di bawah ini merupakan gambar hasil running dari "Aplikasi untuk
Kompresi Citra Digital" dengan kualitas yang dipilih adalah 50.

2. Aplikasi untuk Mengambil Foto Melalui Webcam

Dari namanya, tentu saja untuk bisa menjalankan aplikasi ini kita membutuhkan
webcam yang terinstal pada komputer yang kita gunakan.

Dengan toolbox image processing yang ada di Matlab kita bisa melakukan pengam-
bilan foto melalui webcam yang kita punya. Cara kerja aplikasi ini adalah dengan
mengambil 1 frame dari gambar yang ditangkap melalui webcam dan videonya
ditampilkan di layar. Ukuran dari gambar yang diambil tentu saja sesuai dengan
resolusi dari webcam yang dipakai untuk menampilkan video.

Resolusi - resolusi webcam (dalam pixel) yang dipakai pada aplikasi ini ada 5
macam, yaitu 640x480, 352x288, 320x240, 176x144, 160x120.

(a) Desain Tampilan


Desain tampilan yang dibuat adalah sebagai berikut :
32

Dari gambar di atas terlihat beberapa component yang dipakai, yaitu :


• axes yang dipakai adalah 2 axes yaitu axes1 untuk menampilkan video
dari webcam dan axes2 untuk menampilkan hasil capture video.
• Pop-up Menu yang dipakai hanya 1 dengan nama (Tag) popup dan string-
nya diisi dengan :
YUY2_640x480
YUY2_352x288
YUY2_320x240
YUY2_176x144
YUY2_160x120

Ini merupakan pilihan - pilihan yang menentukan resolusi video yang


akan ditampilkan pada aplikasi.
• Edit Text yang dipakai hanya 1 dengan nama (Tag) txtUkuran dan string
kosong digunakan untuk menampilkan ukuran dari gambar hasil capture
video.
• Button atau tombol yang dipakai sejumlah 5 buah, yakni :
– Button dengan Tag btnVid_on dan string Video On digunakan untuk
menghidupkan webcam dan menampilkannya dalam aplikasi.
– Button dengan Tag btnVid_off dan string Video Off digunakan un-
tuk mematikan webcam.
– Button dengan Tag btCapture dan string Capture digunakan untuk
mengambil gambar (capture) dari webcam yang sedang hidup.
– Button dengan Tag btnSave dan string Save digunakan untuk meny-
impan hasil capture.
– Button dengan Tag btnExit dan string Exit digunakan untuk keluar
dari aplikasi.
(b) Kode Program
Kode program di sini akan dijelaskan berdasarkan tombol - tombol yang di-
pakai, yaitu :
33

i. Tombol "Video On"


global vid
val=get(handles.popup,’value’);
str=get(handles.popup,’string’);
selected_string = str{val};

vid = videoinput(’winvideo’,1,selected_string);
set(vid,’ReturnedColorSpace’,’rgb’);
vidRes = get(vid, ’VideoResolution’);
imWidth = vidRes(1);
imHeight = vidRes(2);
nBands = get(vid, ’NumberOfBands’);
hImage = image( zeros(imHeight, imWidth, nBands) );
axes(handles.axes1);
preview(vid, hImage);
Keterangan :
• global vid : digunakan untuk menjadikan variabel vid menjadi vari-
abel global yang artinya variabel ini akan dapat diakses oleh tombol
- tombol yang lain
ii. Tombol "Video Off"
global vid
delete(vid);
iii. Tombol "Capture"
global vid capture
capture= getsnapshot(vid);
axes(handles.axes2);
imshow(capture);
a=size(capture);
set(handles.txtUkuran,’string’,num2str(a))
Keterangan :
• capture= getsnapshot(vid); : digunakan untuk untuk mengambil 1
frame dari video yang ditangkap oleh webcam pada saat itu juga ke-
mudian menyimpannya dalam variabel capture.
• num2str() : digunakan untuk merubah nilai numerik menjadi nilai
string karena memang untuk menampilkan nilai pada "Edit Text",
nilai yang mau ditampilkan harus berupa string.
• set(handles.txtUkuran,’string’,num2str(a)) : digunakan untuk men-
setting string dari "Edit Text" dengan Tag "txtUkuran" yang ke-
mudian diisi dengan nilai dari variabel a.
iv. Tombol "Save"
global capture
[nama_file_simpan, path_simpan]=uiputfile(...
{’*.jpg’,’File JPEG(*.jpg)’;
34

’*.png’,’File PNG(*.png)’;...
’*.bmp’,’File BMP(*.bmp)’;...
’*.*’,’Semua file(*.*)’},...
’Menyimpan File Hasil Capture’);
if ~isequal(nama_file_simpan,0)
imwrite(capture,fullfile(path_simpan,...
nama_file_simpan));
end
v. Tombol "Exit"
close;
(c) Cara Penggunaan
Cara menggunakan aplikasi ini sangatlah mudah.
• Pertama - tama pilih resolusi video yang diinginkan melalui "Pop-up
Menu".
• Untuk menghidupkan Webcam, klik tombol "Video On". Gambar yang
ditangkap webcam akan langsung ditampilkan pada "axes1" (sebelah
kiri).
• Untuk meng-capture gambar, klik tombol "Capture". Gambar hasil cap-
ture akan langsung ditampilkan pada "axes2" (sebelah kanan) dan uku-
ran matriksnya ditampilkan di bawahnya pada "Edit Text".
• Untuk menyimpan hasil capture, klik tombol "Save", beri nama dan pilih
format yang diinginkan, kemudian klik "OK".
• Untuk mematikan webcam, tinggal klik tombol "Video Off".
• Untuk keluar dari apilkasi, klik tombol "Exit".
Gambar di bawah ini merupakan gambar hasil running dari "Aplikasi untuk
Mengambil Gambar Melalui Webcam".

3. Sistem Pengenalan Wajah Menggunakan Histogram Citra


Tentunya nilai histogram antara suatu citra dengan citra yang lain yang berbeda
tentunya juga akan berbeda pula. Akan tetapi bila citra tersebut masih merupakan
kelompok citra yang mempunyai kemiripan (misalkan sekumpulan citra wajah dari
35

satu orang) pastilah perbedaan histogram citra dari citra - citra tersebut tidak terlalu
jauh. Nah, konsep inilah yang akan dipakai untuk Sistem Pengenalan Wajah.

(a) Desain Tampilan Desain tampilan yang dibuat adalah sebagai berikut :

Dari gambar di atas terlihat beberapa component yang dipakai, yaitu :


• "axes" yang digunakan ada 2 buah, yang sebelah kiri dengan Tag "axes1"
digunakan untuk menampilkan citra wajah input, kemudian yang sebelah
kanan dengan Tag "axes2" digunakan untuk menampilkan citra wajah
hasil pengenalan.
• "button" yang digunakan ada 4 buah, yakni :
– Button dengan Tag btnOpen dan string OPEN digunakan untuk mem-
buka file citra wajah dan menampilkannya pada "axes1".
– Button dengan Tag btnUpdate dan string UPDATE digunakan untuk
mencari nilai histogram dari masing - masing citra wajah yang ada
dalam database dan menyimpannya dalam file "DFace.mat".
– Button dengan Tag btnKenali dan string KENALI digunakan un-
tuk melakukan prose pengenalan wajah dan kemudian menampilkan
hasilnya pada "axes2".
– Button dengan Tag btnKeluar dan string KELUAR digunakan untuk
keluar dari aplikasi.
(b) Kode Program
i. Tombol "OPEN"
global I
[nama_file1, nama_path1]=uigetfile ( ...
{’*.bmp’,’File BMP(*.bmp)’;...
’*.jpg’,’File JPEG(*.jpg)’;...
’*.png’,’File PNG(*.png)’;...
36

’*.*’,’Semua file(*.*)’},...
’Buka File Citra Asli’);
if ~isequal(nama_file1, 0)
I=imread(fullfile(nama_path1,nama_file1));
axes(handles.axes1);
imshow(I);
else
return;
end
ii. Tombol "UPDATE"
a=size(dir(’DBase’));
jum_folder=a(1)-2;
AHist=0:255;
for i=1:jum_folder
k=1;
for j=1:5
I=imread(strcat(’DBase/S’,int2str(i),...
’/’,int2str(k),’.bmp’));
Hist=imhist(I);
AHist=[AHist;Hist’];
k=k+2;
end
end
save ’DFace’ AHist;
msgbox(’Update Berhasil’)

Keterangan :
• dir(’DBase’) : digunakan untuk melakukan listing direktory pada
folder "DBase". Biasanya direktori yang di list adalah sejumlah file
+ 2.
• strcat(’DBase/’,jum_folder) : digunakan untuk menggabungkan an-
tara string yang ditulis secara langsung dengan variabel. Dalam con-
toh di samping variabelnya adalah jum_folder.
• save ’DFace’ AHist : digunakan untuk menyimpan variable AHist ke
dalam file "DFace.mat"
• msgbox(’Update Berhasil’) : digunakan untuk menampilkan tampi-
lan GUI berupa Message Box dengan tulisan "Update Berhasil".
iii. Tombol "KENALI"
global I
hist=imhist(I)’;
load DFace;
[x y]=size(AHist);
jum=0;
for i=2:x
37

for j=1:y
jum = jum + (hist(j) - AHist(i,j))^2;
end
Jarak(i-1,1) =sqrt(jum);
jum = 0;
end

[temp M] = min(Jarak);
Folder=ceil(M/5);
axes(handles.axes2);
imshow(strcat(’DBase/S’,int2str(Folder),’/5.bmp’))
Keterangan :
• [temp M] = min(Jarak) : digunakan untuk menentukan nilai minimal
dari sekelompok nilai (data). Dalam contoh di samping, sekelompok
nilai (data) tersebut disimpan dalam variabel Jarak. Hasil minimal-
nya disimpan dalam variabel temp, sedangkan posisinya dalam data
disimpan dalam variabel M.
• ceil(val) : digunakan untuk membulatkan ke atas dari nilai yang ter-
dapat pada variabel val. Misalkan 2.2 akan dibulatkan ke 3, 4.9 akan
dibulatkan ke 5, dan sebagainya.
iv. Tombol "KELUAR"
button = questdlg(’Apakah Anda ingin keluar?’, ...
’Konfirmasi Keluar’,’Ya’,’Tidak’,’Tidak’);
switch button
case ’Ya’,
clc;
close;
case ’Tidak’,
quit cancel;
end
(c) Cara Penggunaan
Cara menggunakan aplikasi "Pengenalan Wajah" ini adalah sebagai berikut :
• Sebelum menggunakan aplikasi "Pengenalan Wajah" ini, setting terlebih
dahulu data wajah yang akan kita pakai. Untuk setiap orangnya diam-
bil 10 sample wajah dan beri nama dengan nama "1.bmp","2.bmp", dan
seterusnya sampai "10.bmp", kemudian dimasukkan dalam folder yang
diberi nama "Si" dimana i adalah orang yang ke-... Jadi jika ada 10 orang
berarti kita buat folder dengan nama "S1", "S2", "S3", dan seterusnya
sampai "S10". Kemudian kesemua folder yang kita buat dimasukkan ke
dalam folder yang diberi nama "DBase".
• Untuk menggunakan aplikasi ini mudah sekali. Pertama - tama klik tombol
"UPDATE" untuk mencari nilai histogram dari masing - masing citra
wajah yang ada dalam folder "S1", "S2", dan seterusnya lalu nilainya
akan disimpan dalam file "DFace.mat". Tidak semua citra wajah dicari
nilai histogramnya, hanya yang bernomor ganjil saja yang dicari nilainya.
Untuk "UPDATE" ini cukuplah sekali saja diklik selama database wajah
yang dipakai tidak berubah.
• Kemudian untuk melakukan proses pengenalan klik tombol "OPEN",
kemudian pilih gambar wajah yang tersimpan dalam database wajah, lalu
klik "OK". Setelah gambar yang kita pilih tampil pada "axes" yang se-
belah kiri, kemudian klik tombol "KENALI". Hasil wajah yang dikenali
akan ditampilkan pada "axes" sebelah kanan.
• Untuk keluar dari aplikai, tinggal klik tombol "KELUAR" lalu klik "Ya".
Untuk membatalkan klik "Tidak".
Gambar di bawah ini adalah gambar hasil running dari aplikasi "Pengenalan
Wajah Menggunakan Histogram Citra".

Bagi yang menginginkan Source Code dari aplikasi - aplikasi di atas, silahkan
menghubungi penulis. Contact person dari penulis ada di halaman Biografi di
bagian terakhir.

38
39

Bibliography

[1] Siang, J.J. Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab.
Penerbit ANDI, Yogyakarta, 2009.

[2] Siang, J.J. Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab.
Penerbit ANDI, Yogyakarta, 2009.

[3] Mabrur, Andik. Pengenalan Wajah Menggunakan Metode Adjacent Pixel Intensity
Difference Quantization Histogram Generation. Tugas Akhir Jurusan Matematika-
ITS, Surabaya, 2011.

[4] Iqbal, Muhammad. Dasar Pengolahan Citra menggunakan MATLAB. IPB, Bogor,
2009.

[5] AT&T Laboratories Cambridge, The Database of Faces,


<URL:http://www.cl.cam.ac.uk/research/dtg/ attarchive/facedatabase.html>
40

BIOGRAFI PENULIS

Nama__ : Andik Mabrur, S.Si

Alamat : RT 02, RW 06, Desa Bendilwungu, Kecamatan Sumbergempol, Kabupaten


Tulungagung 66291

HP____ : 085645246656

Email_ : andik.math@gmail.com

Blog__ : its-matematika.blogspot.com

Motto_ : "Berusaha Bermanfaat untuk Orang Lain"

Penulis lahir pada tanggal 15 Oktober 198x di kota yang begitu terkenal dengan keraji-
nan marmernya yakni Tulungagung. Penulis menempuh pendidikan TK, SD, MTs, dan
SMK di Kota Tulungagung dari tahun 1992 sampai dengan tahun 2005. Setelah itu pada
tahun 2006 penulis melanjutkan kuliah di Jurusan Matematika Institut Teknologi Sepuluh
Nopember Surabaya. Pada saat kuliah itulah penulis banyak bergelut dengan program
Matlab sampai Tugas Akhir yang dikerjakannyapun juga menggunakan bantuan Matlab.
Tugas Akhir yang dikerjakan penulis adalah berhubungan citra dan juga berhubungan
dengan pengenalan pola yang berjudul Pengenalan Wajah Menggunakan Metode Ad-
jacent Pixel Intensity Difference Quantization Histogram Generation. Penulis saat ini
sudah menyelesaikan pendidikan S1-nya dan sudah diwisuda pada bulan Maret 2011.

Penulis juga pernah menjadi Juara I "Lomba Cipta Logo Arek ITS CAK!" dan sampai
sekarang logo yang dibuatnya tetap dipakai oleh ITS sebagai logo kemahasiswaan. Di
bawah ini adalah gambar logo tersebut.

Anda mungkin juga menyukai