Академический Документы
Профессиональный Документы
Культура Документы
No. Dokumen
Edisi
MODUL
Revisi
PRAKTIKUM
Berlaku Efektif
Halaman
DAFTAR ISI
:
:
:
:
:
IK-GKM-Fasilkom-TI-011-PC
01
01
30 September 2013
ii dari ii
KATA PENGANTAR....................................................................................................................i
DAFTAR ISI................................................................................................................................ii
MODUL I
MODUL II
MODUL III
MODUL IV
MODUL V
MODUL VI
IMAGE FILTERING.......................................................................................36
MODUL X
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
Revisi: 01
halaman 1 dari 68
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
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
Revisi: 01
halaman 2 dari 68
Tipe-tipe data :
a. Logical
b. Char
c. Numeric
bilangan bulat bertanda dan tidak bertanda serta bilangan pecahan atau
mengambang dengan presisi tunggal maupun ganda.
d. Cell
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
Revisi: 01
halaman 3 dari 68
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
Revisi: 01
halaman 4 dari 68
akar kuadrat
>>Rad2deg(x)
>>Deg2rad(x)
>>Sin(x)
fungsi sinus
>>Cos(x)
fungsi cosinus
>>Tan(x)
fungsi tangen
>>Round(x)
>>floor(x)
>>ceil(x)
Operator .* merupakan perkalian array. Dimana setiap elemen akan dikalikan dengan elemen
lain. Ini bukan perkalian matriks.
Revisi: 01
halaman 5 dari 68
>>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
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
z=nama variabel
n=posisi baris
m=posisi kolom
>>A=[1 2 3; 2 3 4];
>>A(2,3)
Revisi: 01
halaman 6 dari 68
Ans = 4
Penambahan baris:
Penambahan kolom:
Pengurangan baris:
Revisi: 01
halaman 7 dari 68
Pengurangan kolom:
ones
rand
randn
eye
magic
>> 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()).
Revisi: 01
halaman 8 dari 68
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++.
Revisi: 01
halaman 9 dari 68
MODUL II
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMROGRAMAN M-FILE & MATRIKS LANJUTAN
TUJUAN :
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.
Tekan tombol F5
Dengan memanggil nama file dari command windows. Untuk hal ini, file m-file harus
disimpan pada direktori aktif matlab.
Revisi: 01
halaman 10 dari 68
Revisi: 01
halaman 11 dari 68
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.
Revisi: 01
halaman 12 dari 68
Revisi: 01
halaman 13 dari 68
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.
Revisi: 01
halaman 14 dari 68
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
Baris
Kolo
m
Gambar 2.5 Analogi Matriks 3D
2.3.1 Pendefinisian Matriks 3D
Revisi: 01
halaman 15 dari 68
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
Revisi: 01
halaman 16 dari 68
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);
Revisi: 01
halaman 17 dari 68
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.
Revisi: 01
halaman 18 dari 68
MODUL III
LABORATORIUM PENGOLAHAN CITRA
JUDUL : REPRESENTASI MATRIKS KE CITRA
TUJUAN
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');
Revisi: 01
halaman 19 dari 68
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.
Revisi: 01
halaman 20 dari 68
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');
Revisi: 01
halaman 21 dari 68
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;
Revisi: 01
halaman 22 dari 68
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.
Revisi: 01
halaman 23 dari 68
MODUL IV
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMOGRAMAN IMAGE I
TUJUAN
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);
Revisi: 01
halaman 24 dari 68
biru=citra_asli;
biru(:,:,1)=[0];
biru(:,:,2)=[0];
imshow(biru),title('Representasi Biru (B)');
Revisi: 01
halaman 25 dari 68
Revisi: 01
halaman 26 dari 68
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.
Revisi: 01
halaman 27 dari 68
Revisi: 01
halaman 28 dari 68
Gambar 4.3 : Hasil Tampilan Brightness Negatif, Perkalian Citra, dan Setengah Negatif
TUGAS
1. Tampilkan Figure dengan 4 subplot:
* hati-hati dengan tipe data matriks, apakah menggunakan uint8 atau double !
2. Tampilkan Figure dengan 4 subplot:
Subplot 3: Negatif dari citra asli hanya pada sisi setengah atas citra.(lihat contoh
program terakhir).
Revisi: 01
halaman 29 dari 68
Revisi: 01
halaman 30 dari 68
MODUL V
LABORATORIUM PENGOLAHAN CITRA
JUDUL : PEMOGRAMAN IMAGE II
TUJUAN
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');
Revisi: 01
halaman 31 dari 68
Revisi: 01
halaman 32 dari 68
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).
Revisi: 01
halaman 33 dari 68
Revisi: 01
halaman 34 dari 68
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');
Revisi: 01
halaman 35 dari 68
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');
Revisi: 01
halaman 36 dari 68
Revisi: 01
halaman 37 dari 68
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.
Revisi: 01
halaman 38 dari 68
Revisi: 01
halaman 39 dari 68
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.
Revisi: 01
halaman 40 dari 68
Revisi: 01
halaman 41 dari 68
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');
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;
Revisi: 01
halaman 42 dari 68
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.
Revisi: 01
halaman 43 dari 68
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
Toggle Button
Checkbox
Static Text
Slider
Frame
Listbox
Popup Menu
Axes
Revisi: 01
halaman 44 dari 68
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.
Revisi: 01
halaman 45 dari 68
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)
Revisi: 01
halaman 46 dari 68
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:
Revisi: 01
halaman 47 dari 68
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);
Revisi: 01
halaman 48 dari 68
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:
Type
Axes
2
3
Static Text
Edit Text
Push Button
Property
Tag
XTick
YTick
String
Tag
String
Tag
String
Value
axes_citra
[] (dikosongkan)
[] (dikosongkan)
Brightness :
input_brightness
100
btn_run
Run Brightness
Revisi: 01
halaman 49 dari 68
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);
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
Revisi: 01
halaman 50 dari 68
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:
Revisi: 01
halaman 51 dari 68
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
Revisi: 01
halaman 52 dari 68
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);
Revisi: 01
halaman 53 dari 68
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.
Revisi: 01
halaman 54 dari 68
MODUL IX
LABORATORIUM PENGOLAHAN CITRA
4
5
7
8
9
6
Gambar 9.1 Rancangan Tampilan GUI Program
Revisi: 01
halaman 55 dari 68
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
Revisi: 01
halaman 56 dari 68
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);
Revisi: 01
halaman 57 dari 68
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);
Revisi: 01
halaman 58 dari 68
PERTEMUAN X
LABORATORIUM PENGOLAHAN CITRA
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
Revisi: 01
halaman 59 dari 68
Sesuaikan pengaturan dalam property Inspector dengan cara mengeklik komponen 2 kali, maka
akan tampil jendela property Inspector seperti dibawah ini.
Revisi: 01
halaman 60 dari 68
Pada
function
buka_Callback,
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(...
'*.*','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
Revisi: 01
halaman 61 dari 68
1. Tampilan Awal
Revisi: 01
halaman 62 dari 68
2. TRANSFORMASI GEOMETRI
MATLAB menyediakan fungsi Affine Transform untuk menangani transformasi yang meliputi :
Translation, Scale, Shear, dan Rotation.
Buka GUIDE matlab, lalu rancang tampilan GUIDE Matlab seperti dalam gambar 10.2:
Revisi: 01
halaman 63 dari 68
3
4
11
6
13
14
15
16
10
12
20
17
18
19
21
Revisi: 01
halaman 64 dari 68
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:
Revisi: 01
halaman 65 dari 68
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);
Revisi: 01
halaman 66 dari 68
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));
Revisi: 01
halaman 67 dari 68
TUGAS
1. Tambahkan 2 tombol lagi ke dalam contoh program, untuk efek negatif dan efek filter
mean.
Revisi: 01
halaman 68 dari 68