Вы находитесь на странице: 1из 69

Laboratorium Rekayasa Perangkat Lunak

No. Dokumen
Edisi
MODUL
Revisi
PRAKTIKUM
Berlaku Efektif
Halaman
DAFTAR ISI

:
:
:
:
:

Modul Pengolahan Citra

IK-GKM-Fasilkom-TI-011-PC
01
01
30 September 2013
ii dari ii

KATA PENGANTAR....................................................................................................................i
DAFTAR ISI................................................................................................................................ii
MODUL I

PENGENALAN MATLAB & MATRIKS DASAR.........................................1

MODUL II

PEMROGRAMAN M-FILE & MATRIKS LANJUTAN...............................9

MODUL III

REPRESENTASI MATRIKS KE CITRA......................................................18

MODUL IV

PEMROGRAMAN IMAGE I..........................................................................23

MODUL V

PEMROGRAMAN IMAGE II........................................................................29

MODUL VI

IMAGE FILTERING.......................................................................................36

MODUL VII DESAIN DAN PEMROGRAMAN GUI MATLAB.......................................42


MODUL VIII PEMROGRAMAN CITRA DENGAN GUI MATLAB................................49
MODUL IX

PENGATURAN WARNA PADA CITRA DIGITAL.....................................53

MODUL X

KOMPRESI CITRA DAN TRANSFORMASI GEOMETRI.......................59

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 0 dari 68

No. Dokumen
: IK-GKM-ILK-FMIPA-002-BP I
Laboratorium Rekayasa Perangkat Lunak
Modul Pengolahan Citra
Edisi
: 01
MODUL
Revisi
: 01
PRAKTIKUM
Berlaku Efektif
: 5 Maret 2012
MODUL
I
Halaman
: ii dari ii
PENGENALAN MATLAB
DAN
DAFTAR ISI MATRIKS DASAR
I. Tujuan
1. Praktikan mengenal lingkungan pemograman MATLAB
2. Praktikan mengerti tentang cara mendefenisikan matriks menggunakan MATLAB
II. Teori
1.1 TEORI MATLAB
MATLAB (Matriks Laboratory) adalah lingkungan komputasi numerik dan juga sebuah bahasa
pemrograman

yang

diciptakan

oleh

The

Mathworks

(www.mathworks.com)

yang

memungkinkan untuk memanipulasi matriks, menampilkan grafik fungsi data, implementasi


algoritma, menciptakan User Interface, dan berkomunikasi dengan program dari bahasa lainnya.
1.2 SEJARAH MATLAB
MATLAB diciptakan oleh Cleve Moler, Badan Pengurus Departemen Computer Science di
University of New Mexico pada akhir tahun 1970. Jack Little, seorang insinyur,
mengembangkannya bersama Moler dan Steve Bangert di Stanford University tahun 1983
dengan menulis kembali MATLAB dalam bahasa C dan mendirikan The MathWorks tahun 1984
untuk terus mengembangkannya. Sekarang ini MATLAB digunakan dalam pembelajaran,
pengajaran aljabar linier, analisis numerik, dan yang paling populer adalah image processing.
1.3 INTERFACE
Matlab memiliki 3 interface Utama:
1. Command Window
Jendela utama untuk menuliskan statement/perintah program matlab dalam bentuk
command line. Command window digunakan untuk memasukan variabel dan
menjalankan function atau M-files. Setiap perintah yang ditulis di command window
langsung ditampilkan. Bila perintah kita salah akan keluar pesan error.
2. Launch Pad / Workspace

Launch Pad: Short cut untuk berbagai sub program matlab.

Workspace: Workspace berfungsi untuk menampilkan seluruh variabel-variabel yang


sedang aktif padasaat pemakaian matlab. Apabila variabel berupa data matriks berukuran

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 1 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

besar maka user dapatmelihat isi dari seluruh data dengan melakukan double klik pada
variabel tersebut. Matlab secara otomatis akan menampilkan window array editor
yang berisikan data pada setiap variabel yang dipilih user.
3. Command History / Current Directory

Command History: jendela untuk menampilkan statement/perintah program yang


diinputkan dalam command window. Statemen yang dibuat di command window
tersimpan semuanya di command history. Di command history kita dapat melihat
statemen yang lalu dan mengkopi lalu mengeksekusi statemen yang dipilih.

Current Directory: Window ini menampilkan isi dari direktori kerja saat menggunakan
matlab. Kita dapat mengganti direktori ini sesuai dengan tempat direktori kerja yang
diinginkan. Default dari alamat direktori berada dalam folder works tempat program files
Matlab berada.
Workspac
e

Command Window

Command History

Gambar 1.1 Tampilan Awal MATLAB 6.0

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 2 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

1.4 VARIABEL & TIPE DATA


Aturan penggunaan variabel pada matlab:
1. Variabel tidak boleh memiliki karakter pertama berupa angka.
2. Matlab hanya mampu mengenali 31 karakter pertama pada variabel.
3. Variabel bersifat case sensitive.
Contoh command untuk mendefenisikan variabel:
>> a=12
>> b=2.67
>> kata='Saya sedang belajar Matlab'

Tipe-tipe data :
a. Logical

memiliki nilai 1 atau 0 yang merepresentasikan true atau false.

b. Char

string merupakan array dari karakter berukuran 1xn.


contoh : myStr = Saya sedang belajar MATLAB

c. Numeric

bilangan bulat bertanda dan tidak bertanda serta bilangan pecahan atau
mengambang dengan presisi tunggal maupun ganda.

d. Cell

array yang memuat tipe data yang berbeda.

e. Structure tipe data berorientasi array dengan field-field yang memiliki nama dan
memuat segala jenis data.
Untuk melihat semua variabel yang telah didefinisikan, dapat mengetikkan who atau
whos pada command window.
Untuk menghapus semua variabel yang telah didefinisikan, dapat mengetikkan clear
pada command window. Hal ini penting sebelum menulis kode program untuk memastikan tidak
ada variabel dari proses sebelumnya, karena matlab menampung semua variabel walaupun
berasal dari file yang berbeda.
Untuk melihat keterangan dari function di Matlab atau program yang kita buat digunakan
perintah : ' help function ' , sebagai contoh :
>>help plot
>>help imread

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 3 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

1.5 OPERATOR MATEMATIS


Operator matematis yang terdapat dalam matlab, adalah sebagai berikut:
Operator
+
*
.*
^
.^
\
/
.\
./
>>
>>
>>
>>

Arti
Penambahan
Pengurangan
Perkalian Matriks
Perkalian Array
Pemangkatan Matriks
Pemangkatan Array
Pembagian Matriks Kiri
Pembagian Matriks Kanan
Pembagian Array Kiri
Pembagian Array Kanan

a=12+2
b=35/5
c=a*b
x=2.67+6.72

Gunakan tanda titik koma ; untuk menahan command window untuk tidak
menampilkan hasil instruksi.
Default matlab menggunakan presisi 4 angka desimal. Hal ini dapat diganti dengan
command berikut:
>>format short

(4 presisi angka desimal)


>>format long

(16 presisi angka desimal)


>>format rat

(rational expression menampilkan angka sebagai bilangan pecahan)

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 4 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

1.6 FUNGSI MATEMATIS


Matlab memiliki banyak fungsi-fungsi built-in, beberapa diantaranya adalah:
>>Sqrt(x)

akar kuadrat

>>Rad2deg(x)

konversi dari radian ke derajat

>>Deg2rad(x)

konversi dari derajat ke radian

>>Sin(x)

fungsi sinus

>>Cos(x)

fungsi cosinus

>>Tan(x)

fungsi tangen

>>Round(x)

pembulatan nilai desimal

>>floor(x)

pembulatan nilai desimal ke bawah

>>ceil(x)

pembulatan nilai desimal ke atas

1.7 MATRIKS DASAR


1.7.1 Pendefinisian Matriks
Pendefinisian matriks dalam matlab dengan prototipe = nama_variabel [ x x x; x x x]
Spasi atau koma , menjadi pemisah antar kolom.
Titik koma ; menjadi pemisah antar baris.
>> A = [1 2 3;4 5 6;7 8 9]
>> B = [34, 545, 65;42, 53, 36]

1.7.2 Operator Matriks


Operator matematis yang ada pada tabel sebelumnya, dapat digunakan dalam operasi matriks,
dengan tambahan sebagai berikut:
Operator perkalian matriks ada 2 jenis : * dan .*
Operator * merupakan perkalian matriks. Dimana syaratnya banyaknya baris matriks pertama
harus sama dengan kolom baris kedua.
>>A=[1 2 3; 2 3 4];
>>B=[1 2 ; 1 2; 1 2];
>>A*B
Ans = 6 12
9 18

Operator .* merupakan perkalian array. Dimana setiap elemen akan dikalikan dengan elemen
lain. Ini bukan perkalian matriks.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 5 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

>>A=[1 2 3; 2 3 4];
>>B=[1 2 3; 1 2 3];
>>A.*B
Ans =
1 4 9
2 6 12

Jika sebuah matriks dioperasikan dengan vector 1 elemen, semua elemen dari matrik akan
dikenai operasi yang sama.
>> a=[2 3 4;9 0 1];
>> b=a+4
b =
6
7
8
13
4
5
>> c=b*3
c =
18
39

21
12

24
15

1.7.3 Pendefinisian Vektor


Vektor dapat dibangkitkan dengan fungsi : x=[x1:q:xe]
Dimana :

x=nama variabel
x1=elemen pertama
q=penambahan
xe=elemen terakhir

Contoh:
>>A=[1:1:10]
Ans =
1 2 3 4 5 6 7 8 9 10

1.7.4 Pengaksesan Elemen Matriks


Untuk pengaksesan/referensi pada elemen tertentu dalam sebuah matriks/vektor dapat dilakukan
dengan fungsi z=x(n,m)
Dimana :

z=nama variabel
n=posisi baris
m=posisi kolom

>>A=[1 2 3; 2 3 4];
>>A(2,3)

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 6 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Ans = 4

Untuk pengaksesan/referensi pada semua baris/kolom digunakan tanda : sebagai pengganti


posisi kolom/baris.
>>A=[1 2 3; 2 3 4;7 7 7];
>>A(2,:)
Ans =
2 3 4
>> B = A([1 3],[1 2])
Ans =
1 2
7 7
>> C = A([3 2 1],:)
Ans =
7 7 7
2 3 4
1 2 3
>> D = A(:,[3 2 1])
Ans =
3 2 1
4 3 2
1 7 7

1.7.5 Penambahan/Pengurangan Elemen Matriks


Setelah sebuah variabel didefenisikan dengan matriks, elemen baru dapat ditambahkan dengan
cara:

Penambahan baris:

>> a=[1 6 3; 3 8 2; -2 -5 -9];


>> a(4,:)=[1 1 1]
a =
1
6
3
3
8
2
-2
-5
-9
1
1
1

Penambahan kolom:

>> a=[1 6 3; 3 8 2; -2 -5 -9];


>> a(:,4)=[1; 1 ;1]
a =
1
6
3
1
3
8
2
1
-2
-5
-9
1

Pengurangan baris:

>> a=[1 6 3; 3 8 2; -2 -5 -9];


>> a(2,:)=[]
a =
1
6
3
-2
-5
-9

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 7 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Pengurangan kolom:

>> a=[1 6 3; 3 8 2; -2 -5 -9];


>> a(:,2)=[]
a =
1
3
3
2
-2
-9

1.7.6 Fungsi Untuk Pendefenisian Matriks Tertentu


Matlab menyediakan beberapa fungsi yang dapat digunakan untuk menghasilkan bentuk-bentuk
matriks yang diinginkan. Fungsi-fungsi tersebut antara lain:
zeros

: untuk membuat matriks yang semua elemennya bernilai 0.

ones

: matriks yang semua elemennya bernilai 1.

rand

: matriks dengan elemen random (0.0-1.0) ,menggunakan distribusi uniform.

randn

: matriks dengan elemen random (0.0-1.0),menggunakan distribusi normal.

eye

: untuk menghasilkan matriks identitas.

magic

: matriks dengan penjumlahan setiap kolom dan barisnya akan menghasilkan


nilai yang sama.

>> a =
a =
>> b
b
>> c
c

=
=
=
=

>> d =
d =

zeros(2,3)
0 0 0
0 0 0
ones(1,3)
1 1 1
rand(2,2)
0.9501 0.6068
0.2311 0.4860
eye(3,3)
1 0 0
0 1 0
0 0 1

TUGAS
1. Buat matriks sembarang dengan 3 baris dan 20 kolom (gunakan pendefenisian vektor).
2. Buat matriks random dimensi 6x5 dengan nilai tiap elemen 0-100 bilangan bulat (gunakan
fungsi rand(),perkalian matriks dan fungsi round()).

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 8 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

3. Dengan menggunakan cara yang sama seperti soal no.2, buat matriks random dengan
dimensi 10x10, nilai tiap elemen 0-255, bilangan bulat. Lalu manipulasi matriks agar nilai
elemen setiap awal dan akhir baris maupun kolom menjadi 0.
III.Tugas dan Latihan
1. Buatlah program untuk menghitung nilai akhir seorang mahasiswa, dengan ketentuan
sebagai berikut:
a. Nama mahasiswa,nilai keaktifan,nilai tugas dan nilai ujian di inputkan.
b. Proses yang dilakukan untuk mendapatkan nilai murni dari masing-masing nilai
adalah:
1) Nilai murni keaktifan = Nilai keaktifan X 20%
2) Nilai murni tugas = Nilai tugas X 30%
3) Nilai akhir adalah nilai murni keaktifan + Nilai murni tugas + Nilai murni ujian.
2. Buat sebuah program yang berisikan tentang implementasi salah satu rumus matematika
menggunakan bahasa C++.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 9 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL II
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMROGRAMAN M-FILE & MATRIKS LANJUTAN
TUJUAN :

Praktikan mengerti bagaimana cara menuliskan program MATLAB pada M-FILE

Praktikan memahami tentang matriks 3D

DASAR TEORI
2.1 PEMROGRAMAN M-FILE
Di dalam matlab, kita dapat menyimpan semua script yang akan digunakan dalam file pada
matlab dengan ekstensi .m. M-file dapat dipanggil dengan memilih menu File->New->M-file.

Gambar 2.1 Cara Membuka M-File Dengan Menu File->New->M-File.


Kode program dapat langsung diketik pada editor m-file. Untuk menjalankan program,
dapat dilakukan memalui salah satu dari cara berikut:

Tekan tombol F5

Klik menu : Debug Run

Dengan memanggil nama file dari command windows. Untuk hal ini, file m-file harus
disimpan pada direktori aktif matlab.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 10 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 2.2 Kompilasi program M-File dengan menu Debug Run


Directory aktif matlab

Gambar 2.3 Direktori Aktif MATLAB


*catatan: untuk menjalankan program, kode program harus di save terlebih dahulu. Nama file
tidak boleh berupa fungsi-fungsi yang terdapat di matlab, misalnya: sin.m, plot.m, axis.m, dll.
Contoh program m-file grafik_sinus.m:
Buka m-file baru, dengan menjalankan menu File New M-file. Pada jendela editor yang
terbuka, tuliskan kode berikut:
%Menampilkan grafik sinus
x = 0:360;
Radian = deg2rad(x);
y = sin(Radian);
plot(x,y);

lalu save sebagai grafik_sinus.m, dan tekan F5 untuk menjalankan program.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 11 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Penjelasan:
Pada baris pertama, x = 0:360 digunakan untuk menginisialisasikan variabel x dengan
sebuah vektor (matriks 1 baris) sebanyak 360 kolom. x akan berisi nilai [0,1,2,3,4,5...,360].
Selanjutnya Radian = deg2rad(x) adalah untuk mengkonversi x menjadi radian, lalu
hasilnya disimpan dalam variabel Radian. Fungsi sin(Radian) akan membuat valiabel y
berisi nilai-nilai sinus dari variabel Radian. Plot(x,y), akan menghasilkan figure/gambar
hasil konversi sinus, dari 0 sampai 360. Dimana x adalah nilai untuk sumbu horizontal, dan y
nilai untuk sumbu vertikal.

Gambar 2.4 Grafik Sinus

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 12 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

2.2 STATEMENT CONTROL


Matlab memiliki empat macam statement control yang dapat digunakan untuk mengatur aliran
data pada kode program yang akan dibuat.
2.2.1 If, Else, Elseif
Bentuk dasar penggunaan statement jenis ini adalah sebagai berikut:
if ekspresi1
statements1;
elseif ekspresi2
statements2;
else
statements3;
end

Ekspresi akan bernilai 1 jika benar dan bernilai 0 jika salah.


Contoh penggunaan:
a=15;
b=35;
if a > b
disp('a lebih besar dari b');
elseif a == b
disp('a sama dengan b');
else
disp('a lebih kecil dari b');
end

Fungsi disp() digunakan untuk menampilkan pesan pada command window.


2.2.2 Switch
Bentuk dasar penggunaan statement switch
switch switch_ekspresi
case case_ekspresi1
statement1
case case_ekspresi2
statement2
...
...
otherwise
statementN
end

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 13 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Contoh penggunaan:
a=8;
switch a;
case 1
disp('x
case {2,3,4}
disp('x
case 5
disp('x
otherwise
disp('x
end

is 1');
is 2, 3 or 4');
is 5');
is not 1, 2, 3, 4 or 5');

2.2.3 While
Statement while digunakan untuk aliran data yang bersifat perulangan.
Bentuk dasar penggunaan while
while ekspresi
statements
...
end

Contoh penggunaan:
x = 9
while x < 10
disp('nilai saat ini : ');
%tampilkan nilai x
x
%increment nilai x
x = x+1;
end

2.2.4 For
Bentuk dasar penggunaan bentuk for:
for index = start:increment:stop
statement
...
...
statement
end

Default dari nilai increment (penambahan nilai setiap perulangan) jika tidak ditentukan oleh
user adalah 1.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 14 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Contoh penggunaan :
for y = 1:10
a(y) = y^2;
a;
end

2.2.5 Operator
Berikut ini adalah jenis-jenis operator pada matlab yang dapat digunakan untuk operasi ekspresi
pada statement yang membutuhkan perbandingan seperti if atau while.
A<B
A>B
A<=B
A>=B
A==B
A~=B

A lebih kecil dari B


A lebih besar dari B
A lebih kecil atau sama dengan B
A lebih besar atau sama dengan B
A sama dengan B
A tidak sama dengan B

2.3 MATRIKS LANJUTAN


Pada modul 1, matriks yang didefenisikan merupakan matriks 2D, dimana dimensi tersebut
terdiri dari panjang dan lebar. Dalam pengolahan citra, sebuah gambar dipresentasikan oleh
sebuah matriks 3D, dengan tambahan dimensi ketiga yaitu kedalaman matriks, atau dapat
dianalogikan sebagai layer.

112 232 190 183 201 229 178


175 122
176167
123178
154179
112180
132181
165 187
184 198
123
156
157
168
198
211 200112
102232
108168
107198
108143
111165 176
143 165
176
123
154
112
123176
123123
112156
165157
154168
187198
156122 167
132 165
187
211
200
102
108
134 123178
154179
123180
156181
157184
168198 123
107 108
123
112
165
198111
143123
165
176
122
167
178175 112
190
183
201
229
178
154 187
156
134
123
154
123
179 180165
181154
184187
198156
123134
156123 154
156 157
198
143
165
176
157168
168123
198156
143157
165156
176157
112168 198
123 156
157
168
198
143
165
232 190 183165
201176
229176
178123
175154 112
176 123 156143
157
168
198
143
165102 108
132 165 187 211 200
176 107 108 111 123 123 143 165
Layer
176

Baris

Kolo
m
Gambar 2.5 Analogi Matriks 3D
2.3.1 Pendefinisian Matriks 3D

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 15 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Dengan matlab, pendefenisian matriks 3D, dapat dilakukan dengan cara mengisi layer demi
layer secara satu persatu.
Contoh : matriks_3d_1.m
clear;
a(:,:,1)=[5
a(:,:,2)=[9
a(:,:,3)=[6
a(:,:,4)=[7
disp(a);

7
5
4
3

2;8
3;8
3;5
1;6

4
3
3
3

2;
1;
3;
5;

9
0
1
8

0
2
4
1

3];
7];
9];
3];

Penjelasan : Pada program diatas, didefinisikan array a dengan dimensi 3x3x4. Atau sebuah
matrik 3x3 dengan 4 buah layer.
Semua operasi dasar matriks dan cara pengkasesan matriks seperti pada matriks 2D, juga dapat
diterapkan pada matriks 3D.
Contoh: matriks_3d_2.m
clear;
a(:,:,1)=[5
a(:,:,2)=[9
a(:,:,3)=[6
a(:,:,4)=[7
disp(a);
a=a*5;
disp(a);

7
5
4
3

2;8
3;8
3;5
1;6

4
3
3
3

2;
1;
3;
5;

9
0
1
8

0
2
4
1

3];
7];
9];
3];

Penjelasan : Setelah matriks didefinisikan, keseluruhan elemen matriks dikalikan 5, dan hasilnya
ditampilkan.
Contoh: matriks_3d_3.m
clear;
a(:,:,1)=[5
a(:,:,2)=[9
a(:,:,3)=[6
a(:,:,4)=[7
disp(a);
a(1,:,:)=0;
disp(a);

7
5
4
3

2;8
3;8
3;5
1;6

4
3
3
3

2;
1;
3;
5;

9
0
1
8

0
2
4
1

3];
7];
9];
3];

Penjelasan : Setelah matriks didefinisikan, tiap baris pertama dari layer matriks dirubah menjadi
0.
2.3.2 Penerapan Statement Control Pada Matriks 3D

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 16 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Dengan statement control yang telah dibahas sebelumnya, memberikan kemungkinan untuk
memanipulasi matriks lebih lanjut.
Contoh soal: buat sebuah matriks a dengan dimensi 4x4x4 (0-100), lalu buat matriks b dari
matriks a dengan setiap elemen dari matriks a ditambah 10.
Penyelesaian: matriks_3d_tambah.m
clear;
a=rand(4,4,4); %buat matriks random 4x4x4
a=a*100; %kalikan 100, supaya elemen matriks dalam rentang 0-100
a=round(a); %lakukan pembulatan untuk tiap elemen
disp(a);
for i=1:4
for j=1:4
for k=1:4
b(i,j,k)=a(i,j,k)+10;
end
end
end
disp(b); %tampilkan hasil matriks b

Contoh soal: Matriks a = 4x4x4, 0-100, bilangan bulat. Buat matriks b dengan ketentuan jika a
=>50 maka b=1, dan jika a<50, maka b=0.
Penyelesaian: matriks_3d_if.m
clear;
a=round(rand(4,4,4)*100);
for i=1:4
for j=1:4
for k=1:4
if a(i,j,k)>=50;
b(i,j,k)=1;
else
b(i,j,k)=0;
end
end
end
end
disp(a);
disp(b);

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 17 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Contoh soal: Buat sebuah matrik asli 3D dengan dimensi dan isi elemen random, nilai tiap
elemen dalam rentang 0-255, bilangan bulat. Buat matriks hasil dengan ukuran yang sama
dengan matriks asli, tetapi elemen hasil adalah 255-elemen asli.
Penyelesaian: matriks_3d_negatif.m
clear;
%bangkitkan 3 bh bilangan acak, simpan di variabel acak
acak=round((rand(1,3)*9)+1);
%buat matriks acak (0-255)
asli=round(rand(acak(1,1),acak(1,2),acak(1,3))*255);
%ambil dimensi matriks a: b=baris,k=kolom,c=channel/layer
[b k c]=size(asli);
for x=1:1:b
for y=1:1:k
for z=1:1:c
hasil(x,y,z)=255-asli(x,y,z);
end
end
end
%tampilkan hasil
disp(acak);
disp(asli);
disp(hasil);

TUGAS
1. Buat sebuah matriks a dengan dimensi 5x4x3 (0-100) bilangan bulat, lalu buat matriks b
dari matriks a dengan setiap elemen dari matriks a dikali 2.
2. Dengan menggunakan statement control for, if atau case, buat matriks 10x10x2, dengan
ketentuan:

layer 1, semua elemen pada baris ke-1 bernilai 0, baris ke-2bernilai 1, baris ke-3
bernilai 2. Baris ke 10 bernilai 9.

layer ke-2, baris pertama bernilai 9, baris ke-2 bernilai 8 , baris ke-3 bernilai 7,
baris ke-10 bernilai 0.

3. Matriks a = 5x5x4, 0-100, bilangan bulat. Buat matriks b dengan ketentuan jika elemen a
genap maka b=100, dan jika elemen a ganjil, maka b=0.
* untuk memeriksa apakah suatu bilangan ganjil atau genap, gunakan fungsi mod(x,y)
untuk mendapatkan hasil operasi modulus. Contoh: 10 mod 5, diperoleh dengan cara
mod(10,5) hasilnya adalah 0. mod(8,3) hasilnya adalah 2.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 18 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL III
LABORATORIUM PENGOLAHAN CITRA
JUDUL : REPRESENTASI MATRIKS KE CITRA
TUJUAN

Praktikan mengerti konsep tentang matriks dan citra.

Praktikan mengerti bagaimana cara memprogram matriks menjadi citra biner,


grayscale dan RGB.

DASAR TEORI
Manipulasi matriks yang telah dipelajari, selanjutnya akan diterapkan ke dalam manipulasi
image/citra yang sesungguhnya. Dalam komputer, suatu citra dipresentasikan ke dalam matriks
2D maunpun 3D yang tiap elemennya merupakan nilai dari derajat keabuan. Pada modul kali ini,
akan dibahas 3 jenis representasi citra:
1. Black n White / Biner
2. Grayscale
3. RGB
3.1 Representasi Black n White
Citra dalam representasi black n white (hitam-putih), hanya mempunyai 2 kondisi derajat
keabuan, yaitu hitam atau putih. Untuk menampilkannya dalam matlab, hitam bernilai 0, dan
putih bernilai 1.
Contoh: citra_biner_1.m
clear;
citra=[ 1 0 0 0 1;
0 1 0 1 0;
0 0 1 0 0;
0 1 0 1 0;
1 0 0 0 1;]
%pilih subplot yang akan digunakan
subplot(1,1,1);
%tampilkan matriks di command window
disp(citra);
%tampilkan matriks sebagai citra
imshow(citra), title('Citra Hitam Putih');

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 19 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Contoh: citra_biner_2.m
clear;
%bangkitkan 4 matriks acak
citra_1= round(rand(5,5)*1);
citra_2= round(rand(10,10)*1);
citra_3= round(rand(30,30)*1);
citra_4= round(rand(50,50)*1);
%tampilkan matriks di command window
disp(citra_1); disp(citra_2);
%tampilkan semua matriks pada subplot yang diberikan
subplot(2,2,1);
imshow(citra_1), title('Citra BW Random 5x5');
subplot(2,2,2);
imshow(citra_2), title('Citra BW Random 10x10');
subplot(2,2,3);
imshow(citra_3), title('Citra BW Random 30x30');
subplot(2,2,4);
imshow(citra_4), title('Citra BW Random 50x50');

Fungsi subplot(), digunakan untuk membagi figure atau jendela hasil MATLAB.
Sublot(a,b,z) akan membagi figure menjadi a baris dan b kolom, dan z digunakan untuk
penomoran subplot yang akan digunakan. title() adalah fungsi untuk memberi judul dari subplot.
Untuk jelasnya, perhatikan gambar 3.1.
Fungsi imshow(), digunakan untuk menampilkan citra yang sebelumnya disimpan dalam
variabel citra_x yang berupa matriks.

Gambar 3.1 Pembagian fungsi subplot()

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 20 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

3.2 Representasi Grayscale


Citra dalam representasi grayscale memiliki 256 kondisi derajat keabuan (8 bit). Dimulai
dari 0 (hitam), 1,2,3 255(putih).
Contoh: citra_grayscale_1.m
clear;
citra=[ 255 50 0 50 255;
50 200 0 200 50;
0
0 100 0
0;
50 200 0 200 50;
255 50 0 50 255;]
citra=uint8(citra);
subplot(1,1,1);
imshow(citra), title('Citra Grayscale');

Fungsi uint8() adalah untuk mengubah tipe/class matriks menjadi uit8 (unsigned 8-bit).
Dalam tipe matriks uint8, nilai tiap elemen matriks hanya ada dalam rentang bilangan bulat 0255. Jika lebih atau kurang dari rentang tersebut, elemen matriks akan dikonversi menjadi 0 atau
255. Jika nilai elemen adalah bilangan desimal, akan dikonversi menjadi bilangan bulat. Secara
default, matriks bertipe double.
Contoh: citra_grayscale_2.m
clear;
citra_1= round(rand(5,5)*255);
citra_2= round(rand(10,10)*255);
citra_3= round(rand(30,30)*255);
citra_4= round(rand(50,50)*255);
%konversi tiap matriks ke uint8
citra_1=uint8(citra_1);citra_2=uint8(citra_2);
citra_3=uint8(citra_3);citra_4=uint8(citra_4);
subplot(2,2,1);
imshow(citra_1), title('Citra Grayscale Random 5x5');
subplot(2,2,2);
imshow(citra_2), title('Citra Grayscale Random 10x10');
subplot(2,2,3);
imshow(citra_3), title('Citra Grayscale Random 30x30');
subplot(2,2,4);
imshow(citra_4),title('Citra Grayscale Random 50x50');

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 21 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

3.3 Representasi RGB


Jika 2 tipe representasi citra sebelumnya menggunakan matriks 2D, maka representasi
RGB menggunakan matriks 3D dengan 3 buah layer/channel. Layer 1 untuk warna merah (Red),
layer 2 untuk warna hijau (Green), dan layer 3 untuk warna biru (Blue). Warna yang dihasilkan
didapat dari perpaduan nilai elemen dari ketiga layer. Elemen pada masing-masing layer
memiliki range 0-255 (8 bit), sehingga karena ada 3 buah layer, total kombinasi warna yang
dapat dihasilkan adalah 256x256x256 = 16.777.216 kombinasi warna. Kombinasi dari 016.777.216 akan menggunakan 3*8bit = 24bit. Citra RGB disebut juga citra truecolor.
Contoh: citra_rgb_1.m
clear;
citra(:,:,1)=[ 255 255 0 255 255;
0
0 0 0
0;
0
0 0 0
0;
0
0 0 0
0;
255 255 0 255 255;]
citra(:,:,2)=[ 0 255 0 255 0;
255 200 0 200 255;
0
0 0 0
0;
255 200 0 200 255;
0 255 0 255 0;]
citra(:,:,3)=[ 0
0 0 0
0;
255 0 0 0 255;
0
0 255 0
0;
255 0 0 0 255;
0
0 0 0
0;]
citra=uint8(citra);
disp(citra);
subplot(1,1,1);
imshow(citra), title('Citra RGB (Color)');

Contoh: citra_rgb_2.m
clear;
%bangkitkan 2 matriks acak dan 2 matriks 0
citra_1= round(rand(10,10,3)*255);
citra_2= round(rand(50,50,3)*255);
citra_3= zeros(16,16,3);
citra_4= zeros(16,16,3);
for x=1:16;
for y=1:16;
citra_3(x,y,1)=x*y;
citra_4(x,y,3)=x*y;

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 22 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

end
end
citra_1=uint8(citra_1);citra_2=uint8(citra_2);
citra_3=uint8(citra_3);citra_4=uint8(citra_4);
subplot(2,2,1);
imshow(citra_1), title('Citra RGB Random 5x5');
subplot(2,2,2);
imshow(citra_2), title('Citra RGB Random 10x10');
subplot(2,2,3);
imshow(citra_3), title('Citra RGB Red Only 16x16');
subplot(2,2,4);
imshow(citra_4), title('Citra RGB Green Only 16x16');

TUGAS
1. Tampilkan huruf M,A,T,L,A,B menggunakan citra hitam-putih. Ukuran tiap
matriks minimal 5x5. Gunakan subplot(1,6,x).
2. Tampilkan sebuah citra grayscale random ukuran 10x10, dengan bingkai hitam pada
tiap sisi dari citra.
3. Dengan matriks RGB minimal dimensi 8x8x3. Buat gambar bebas. Gunakan
statement control for, if, maupun case jika diperlukan.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 23 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL IV
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMOGRAMAN IMAGE I
TUJUAN

Praktikan mengerti tentang cara manipulasi dasar citra dalam matlab

Praktikan mengerti printsip dasar dan bagaimana cara memprogram citra untuk :
representasi RGB, negatif, dan brightness.

DASAR TEORI
Beberapa fungsi matlab yang dapat digunakan untuk mememproses image : imread, imwrite,
imshow, dan imhist.
4.1 Pembacaan Citra
Setelah pada modul sebelumnya memanipulasi matriks menjadi citra, sekarang akan
dipraktekkan pengolahan citra secara langsung. Karena pada dasarnya citra merupakan sebuah
matriks 3D, pengolahan citra dapat dilakukan dengan memanipulasi matriks pembentuknya.
Untuk contoh program berikut, pastikan file citra dengan nama fruit.jpg berada dalam
satu direktori dengan current directory aktif MATLAB. fruit.jpg adalah file citra yang akan
dibaca.
Contoh: baca_citra.m
citra_asli=imread('fruit.jpg');
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli');
merah=citra_asli;
merah(:,:,2)=[0];
merah(:,:,3)=[0];
subplot(2,2,2);
imshow(merah),title('Representasi Merah (R)');
hijau=citra_asli;
hijau(:,:,1)=[0];
hijau(:,:,3)=[0];
subplot(2,2,3);
imshow(hijau),title('Representasi Hijau (G)');
subplot(2,2,4);

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 24 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

biru=citra_asli;
biru(:,:,1)=[0];
biru(:,:,2)=[0];
imshow(biru),title('Representasi Biru (B)');

Gambar 4.1 : Pembacaan Citra Dan Representasi RGB


Penjelasan:
Fungsi imread() digunakan untuk menginputkan suatu citra/image ke dalam matlab.
Hasilnya (untuk citra RGB) akan berupa matriks 3D (x*y*z), dimana x adalah tinggi citra, y
adalah lebar citra, dan z adalah banyak layer, untuk citra RGB z akan bernilai 3.
Fungsi subplot(), digunakan untuk membagi figure atau jendela hasil MATLAB.
sublot(a,b,z) akan membagi figure menjadi a baris dan b kolom, dan z digunakan untuk
penomoran subplot yang akan digunakan. title() adalah fungsi untuk memberi judul dari subplot.
Fungsi imshow(), digunakan untuk menampilkan citra yang sebelumnya disimpan dalam
variabel citra_asli. Karena citra_asli merupakan sebuah matrik, kita dapat memanipulasinya
sebelum ditampilkan kembali. citra_asli merupakan matriks 3D dimana layer 1 adalah merah,
layer 2 hijau, dan layer 3 biru, maka jika kita ingin menampilkan representasi Merah dari
gambar RGB, kedua layer lainnya harus di-0 kan. Sehingga layer merah tetap tinggal, dan citra
yang ditampilkan merupakan representasi Merah.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 25 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

4.2 Brightness Citra dan Histogram Citra


Brightness adalah metoda untuk mempercerah citra dengan cara menambah seluruh derajat
keabuan citra dengan bilangan tertentu. Histogram adalah tampilan statistik mengenai derajat
keabuan yang dimiliki suatu citra.
Contoh: citra_brightness.m
citra_asli=imread('flower.jpg');
citra_hasil=double(citra_asli);
citra_hasil= citra_hasil+80;
citra_hasil=uint8(citra_hasil);
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli');
subplot(2,2,2);
imhist(citra_asli),title('Histogram Citra Asli');
subplot(2,2,3);
imshow(citra_hasil),title('Citra Hasil= Citra Asli + Brightness
80');
subplot(2,2,4);
imhist(citra_hasil),title('Histogram Citra Hasil');

Gambar 4.2 : Brightness Citra dan Histogram

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 26 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Penjelasan:
Fungsi double() digunakan untuk merubah tipe data dari citra_asli. Dalam MATLAB,
suatu file citra dianggap sebagai matriks dengan tipe data uint8 (unsigned integer 8 bit). Untuk
memanipulasi matriks ini, harus dikonversi terlebih dahulu kedalam tipe data double.
brightness didapat dengan menambahkan seluruh elemen matriks citra dengan 80. Semakin
besar derajat keabuan, gambar yang dihasilkan juga akan semakin terang.
Fungsi uint8(), digunakan untuk mengkonversi kembali tipe data citra yang sebelumnya
double, menjadi uint8. Fungsi imhist() digunakan untuk menampilkan histogram dari suatu citra.
Dapat dilihat pada histogram, akibat penambahan matriks, seluruh nilai 0-80 tidak terdapat lagi
dalam histogram.
4.3 Citra Negatif
Citra negatif merupakan representasi kebalikan citra asli. Karena nilai maksimum matriks adalah
255, maka untuk memperoleh kebalikan elemen, didapat dengan mengurangi elemen tersebut
dari 255.
Contoh: citra_negatif.m
citra_asli=imread('water_house.jpg');
citra_hasil=double(citra_asli);
citra_hasil=255-citra_hasil;
citra_hasil=uint8(citra_hasil);
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli');
subplot(2,2,2);
imhist(citra_asli),title('Histogram Citra Asli');
subplot(2,2,3);
imshow(citra_hasil),title('Citra Hasil = Citra Asli Negatif');
subplot(2,2,4);
imhist(citra_hasil),title('Histogram Citra Hasil');
imwrite (citra_hasil, 'water_house_negatif.jpg');

Fungsi imwrite(), digunakan untuk menulis (output) matriks hasil manipulasi menjadi file
citra dengan ekstensi .jpg. file ini akan berada pada direktori aktif MATLAB.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 27 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

4.4 Lebih Jauh Dengan Manipulasi Citra


Dengan menggunakan statement control, matriks citra dapat dimanipulasi lebih lanjut.
Contoh: manipulasi_citra.m
citra_asli=double(imread('river.jpg'));
citra_dark=citra_asli-50;
citra_bright=citra_asli*2;
[b k c]=size(citra_asli);
half_width=round(k/2);
for x=1:b
for y=1:k
for z=1:c
if y<half_width
citra_half_negatif(x,y,z)=255-citra_asli(x,y,z);
elseif y>=half_width
citra_half_negatif(x,y,z)=citra_asli(x,y,z);
end
end
end
end
citra_asli=uint8(citra_asli);
citra_dark=uint8(citra_dark);
citra_bright=uint8(citra_bright);
citra_half_negatif=uint8(citra_half_negatif);
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli');
subplot(2,2,2);
imshow(citra_dark),title('Citra Gelap');
subplot(2,2,3);
imshow(citra_bright),title('Citra Terang Aneh');
subplot(2,2,4);
imshow(citra_half_negatif),title('Citra Setengah Negatif');

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 28 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 4.3 : Hasil Tampilan Brightness Negatif, Perkalian Citra, dan Setengah Negatif
TUGAS
1. Tampilkan Figure dengan 4 subplot:

Subplot 1: Citra Asli

Subplot 2: Representasi Yellow (Red+Blue) + Brightness 150

Subplot 3: Representasi Cyan (Red+Green) + Brightness 50

Subplot 4: Representasi Magenta ( Blue+Green) + Brightness -80

* hati-hati dengan tipe data matriks, apakah menggunakan uint8 atau double !
2. Tampilkan Figure dengan 4 subplot:

Subplot 1: Citra Asli

Subplot 2: Negatif dari citra asli.

Subplot 3: Negatif dari citra asli hanya pada sisi setengah atas citra.(lihat contoh
program terakhir).

Subplot 4: Histogram dari citra pada subplot ke 3.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 29 dari 68

Laboratorium Rekayasa Perangkat Lunak

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Modul Pengolahan Citra

Revisi: 01

halaman 30 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL V
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMOGRAMAN IMAGE II
TUJUAN

Praktikan mengerti bagaimana cara memanipulasi citra : Citra Grayscale, Threshold,


Flip, dan Edge Detection.

DASAR TEORI
5.1 Citra Grayscale
Citra grayscale merupakan suatu citra yang mempunyai derajat keabuan 8 bit. Matriks yang
digunakan hanya 2D (1 layer). Karena citra berwarna terdiri dari 3 layer RGB, maka untuk
mendapatkan citra grayscale, bisa saja dengan cara mengambil salah satu layer dari matriks
tersebut. Atau mencari rata-rata dari setiap elemen dalam tiap layer. Dan terakhir, matlab
menyediakan fungsi untuk mengubah citra RGB ke dalam Grayscale:
Contoh: citra_grayscale.m
clear;
citra_asli=imread('water_house.jpg');
gray_red=citra_asli(:,:,1);
citra_double=double(citra_asli);
[b k c]=size(citra_double);
for x=1:b
for y=1:k
semua_elemen=citra_double(x,y,1)+citra_double(x,y,2)+
citra_double(x,y,3);
gray_mean(x,y)=semua_elemen/3;
end
end
gray_mean=uint8(gray_mean);
gray_matlab=rgb2gray(citra_asli);
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli');
subplot(2,2,2);
imshow(gray_red),title('Grayscale dari Layer Merah');
subplot(2,2,3);
imshow(gray_mean),title('Grayscale Mean');
subplot(2,2,4);
imshow(gray_matlab),title('Grayscale Matlab');

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 31 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 5.1 : Citra Grayscale


Penjelasan:
Perulangan for digunakan untuk menambahkan ketiga elemen layer, untuk dicari rataratanya. Fungsi rgb2gray() merupakan fungsi bawaan matlab yang digunakan untuk merubah
suatu citra RBG menjadi grayscale.
5.2 Citra Threshold
Threshold adalah suatu cara mempertegas citra dengan mengubah citra menjadi hitam dan putih
(2bit). Dalam threshold ini, harus ditetapkan suatu variabel yang berfungsi sebagai batas untuk
mengkonversi elemen matriks citra menjadi hitam atau putih. Jika nilai elemen matriks dibawah
nilai ini, dikonversi menjadi nilai 0 (hitam), dan jika diatas nilai ini, elemen dikonversi menjadi
1. Untuk citra RGB, citra terlebih dahulu dirubah menjadi grayscale.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 32 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Contoh: citra_ threshold.m


clear;
citra_asli=imread('cctv.jpg');
citra_gray=rgb2gray(citra_asli);
citra_gray=double(citra_gray);
[b k]=size(citra_gray);
for x=1:b
for y=1:k
if citra_gray(x,y)<128
citra_threshold_128(x,y)=0;
elseif citra_gray(x,y)>=128
citra_threshold_128(x,y)=1;
end
if citra_gray(x,y)<64
citra_threshold_64(x,y)=0;
elseif citra_gray(x,y)>=64
citra_threshold_64(x,y)=1;
end
if citra_gray(x,y)<192
citra_threshold_192(x,y)=0;
elseif citra_gray(x,y)>=192
citra_threshold_192(x,y)=1;
end
end
end
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli');
subplot(2,2,2);
imshow(citra_threshold_128),title('Citra Threshold 128');
subplot(2,2,3);
imshow(citra_threshold_64),title('Citra Threshold 64');
subplot(2,2,4);
imshow(citra_threshold_192),title('Citra Threshold 192');

Penjelasan:
Pada program, terdapat 3 buah citra threshold, dengan batas threshold 128, 64, dan 192.
Perbedaan dari ketiganya adalah batas yang digunakan untuk mengkonversi elemen matriks
apakah menjadi hitam atau putih. Semakin kecil batas threshold, akan semakin besar
kemungkinan elemen tersebut dikonversi menjadi 1 (putih).
Jika dilihat dalam program, matriks threshold tidak dikonversi lagi menjadi uint8 (tetap
bertipe double). Hal ini dikarenakan jika fungsi imshow() menerima matriks dengan tipe double,
citra akan dibentuk dengan elemen 0 sebagai hitam, dan >=1 sebagai putih. Tetapi jika matriks
tersebut bertipe uint8, matriks dianggap mempunyai derajat keabuan 256 (grayscale).

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 33 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 5.2 Citra Threshold


5.3 Citra Flip
Citra flip yaitu manipulasi citra dengan membuat citra hasil sebagai pencerminan dari citra awal,
baik terhadap sumbu x maupun sumbu y. Karena suatu citra direpresentasikan dengan matriks
yang mempunyai baris dan kolom, untuk membuat citra flip, dilakukan manipulasi dengan
merubah urutan baris dan kolom.
Misalkan matrik asli adalah:
Error! Reference source not found.Error: Reference source not
found

Maka untuk pencerminan terhadap sumbu y, matrik hasil akan menjadi:


Error: Reference source not found
found

Error: Reference source not

Untuk pencerminan terhadap sumbu x, matriks hasil akan menjadi:


Error: Reference source not found
found

Error: Reference source not

Untuk pencerminan terhadap sumbu x dan y, matriks hasil akan menjadi:


Error: Reference source not found
found

Error: Reference source not

Contoh: citra_ flip.m

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 34 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

clear;
citra_asli=imread('cherry.jpg');
temp=citra_asli;
[b k c]=size(citra_asli);
for x=1:1:b
for y=1:1:k
for z=1:1:c
citra_flip_horizontal(x,y,z)=temp(x,(k-y)+1,z);
citra_flip_vertikal(x,y,z)=temp((b-x)+1,y,z);
citra_flip_horiverti(x,y,z)=temp((b-x)+1,(k-y)+1,z);
end
end
end
subplot(2,2,1);
imshow(citra_asli),title('Citra');
subplot(2,2,2);
imshow(citra_flip_horizontal),title('Citra Flip Horizontal');
subplot(2,2,3);
imshow(citra_flip_vertikal),title('Citra Flip Vertikal');
subplot(2,2,4);
imshow(citra_flip_horiverti),title('Citra Flip HorizontalVertikal');

Gambar 5.3 Citra FLIP


Penjelasan:

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 35 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Proses perulangan for dilakukan untuk merubah urutan baris dan kolom, supaya efek flip
tercipta.
5.4 Edge Detection
Edge detection atau disebut juga deteksi garis tepi. Adalah teknik citra digital untuk
medeteksi tepi dari suatu objek. Edge detection memeliki beberapa algoritma, diantaranya:
The Sobel method
The Prewitt method
The Roberts method
The Laplacian of Gaussian method
The zero-cross method
The Canny method
Masing-masing algoritma tersebut, mempunyai fungsi yang bersesuaian dalam MATLAB:
edge(nama_variabel_citra,sobel).
edge(nama_variabel_citra,prewitt).
edge(nama_variabel_citra,roberts).
edge(nama_variabel_citra, log).
edge(nama_variabel_citra, 'zerocross').
edge(nama_variabel_citra, 'canny').
Contoh: edge_detection.m
clear;
citra_asli=imread('flower.jpg');
citra_gray=rgb2gray(citra_asli);
subplot(2,2,1);
imshow(citra_gray),title('Citra Asli Grayscale');
subplot(2,2,2);
imshow(edge(citra_gray,'sobel')),title('Edge Detection - Algoritma
Sobel');
subplot(2,2,3);
imshow(edge(citra_gray,'prewitt')),title('Edge Detection Algoritma Prewitt');
subplot(2,2,4);
imshow(edge(citra_gray,'log')),title('Edge Detection - Algoritma
Robert');

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 36 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 5.4 Edge Detection


TUGAS
1. Tampilkan figure dengan 4 subplot:
Subplot 1: Citra asli.
Subplot 2: Citra grayscale dari layer biru.
Subplot 3: Citra grayscale dari layer hijau dan biru (cari rata-rata dari kedua layer).
Subplot 4: Citra grayscale, lalu dinegatifkan. (lihat modul IV).
2. Tampilkan figure dengan 4 subplot:
Subplot 1: Citra asli.
Subplot 2: Citra threshold 100.
Subplot 3: Citra threshold 150, lalu lakukan flip vertikal.
Subplot 4: Flip horizontal dari citra asli, lalu lakukan brightness + 80.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 37 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL VI
LABORATORIUM PENGOLAHAN CITRA
JUDUL : IMAGE FILTERING
TUJUAN

Praktikan mengerti bagaimana cara kerja image filtering, seperti efek blur dan
sharpen

DASAR TEORI
Image filtering digunakan untuk memberikan efek kepada citra, dengan cara mengubah
setiap elemen dari citra dengan berbagai cara, antara lain mencari rata-rata dari seluruh elemen
tetangga yang berada pada di sekitar elemen yang akan dicari, mencari nilai tertinggi atau
terendah, atau mengalikannya dengan matriks tertentu. Besar matriks tetangga yang digunakan
3x3 atau 5x5.
6.1 Mean Filtering
Mean filtering (filter rata-rata), yaitu mencari rata-rata dari seluruh elemen tetangga yang
berdekatan dengan selemen saat ini. Biasa digunakan untuk mereduksi noise pada gambar.

Gambar 6.1 Contoh Matriks


Dengan mengambil ruang sampel mean 3x3, maka untuk mendapatkan hasil filter,
seluruh elemen tetangga akan dijumlahkan dan dibagi 9. Pada gambar diatas, untuk mencari
elemen matriks pada baris ke-2, kolom ke-2. Nilai yang didapat adalah: (56+198+154+34+120
+33+66+67+98)/9=91,77. Nilai ini lalu dibulatkan menjadi 92. Begitu seterusnya untuk setiap
elemen lainnya. Untuk elemen 1,1. Karena elemen matrik tetangga tidak ada, dapat dianggap 0.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 38 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 6.2 Prinsip kerja image filtering


Catatan: karena semua contoh program pada image filtering melibatkan perulangan for yang
cukup banyak, disarankan menggunakan citra dengan ukuran kecil. Sekitar 200x200 pixel.
Contoh: filter_mean.m
clear;
citra_asli=imread('cat_noise.jpg');
temp=citra_asli;
[b k c]=size(temp);
for x=1:1:b
for y=1:1:k
for z=1:1:c
try
matriks(1,1)=temp(x-1,y-1,z);
catch
matriks(1,1)=0;
end
try
matriks(1,2)=temp(x-1,y,z);
catch
matriks(1,1)=0;
end
try
matriks(1,3)=temp(x-1,y+1,z);
catch
matriks(1,3)=0;
end
try
matriks(2,1)=temp(x,y-1,z);
catch
matriks(2,1)=0;
end
try

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 39 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

matriks(2,2)=temp(x,y,z);
catch
matriks(2,2)=0;
end
try
matriks(2,3)=temp(x,y+1,z);
catch
matriks(2,3)=0;
end
try
matriks(3,1)=temp(x+1,y-1,z);
catch
matriks(3,1)=0;
end
try
matriks(3,2)=temp(x+1,y,z);
catch
matriks(3,2)=0;
end
try
matriks(3,3)=temp(x+1,y+1,z);
catch
matriks(3,3)=0;
end
filtered(x,y,z)=mean(mean(matriks));
end
end
end
filtered=uint8(filtered);
subplot(2,2,1);
imshow(citra_asli),title('Citra Asli (Noise)');
subplot(2,2,2);
imshow(filtered),title('Citra Filter Mean');
subplot(2,2,3);
imhist(citra_asli),title('Histogram Citra Asli (Noise)');
subplot(2,2,4);
imhist(filtered),title('Histogram Citra Filter Mean');

Penjelasan:
Blok try.. catch..end digunakan untuk mengakses ke-9 elemen yang akan dicari rataratanya. Elemen 3x3 ini ditampung dalam variabel matriks. Di akhir perulangan, nilai rata-rata
dicari dengan menggunakan fungsi mean, dan hasilnya diinputkan kedalam matriks hasil dalam
variabel filtered.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 40 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 6.3 Hasil Mean Filtering

6.2 Median Filtering


Jika pada mean filtering dicari nilai rata-rata, maka pada median filtering, akan dicari
nilai tengah dari kesembilan elemen yang bertetangga. Pada contoh matriks sebelumnya,
kesembilan elemen akan diurutkan dari nilai terkecil ke terbesar: 33, 34, 56, 66, 67, 98, 120, 154,
198. Karena ruang sample adalah 3x3=9, maka elemen median adalah elemen ke-5, yaitu 67.
Untuk contoh program, sama dengan filter mean, hanya kali ini digunakan fungsi
median.
Contoh: filter_median.m
Clear;
(sama pada contoh filter mean)
.
.
filtered(x,y,z)=median(median(matriks));

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 41 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Untuk melihat perbedaan keduanya, satukan dalam figure yang sama. Filter median akan lebih
memberi efek blur (kabur) dibandingkan filter mean.
6.3 Min dan Max Filtering
Untuk min dan max filtering dicari nilai maksimum atau minimum dari ke-9 elemen tersebut.
Contoh: filter_min_max.m
Clear;
(sama pada contoh filter mean)
.
.
filter_min(x,y,z)=min(min(matriks));
filter_max(x,y,z)=max(max(matriks));

subplot(1,2,1);
imshow(filter_min),title('Citra Filter MAX');
subplot(1,2,2);
imshow(filter_max),title('Citra Filter MIX');

*untuk lebih melihat perbedaannya, lakukan zoom pada figure.


6.4 Sharpen Filtering
Citra sharpen digunakan untuk menegaskan garis tepi pada citra, sehingga kelihatan lebih
tajam pada citra yang kabur (blur). Efek sharpen diperoleh dengan mengalikan matriks
bertetangga yang menjadi sample dengan sebuah matriks filter tertentu.
Contoh matriks filter yang akan digunakan adalah sebagai berikut:

Contoh: filter_sharpen.m
Clear;
(sama pada contoh filter mean)
.
.
filter=[-1 -1 -1;-1 10 -1; -1 -1 -1];
hasil_filter=matriks*filter;
filtered(x,y,z)=mean(mean(hasil_filter))*2;

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 42 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

subplot(1,2,1);
imshow(citra_asli),title('Citra Asli);
subplot(1,2,2);
imshow(filtered),title('Citra Filter Sharpen');

Penjelasan:
Matriks filter didefenisikan ke dalam sebuah variabel filter. Lalu matriks sample
dikalikan dengan matriks filter, hasilnya adalah sebuah matriks 3x3. Matriks 3x3 ini lalu dicari
nilai rata-rata dari kesembilan elemennya, dan hasilnya dikali 2.

Gambar 6.4 Hasil Sharpen Filtering


TUGAS
1. Tambahkan noise ke dalam suatu citra dengan program pengolah gambar, seperti
Photoshop (untuk Photoshop CS3, pilih menu: filter noise add noise). Lalu kecilkan
ukuran gambar sekitar 200x200 pixel. Dalam matlab, tampilkan figure dengan 4 subplot:
Subplot 1: citra asli
Subplot 2: citra grayscale
Subplot 3: citra grayscale + filter median
Subplot 4: citra grayscale + filter sharpen

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 43 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL VII
LABORATORIUM PENGOLAHAN CITRA
JUDUL : DESAIN DAN PEMROGRAMAN GUI MATLAB
TUJUAN
Praktikan mengerti tentang cara menggunakan komponen GUI
Praktikan mengerti bagaimana cara memprogram dan menangani Data GUI
DASAR TEORI
7.1 Figure dan M-File
Untuk membuat sebuah desain GUI dilakukan dengan mengklik File>New>GUI atau pada pada
command window ketik >>guide. MATLAB akan memberikan dua buah file berekstensi .fig
dan .m
Tampilan awal guide terlihat seperti gambar 5.1. untuk memperbesar/menampilkan editor
GUI, drag tanda hitam kecil pada tengah editor ke arah kanan bawah.

Push Button

Radio Button

Edit Text

Drag ke arah kanan bawah


untuk memperbesar editor

Toggle Button

Checkbox

Static Text

Slider
Frame
Listbox
Popup Menu

Axes

Gambar 7.1 Tampilan GUIDE MATLAB

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 44 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

7.2 Memprogram Komponen GUI


Komponen GUI Matlab mirip dengan komponen GUI pada bahasa pemograman visual lainnya,
seperti Delphi dan Visual Basic.
Komponen GUI terdiri dari : Push Button, Toggle Button, Radio Button, Checkbox, Edit
Text, Static Text, Slider, Listbox, Popup Menu, dan Axes.
Tiap-tiap objek memiliki event seperti ketika di-klik, klik-kanan, delete, dll. Dalam
MATLAB, event seperti ini disebut Callback.
Callback untuk semua objek grafik:
-

Callback
Merupakan default callback yang akan ditambahkan MATLAB pada saat membuat
suatu objek. Matlab mengeksekusinya ketika pemakai melakukan klik kiri pada mouse

dan posisi cursor ada pada obyek atau berada di 5 pixel dari tepi objek.
ButtonDownFcn
Matlab mengeksekusinya ketika pemakai melakukan klik kanan pada mouse dan posisi
cursor ada pada obyek atau berada di 5 pixel dari tepi objek.
CreateFcn
Matlab mengeksekusinya ketika membuat sebuah objek.
DeleteFcn
matlab mengeksekusinya sebelum menghapus sebuah objek.
Untuk menambahkan kode program untuk callback tertentu pada suatu objek, klik kanan

objek, lalu pilih View CallbackJenis Callback, editor M-FILE akan muncul, dan kode
program dapat langsung ditulis.
Setiap objek memiliki property, yang bersifat unik untuk masing-masing objek. Untuk
melihat properti sebuah objek GUI, klik kanan objek tersebut, dan pilih Property Inspector.
Untuk menjalankan program klik menu ToolsActivate Figure. Atau klik tanda panah
hijau di sudut atas toolbar.

Gambar 7.2 Tombol Short-Cut Untuk Menkompilasi Program


7.3 Contoh Program GUIDE MATLAB

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 45 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

7.3.1 Push Button dan Static Text


Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar 5.3:

Gambar 7.3 Tampilan GUI Awal Program Push Button dan Static Text
Gambar 7.3 Tampilan awal contoh program push button dan static text
Untuk Property Inspector, Ubah menjadi :
Style
Push Button
Static Text

String
Tampil
-

Tag
btn_tampil
text

Save GUIDE Matlab dengan nama file:push_button.fig. Secara otomatis akan terbuka MFILE yang akan digunakan untuk menuliskan kode program untuk GUIDE tersebut. MATLAB
telah membuat kerangka untuk program kita, juga membuat callback default untuk objek
push_button.
Cari baris program berikut:
function varargout = btn_tampil_Callback(h, eventdata, handles,
varargin)

lalu tambahkan tepat dibawahnya:


set(handles.text,'String','Hello World..');

save m-file, lalu jalankan program

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 46 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 7.4 Tampilan Akhir Contoh Program Push Button Dan Static Text
Penjelasan:
Fungsi set() digunakan untuk mengubah property dari objek lainnya. Dalam GUI
MATLAB, objek lain diakses dengan perintah handles.nama_objek. Dapat dikatakan handles
adalah class induk dari setiap objek. Jadi untuk mengakses static text dengan nama text,
digunakan handles.text. Parameter kedua dari fungsi set() berisi property yang akan dirubah,
dalam hal ini kita akan merubah property String dari objek text. Nilai dari property String ini
dilewatkan dengan parameter ketiga dari fungsi set().
7.3.2 Edit Text
Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar 5.11:

Gambar 7.5 Tampilan Awal Contoh Program Edit Text.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 47 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Untuk Property Inspector, Ubah menjadi :


Style
Static Text
Static Text
Static Text
Edit Text
Edit Text
Edit Text
Push Button

String
Panjang
Lebar
Luas
Hitung Luas

Tag
ed_panjang
ed_lebar
ed_luas
btn_hitungluas

Enable : off

Save GUIDE Matlab dengan nama file:edit_text.fig. Lalu tuliskan kode program berikut:
function varargout = ed_panjang_Callback(h, eventdata, handles, varargin)
panjang=str2num(get(handles.ed_panjang,'String'));
handles.panjang=panjang;
guidata(h,handles);
function varargout = ed_lebar_Callback(h, eventdata, handles, varargin)
lebar=str2num(get(handles.ed_lebar,'String'));
handles.lebar=lebar;
guidata(h,handles);
function varargout = btn_luas_Callback(h, eventdata, handles, varargin)
panjang=handles.panjang;
lebar=handles.lebar;
luas=panjang*lebar;
set(handles.ed_luas,'String',luas);

Gambar 7.6 Tampilan Akhir Contoh Program Edit Text.


Penjelasan:
Fungsi get() kebalikan dari fungsi set() pada listing program sebelumnya, get()
digunakan untuk mengetahui nilai property dari sebuah objek.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 48 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Untuk objek edit text, dalam MATLAB, nilai yang dihasilkannya akan bertipe string,
sehingga untuk manipulasi matematis, harus dikonversi terlebih dahulu menjadi numeric. Proses
ini dilakukan oleh fungsi str2num(). Baris program handles.panjang=panjang; adalah untuk
menginputkan variabel panjang ke dalam struktur handles. Hal ini dilakukan supaya fungsi
callback lain diluar tempat variabel tersebut dideklarasikan dapat mengambil nilainya.
guidata(h,handles) digunakan untuk meng-update struktur handles.
7.3.3 Axes
Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar 5.7:

Gambar 7.7 Tampilan Akhir Contoh Program Toogle Button.


Untuk Property Inspector, Ubah menjadi :
No Objek
1.

Type
Axes

2
3

Static Text
Edit Text

Push Button

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Property
Tag
XTick
YTick
String
Tag
String
Tag
String

Berlaku Efektif: 30 September 2013

Value
axes_citra
[] (dikosongkan)
[] (dikosongkan)
Brightness :
input_brightness
100
btn_run
Run Brightness

Revisi: 01

halaman 49 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Save GUIDE Matlab dengan nama file:axes_brightness.fig. Lalu tuliskan kode program berikut:
function varargout = btn_ubah_Callback(h, eventdata, handles,
varargin)
citra_asli=imread('leaf.jpg');
citra_hasil=double(citra_asli);
nilai_brightness=str2num(get(handles.input_brightness,'String'));
citra_hasil=citra_hasil+nilai_brightness;
citra_hasil=uint8(citra_hasil);
axes(handles.axes_citra);
imshow(citra_hasil);

Gambar 7.8 Tampilan Akhir Contoh Program Axes.

TUGAS
1.

Ubah kode program pada contoh axes, tambahkan dua buah tombol, untuk Citra Negatif
dan Citra Grayscale. Jika tombol ini diklik, maka citra yang tampil dalam axes akan
berubah menjadi grayslace atau negatif. Sehingga program mempunyai 3 tombol: untuk
brightness, negatif dan grayscale

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 50 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL VIII
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMROGRAMAN CITRA DENGAN GUI MATLAB
TUJUAN
Praktikan mengerti tentang cara menggunakan komponen GUI untuk menampilkan hasil
manipulasi citra
DASAR TEORI
Seluruh proses manipulasi citra dari modul 4-6, menggunakan figure untuk menampilkan
hasil. Dalam modul kali ini, hasil manipulasi akan ditampilkan dengan menggunakan GUI
matlab.
Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar:

Gambar 8.1 Rancangan Tampilan GUI Program

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 51 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Untuk Property Inspector, Ubah menjadi :


No Objek
1.

Type
Axes

2.

Axes

Push Button

Push Button

Push Button

Push Button

Push Button

Property
Tag
XTick
YTick
Tag
XTick
YTick
Tag
String
Tag
String
Tag
String
Tag
String
Tag
String

Value
axes_asli
[] (dikosongkan)
[] (dikosongkan)
axes_hasil
[] (dikosongkan)
[] (dikosongkan)
btn_open
Open File
btn_brightness
Brightness + 100
btn_negatif
Negatif
btn_threshold
Threshold 128
btn_flip_vertikal
Flip Vertikal

Kode Program : citra_gui.fig (sesuaiakan kode program dengan masing-masing callback)


% ----------------------------------------------------------------function varargout = btn_open_Callback(h, eventdata, handles,
varargin)
[nama_file,nama_path] = uigetfile({'*.jpg','File jpeg
(*.jpg)'},'Buka File Citra');
if ~isequal(nama_file,0)
handles.citra=imread(fullfile(nama_path,nama_file));
guidata(h,handles);
axes(handles.axes_asli);
imshow(handles.citra);
axes(handles.axes_hasil);
imshow(handles.citra);
else
return;
end;
% ----------------------------------------------------------------function varargout = btn_brightness_Callback(h, eventdata, handles,
varargin)
citra_bright=double(handles.citra);
citra_bright=citra_bright+100;
citra_bright=uint8(citra_bright);
axes(handles.axes_hasil);

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 52 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

imshow(citra_bright);
% ----------------------------------------------------------------function varargout = btn_negatif_Callback(h, eventdata, handles,
varargin)
citra_negatif=double(handles.citra);
citra_negatif=255-citra_negatif;
citra_negatif=uint8(citra_negatif);
axes(handles.axes_hasil);
imshow(citra_negatif);
% ----------------------------------------------------------------function varargout = btn_threshold_Callback(h, eventdata, handles,
varargin)
citra_gray=rgb2gray(handles.citra);
citra_gray=double(citra_gray);
[b k]=size(citra_gray);
for x=1:b
for y=1:k
if citra_gray(x,y)<128
citra_threshold_128(x,y)=0;
elseif citra_gray(x,y)>=128
citra_threshold_128(x,y)=1;
end
end
end
axes(handles.axes_hasil);
imshow(citra_threshold_128);
% ----------------------------------------------------------------function varargout = btn_flip_vertikal_Callback(h, eventdata,
handles, varargin)
citra_asli=handles.citra;
temp=citra_asli;
[b k c]=size(citra_asli);
for x=1:1:b
for y=1:1:k
for z=1:1:c
citra_flip_vertikal(x,y,z)=temp((b-x)+1,y,z);
end
end
end
axes(handles.axes_hasil);
imshow(citra_flip_vertikal);

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 53 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 8.2 Tampilan Akhir GUI Citra


TUGAS
1.

Jika pada modul ini, terdapat 4 tombol untuk Brightness, Negatif, Threshold 128 dan Flip
Vertikal, ubah kode program agar terdapat 4 tombol untuk: Representasi Red (lihat modul
ke-4), Half Negatif (lihat modul ke-4), Flip Horizontal-Vertikal (lihat modul ke-5), dan
Edge Detection Algoritma Prewitt (lihat modul ke-5). Rancang tampilan dengan sebaik
mungkin.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 54 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

MODUL IX
LABORATORIUM PENGOLAHAN CITRA

JUDUL : PENGATURAN WARNA PADA CITRA DIGITAL


TUJUAN
Praktikan mengerti tentang pengaturan tingkat warna pada sebuah citra
DASAR TEORI
Manipulasi matriks citra RGB dengan merubah masing-masing layer R,G, dan B secara terpisah
akan meyebabkan perubahan warna citra secara keseluruhan, efek ini dapat dilihat dengan
program berikut:
Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar 9.1:

4
5

7
8
9

6
Gambar 9.1 Rancangan Tampilan GUI Program

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 55 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Untuk Property Inspector, Ubah menjadi :


No Objek
1.

Type
Axes

2.

Axes

Push Button

Slider

Slider

Slider

Static Text

Static Text

Static Text

Property
Tag
XTick
YTick
Tag
XTick
YTick
Tag
String
Tag
Min
Max
Tag
Min
Max
Tag
Min
Max
Tag
String
Tag
String
Tag
String

Value
axes_asli
[] (dikosongkan)
[] (dikosongkan)
axes_hasil
[] (dikosongkan)
[] (dikosongkan)
btn_open
Open File
sd_red
150
-150
sd_green
150
-150
sd_blue
150
-150
txt_red
0
txt_green
0
txt_blue
0

Kode Program : pengaturan_warna.fig (sesuaiakan kode program dengan masing-masing


callback)
% ----------------------------------------------------------------function varargout = btn_open_Callback(h, eventdata, handles,
varargin)
[nama_file,nama_path] = uigetfile({'*.jpg','File jpeg
(*.jpg)'},'Buka File Citra');
if ~isequal(nama_file,0)
handles.citra=imread(fullfile(nama_path,nama_file));
guidata(h,handles);
axes(handles.axes_asli);
imshow(handles.citra);
axes(handles.axes_hasil);
imshow(handles.citra);
else
return;
end;

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 56 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

set(handles.sd_red,'value',0);
set(handles.sd_green,'value',0);
set(handles.sd_blue,'value',0);
% ----------------------------------------------------------------function varargout = sd_red_Callback(h, eventdata, handles,
varargin)
nilai_red = get(handles.sd_red,'value');
handles.nilai_red = round(nilai_red);
guidata(h,handles);
set(handles.txt_red,'string',handles.nilai_red);
citra=double(handles.citra);
num_citra = citra(:,:,1) + round(get(handles.sd_red,'value'));
citra(:,:,1) = num_citra;
num_citra = citra(:,:,2) + round(get(handles.sd_green,'value'));
citra(:,:,2) = num_citra;
num_citra = citra(:,:,3) + round(get(handles.sd_blue,'value'));
citra(:,:,3) = (num_citra);
citra=uint8(citra);
axes(handles.axes_hasil);
imshow(citra);
% ----------------------------------------------------------------function varargout = sd_green_Callback(h, eventdata, handles,
varargin)
nilai_green = get(handles.sd_green,'value');
handles.nilai_green = round(nilai_green);
guidata(h,handles);
set(handles.txt_green,'string',handles.nilai_green);
citra=double(handles.citra);
num_citra = citra(:,:,1) + round(get(handles.sd_red,'value'));
citra(:,:,1) = num_citra;
num_citra = citra(:,:,2) + round(get(handles.sd_green,'value'));
citra(:,:,2) = num_citra;
num_citra = citra(:,:,3) + round(get(handles.sd_blue,'value'));
citra(:,:,3) = (num_citra);
citra=uint8(citra);
axes(handles.axes_hasil);
imshow(citra);
% ----------------------------------------------------------------function varargout = sd_blue_Callback(h, eventdata, handles,
varargin)
nilai_blue = get(handles.sd_blue,'value');
handles.nilai_blue = round(nilai_blue);

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 57 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

guidata(h,handles);
set(handles.txt_blue,'string',handles.nilai_blue);
citra=double(handles.citra);
num_citra = citra(:,:,1) + round(get(handles.sd_red,'value'));
citra(:,:,1) = num_citra;
num_citra = citra(:,:,2) + round(get(handles.sd_green,'value'));
citra(:,:,2) = num_citra;
num_citra = citra(:,:,3) + round(get(handles.sd_blue,'value'));
citra(:,:,3) = (num_citra);
citra=uint8(citra);
axes(handles.axes_hasil);
imshow(citra);

Gambar 9.2 Tampilan akhir program pengaturan warna RGB


TUGAS
1. Rancang program GUI matlab untuk menampilkan brightness. Gunakan slider untuk
mengatur tingkat kecerahan brightness.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 58 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

PERTEMUAN X
LABORATORIUM PENGOLAHAN CITRA

JUDUL : KOMPRESI CITRA DAN TRANSFORMASI GEOMETRI


TUJUAN
Praktikan mengerti dan bisa mengaplikasikan bagaimana prinsip Kompresi pada
Pengolahan Citra Digital
Praktikan mengerti dan bisa mengaplikasikan bagaimana prinsip Transformasi Geometri
pada Pengolahan Citra Digital dengan rumus Transformasi Affine.
DASAR TEORI
1.

KOMPRESI CITRA

Secara garis besar, kompresi merupakan proses untuk menghilangkan berbagai kerumitan yang
tidak penting (redundansi) dari suatu informasi dengan cara memadatkan isi file sehingga
ukurannya menjadi lebih kecil dengan memaksimalkan kesederhanaannya dan tetap menjaga
kualitas penggambaran dari informasi tersebut. Kompresi data menjadi sangat penting karena
memperkecil kebutuhan penyimpanan data, mempercepat pengiriman data, memperkecil
kebutuhan bandwith. Teknik kompresi bisa dilakukan terhadap data teks/biner, gambar (JPEG,
PNG, TIFF), audio (MP3, AAC, RMA, WMA), dan video (MPEG, H261, H263).
Salah satu teknik kompresi yang cukup terkenal adalah kompresi JPEG (Join Photographic
Expert Group). Kompresi JPEG menggunakan metode Lossless Compression, yaitu Kompresi
citra dimana hasil dekompresi dari citra yang terkompresi sama dengan citra aslinya, tidak ada
informasi yang hilang. Sayangnya ratio kompresi citra metode ini sangat rendah. Metode ini
cocok untuk kompresi citra yang mengandung informasi penting yang tidak boleh rusak akibat
kompresi, misal kompresi citra hasil diagnosa medis. Perhatikan contoh pemampatan citra dengan
metode JPEG berikut ini.
Komponen dalam mendesain tampilan :
1. static text
2. Axes
3. Push Button
No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 59 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Sesuaikan pengaturan dalam property Inspector dengan cara mengeklik komponen 2 kali, maka
akan tampil jendela property Inspector seperti dibawah ini.

Gambar 10.1 Property Inspector Aplikasi Kompresi


Langkah pertama dengan mendesain tampilan seperti gambar di bawah ini

Gambar 10.2 Tampilan awal proses kompresi citra


No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 60 dari 68

Laboratorium Rekayasa Perangkat Lunak

Pada

function

buka_Callback,

Modul Pengolahan Citra

kita

ketikkan

source

code

seperti

berikut:

[nama_file1,nama_path1]=uigetfile(...
{'*.bmp;,*.jpg','File Citra(*.bmp,*.jpg)';'*.bmp','File
Bitmap(*.bmp)';...
'*.jpg','File JPEG(*.jpg)';'*.*','Semua File(*.*)'},...
'Buka File Citra Host/Asli');
If~isequal(nama_file1,0)
handles.data1=imread(fullfile(nama_path1,nama_file1));
guidata(hObject,handles);
handles.current_data1=handles.data1; axes(handles.citra1);
imshow(handles.current_data1); set(handles.text2,'String',nama_file1);
set(handles.text8,'String',size(handles.data1,1));
set(handles.text11,'String',size(handles.data1,2)); else return; end

[nama_file_simpan, path_simpan]=uiputfile(...

{'*.jpg','File citra(*.jpg)';'*.jpg','Citra JPEG(*.jpg)';...

'*.*','Semua File(*.*)'},...
'Menyimpan File Citra Hasil Kompresi JPEG');
imwrite(handles.data1,fullfile(path_simpan,nama_file_simpan));
citra_kompres=imread(fullfile(path_simpan,nama_file_simpan));
guidata(hObject,handles);
axes(handles.citra2);
imshow(citra_kompres); set(handles.text4,'String',nama_file_simpan);
set(handles.text12,'String',size(handles.data1,1));
set(handles.text13,'String',size(handles.data1,2));

Script tersebut menyatakan bahwa fungsi uigetfile pada function kompres_Callback yang
digunakan untuk membuat file citra yang di kompresi akan berformat *.jpg , apapun format awal
file citra tersebut. Terakhir adalah mengetik script pada bagian function keluar_Callback, script
yang diketikan adalah
selection=questdlg(['Keluar ' get(handles.figure1,'Name')''],...
['Keluar ' get(handles.figure1,'Name')''],...
'Ya','Tidak','Ya');
if strcmp(selection,'Tidak') return; end delete(handles.figure1)

Script tersebut berfungsi menampilkan kotak dialog yang berisi dua pushbutton yaitu Ya
dan Tidak yang akan menanyakan apakah pengguna ingin keluar dari aplikasi atau tidak.Hasil
dari aplikasi ini jika dijalankan adalah sebagai berikut,
No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 61 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

1. Tampilan Awal

2. Tampilan Pilih Menu Buka Gambar

Gambar 10.3 Open File dialog


3. Tampilan Gambar Asli & Gambar Kompresi

Gambar 10.4 Gambar asli dan gambar hasil kompresi


No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 62 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

2. TRANSFORMASI GEOMETRI
MATLAB menyediakan fungsi Affine Transform untuk menangani transformasi yang meliputi :
Translation, Scale, Shear, dan Rotation.

Gambar 10.5 Rumus transformasi Affine

Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar 10.2:

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 63 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

3
4

11

6
13
14
15
16

10

12
20

17
18
19

21

Gambar 10.6 Tampilan awal program transformasi geometri 2

Untuk Property Inspector, Ubah menjadi :

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 64 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Object No.
Type
Tag
Keterangan
1
axes
ax_citra_asli
XTick : [],
2
axes
ax_citra_hasil
YTick : []
3
Static Text
txt_nama
4
Static Text
txt_panjang
5
Static Text
txt_lebar
6
Push Button
btn_buka
7
Push Button
btn_tutup
8
Static Text
txt_nama2
9
Static Text
txt_panjang2
10
Static Text
txt_lebar2
11
Push Button
btn_fliph
12
Push Button
btn_flipv
13
Edit Text
ed_trans_x
14
Edit Text
ed_trans_y
15
Edit Text
ed_skala_x
GUIDE
16
Edit Text
ed_skala_y
17
Edit Text
ed_shear_x
dengan
18
Edit Text
ed_shear_y
19
Edit Text
ed_rotation_degree
20
Push Button
btn_transform
21
Push Button
btn_reset
transformasi_ geometri_2.fig. Lalu tuliskan kode program berikut:

Save
Matlab
nama file:

% -------------------------------------------------------------------function varargout = btn_buka_Callback(h, eventdata, handles, varargin)

[nama_file,nama_path] = uigetfile({'*.jpg','File jpeg


(*.jpg)'},'Buka File Citra');
if ~isequal(nama_file,0)
handles.citra=imread(fullfile(nama_path,nama_file));
guidata(h,handles);
axes(handles.axes_asli);
imshow(handles.citra);
axes(handles.axes_hasil);
imshow(handles.citra);
else
return;
end;
set(handles.txt_nama,'string',nama_file);
set(handles.txt_panjang,'string',size(handles.citra,1));
set(handles.txt_lebar,'string',size(handles.citra,2));
set(handles.txt_nama2,'string',nama_file);
set(handles.txt_panjang2,'string',size(handles.citra,1));
set(handles.txt_lebar2,'string',size(handles.citra,2));
set(handles.ed_trans_x,'string',1);
set(handles.ed_trans_y,'string',1);
set(handles.ed_skala_x,'string',1);
set(handles.ed_skala_y,'string',1);
set(handles.ed_shear_x,'string',0);
No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 65 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

set(handles.ed_shear_y,'string',0);
set(handles.ed_rotation_degree,'string',0);
% -------------------------------------------------------------------function varargout = btn_tutup_Callback(h, eventdata, handles, varargin)
selection = questdlg(['Keluar ' get(handles.figure1,'name') ' ?'],['Keluar
' get(handles.figure1,'name') '...'],'Ya','Tidak','Ya');
if strcmp(selection,'Tidak')
return;
end;
delete(handles.figure1);

% -------------------------------------------------------------------function varargout = btn_fliph_Callback(h, eventdata, handles, varargin)


temp=handles.citra;
[x y z]=size(handles.citra);
for i=1:1:x
for j=1:1:y
for k=1:1:z
citra_flip(i,j,k)=temp(i,(y-j)+1,k);
end
end
end
handles.citra = citra_flip;
guidata(h,handles);
axes(handles.ax_citra_hasil);
imshow(handles.citra);
set(handles.txt_panjang2,'string',size(handles.citra,1));
set(handles.txt_lebar2,'string',size(handles.citra,2));
% -------------------------------------------------------------------function varargout = btn_flipv_Callback(h, eventdata, handles, varargin)
temp=handles.citra;
[x y z]=size(handles.citra);
for i=1:1:x
for j=1:1:y
for k=1:1:z
citra_flip(i,j,k)=temp((x-i)+1,j,k);
end
end
end
handles.citra = citra_flip;
guidata(h,handles);
axes(handles.ax_citra_hasil);
imshow(handles.citra);
set(handles.txt_panjang2,'string',size(handles.citra,1));
set(handles.txt_lebar2,'string',size(handles.citra,2));
% -------------------------------------------------------------------function varargout = btn_transform_Callback(h, eventdata, handles,
varargin)
hasil = handles.citra;
data = handles.citra;
Tx = str2num(get(handles.ed_trans_x,'string'));
No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 66 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Ty = str2num(get(handles.ed_trans_y,'string'));
Sx = str2num(get(handles.ed_skala_x,'string'));
Sy = str2num(get(handles.ed_skala_y,'string'));
A = str2num(get(handles.ed_shear_x,'string'));
B = str2num(get(handles.ed_shear_y,'string'));
deg = str2num(get(handles.ed_rotation_degree,'string')) *pi/180;
Ttranslation = [1 0 0;
0 1 0;
Tx Ty 1];
Tscale = [Sx 0 0;
0 Sy 0;
0 0 1];
Trotation = [cos(deg) sin(deg) 0;
-sin(deg) cos(deg) 0;
0
0
1];
Tshear = [1 B 0;
A 1 0;
0 0 1];
T4 = Ttranslation * Tscale * Trotation * Tshear;
tform4 = maketform('affine',T4);
%hasil = imtransform(data,tform4,...
%
'XData',[1 (size(data,2)+Ttranslation(3,1))],...
%
'YData',[1 (size(data,1)+Ttranslation(3,2))]);
hasil = imtransform(data,tform4);
handles.citra = hasil;
guidata(h,handles);
axes(handles.ax_citra_hasil);
imshow(handles.citra);
set(handles.txt_panjang2,'string',size(handles.citra,1));
set(handles.txt_lebar2,'string',size(handles.citra,2));

% -------------------------------------------------------------------function varargout = btn_reset_Callback(h, eventdata, handles, varargin)


handles.citra = handles.reset;
guidata(h,handles);
axes(handles.ax_citra_hasil);
imshow(handles.citra);
set(handles.txt_panjang2,'string',size(handles.citra,1));
set(handles.txt_lebar2,'string',size(handles.citra,2));

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 67 dari 68

Laboratorium Rekayasa Perangkat Lunak

Modul Pengolahan Citra

Gambar 10.3 Tampilan Akhir Program Transformasi Geometri 2

TUGAS
1. Tambahkan 2 tombol lagi ke dalam contoh program, untuk efek negatif dan efek filter
mean.

No. Dokumen: IK-GKM-Fasilkom-TI-011-PC

Berlaku Efektif: 30 September 2013

Revisi: 01

halaman 68 dari 68

Вам также может понравиться