Anda di halaman 1dari 62

3/24/2014

Image Processing | Akhyar Lubis, S.Kom


UNIVERSITAS
PEMBANGUNAN
PANCA BUDI
MODUL PRAKTIKUM
IMAGE PROCESSING

Daftar Isi
Daftar Isi.................................................................................................................................................. 2
I. PENDAHULUAN ................................................................................................................................... 4
1. Apa itu MATLAB .............................................................................................................................. 4
2. Sistem MATLAB ............................................................................................................................... 4
3. Instalasi Program MATLAB ............................................................................................................. 5
4. Mulai Menjalankan MATLAB ........................................................................................................... 5
5. Menentukan Variabel ..................................................................................................................... 5
6. Bekerja dengan Array ...................................................................................................................... 6
7. Format Data .................................................................................................................................... 7
8. Keluar dari Program MATLAB .......................................................................................................... 8
II. VISUALISASI DATA .............................................................................................................................. 8
1. Plot 2-Dimensi ................................................................................................................................ 8
a. Lebih Jauh Mengenai Plot .......................................................................................................... 13
2. Plot 3 Dimensi ................................................................................................................................ 18
a. Plot Garis .................................................................................................................................. 18
b. Plot Permukaan......................................................................................................................... 19
c. Plot Kontur ............................................................................................................................... 21
III. M-File MATLAB ................................................................................................................................ 23
1. Menampilkan tulisan hello matlab .............................................................................................. 24
2. Fungtion dengan M-File ................................................................................................................ 24
3. M-File dengan inputan keyboard................................................................................................... 25
4. Contoh Kasus ................................................................................................................................ 26
a. Menghitung Luas Permukaan dan Volume Balok ....................................................................... 26
b. Menghitung n Suku Pertama dari Deret Aritmatika ................................................................... 26
c. Matrik ....................................................................................................................................... 26
IV. FILE CITRA PADA MATLAB ............................................................................................................... 27
1. Image Digital ................................................................................................................................. 27
2. Membaca dan menampilkan file Citra ........................................................................................... 28
3. Membaca informasi file gambar ................................................................................................... 31
4. Reading an Image File ................................................................................................................... 31
5. Data Classes and Data Conversions ............................................................................................... 31
a. Sample 1: ................................................................................................................................... 32
b. Sample 2 : .................................................................................................................................. 32
6. GUI Membaca file citra ................................................................................................................. 33
V . IMAGE CROPPING, RESIZING, FLIPPING, dan ROTATION.................................................................. 36
1. Pemotongan Citra (Crop) ............................................................................................................... 36
2. Fungsi flipud dan fliplr.................................................................................................................... 38
3. Fungsi imrotate .............................................................................................................................. 38
4. Image Resize GUI ......................................................................................................................... 39
VI. GRAY-LEVEL TRANSFORMATIONS .................................................................................................... 45
VII. HISTOGRAM PROCESSING .............................................................................................................. 49
VII. NEIGHBORHOOD PROCESSING ...................................................................................................... 51
1. SMOOTHING FILTERS IN THE SPATIAL DOMAIN ............................................................................. 51
VIII. DETEKSI TEPI ................................................................................................................................. 53
1. Edge Detection Using the Prewitt Operator ................................................................................... 53
2. Edge Detection Using the Sobel Operator ..................................................................................... 54
3. Edge Detection with the Roberts Operator.................................................................................... 55
4. Edge Detection with the Laplacian of a Gaussian Operato .............................................................. 55
5. Edge Detection with the Canny Operator ....................................................................................... 56
6. Edge Detection with the Kirsch Operator ....................................................................................... 57
7. Edge Detection with the Robinson Operator ................................................................................. 59
IX. Perbaikan kualitas Citra ................................................................................................................... 59
1.Operasi titik penambahan dan pengurangan intensitas ................................................................... 60
a.Operasi titik melalui ekualisasi histogram .................................................................................... 60
2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik LPF .............................................. 60
a. Operasi ruang, perbaikan dilakukan menggunakan mask matrik HPF.......................................... 61
b.Operasi ruang, perbaikan dilakukan menggunakan median filter ................................................ 62









I. PENDAHULUAN
1. Apa itu MATLAB
Merupakan sebuah bahasa (pemrograman) dengan unjuk kerja tinggi (hight performance) untuk
komputasi teknis, yang mengintegrasikan komputasi, visualisasi, dan pemrograman didalam lingkungan
yang mudah penggunaanya dalam memecahkan persoalan dengan olusinya yang dinyatakan dengan
notasi matematik. Penggunaan MATLAB yaitu :
Matematika dan komputasi
Pengembangan Algoritma
Pemodelan, Simulasi dan pembuatan prototype
Analisis data, eksplorasi dan visualisasi
Grafik untuk sains dan teknik
Pengembangan Aplikasi, termasuk pembuatan antarmuka grafis untuk pengguna (GUI)

2. Sistem MATLAB
System MATLAB terdiri dari 5 bagian utama, yaitu :
1. Bahasa (pemgroman) MATLAB
Bagian ini adalah bahasa (pemrograman) tingkat tinggi yang menggunakan matrik/array dengan
pernyataan aliran kendali program, struktur data, masukan/keluaran, dan fitur fitur
pemrograman berorientasi objek.
2. Lingkungan kerja MATLAB
Merupakan sekumpulan perkakas dan fasilitas MATLAB yang digunakan oleh penguna atau
pemrogram. Misalnya untuk mengelola variable di dalam ruang kerja (workspace) dan
melakukan impor dan ekspor data.
3. Penanganan Grafik
Merupakan system grafik MATLAB, termasuk perintah-perintah (program) tingkat tingi untuk
visualisasi data dimensi 2 dan dimensi 3, pengolahan citra, animasi dan presentasi grafik.
4. Pustaka (library) fungsi matematis MATLAB
Merupakan koleksi algoritma komputasi mulai dari fungsi dasar seperti menjumlahkan (Sum),
menentukan nilai sinus (sine), kosinus(cosine) dan aritmatika bilangan kompleks; fungsi fungsi
seperti invers matrik, nilai eigen matriks, fungse Bessel dan FFT (fast Fourier Transform)
5. API (Application Program Interface) MATLAB
Bagian ini adalah pustaka (library) untuk menuliskan program dalam bahasa C dan Fortran yang
berinteraksi dengan MATLAB, termasuk fasilitas untuk memanggil rutin program dari MATLAB
(dynamic linking), memanggil MATLAB sebagai mesin komputasi, dan untuk pembacaan serta
penulisan MAT-Files.

3. Instalasi Program MATLAB
Program MATLAB umumnya dalam bentuk CD ROM master program yang harus terlebih dahulu harus
dilkaukan instalasi ke dalam hardisk. Berikut video instalasi bagaimana instalasi MATLAB.

4. Mulai Menjalankan MATLAB
Untuk memulai program MATLAB dilingkungan Window, klik ganda pada ikon MATLAB dari desktop,
atau klik start > All Program > Matlab > Matlab 7.0

5. Menentukan Variabel
Contoh :
Data array : A = 1, 0, 9, 11, 5 akkkan mengunakan matriks dengan dimensi 1x5, sedangkan
sebuah angka scalar 9 akan menggunakan matriks dengan dimensi 1x1 . Untuk menyimpan array A di
MATLAB, dicommand prompt >> masukkan :

>> A = [1 0 9 11 5]
>> A = [1 0 9 11 5];

MATLAB akan menampilkan kembali masukan :
A =
1 0 9 11 5
Untuk meniadakan tampilan kembali dari masukan data, tambahkan tanda ; pada akhir baris masukan.
Untuk memastikan ukuran dari array masukan atau matriks, maka dapat menggunakan perintah size
>> size (A)
Ans =
1 5
Arti ans adalah dimensi dari matriks A adalah 1x5 (1 baris dan 5 kolom)


Contoh ke 2 :
>> B = [1,0,9,4,3;0,8,4,2,7;14,90,0,43,25]
Bagaimana hasilnya?
Contoh ke 3 :
>> C=B(2,:)
Contoh ke 4 :
>> D=[B(1,2),B(1,4);B(3,2),B(3,5)]
Menghapus baris dan kolom dari matriks dengan sepasang tanda kurung siku.
Contoh
>> B(:,3)=[]

6. Bekerja dengan Array

Contoh : gunakan matriks A dan B dengan nilai elemen elemen sebagai berikut :
A = B =
1 2 3 2 4 6
4 5 6 0 3 7
7 8 0 9 8 1

+ (penjumlahan) : >> C=A+B
- (pengurangan) : >> C=A-B
* (perkalian) : >> C=A*B
.* (perkalian titik) : >> C=C.*A
Perkalian bentuk ini tidak sama dengan cara perkalian 2 buah matriks) jadi tidak sama dengan
c=A*B
/ (pembagian oleh matriks : >> C=A/B
Pembagian oleh matriks B terhadap matriks A
\ (pembagian matriks kiri : >> C=A\B
Pembagian A ke B. Pembagian ini ekuivalen dengan inv(A)*B. Sedangkan X=C adalah solusi dari
A*X=B
./ (pembagian elemen per elemen, : >> D=A./B
.\ (pembagian kiri elemen per elemen. >> E=A.\B
.^ (pangkat elemen per elemen >> F=A.^B

Pada teori tentang matriks, dikenal istilah yang disebut transpose dan invers. Di Matlab, untuk
mendapatkan transpose matriks dengan menggunakan notasi () setelah mendefenisikan suatu matriks,
seperti

7. Format Data
Matlab mengenal bilangan floating point dengan format single precision atgau double precision. Pada
double precision menggunakan 64 bit, sedangkan format bilangan single precision enggunakan 32
bit .
Short e (notasi sains, 5 digit floating point)
Long e (5 digit untuk single dan 15 digit untuk double precision)
Short g (5 digit) format default
Long g (7 digit untuk single precision dan 15 digit untuk untuk double precision)
Format bank (2 digit decimal)
Format rat (rasional)
Format hex (heksadesimal)
Format loose (line feed added)
Format compact (line feed suppressed)
Lakukan beberapa perintah berikut ini pada comman line matlab :
>> w=pi/2
>> Format long e
>> W
>> format short e
>> W
>> format long g

8. Keluar dari Program MATLAB
Pada comman line ketikkan : exit, atau ctrl+q

II. VISUALISASI DATA
1. Plot 2-Dimensi
Untuk memvisualisasi data secara 2-dimensi ataupun 3-dimensi, dapat menggunakan berbagai
command plotting; di mana command yang paling dasar ialah plot. Anda bisa praktekan contoh berikut
ini.
>> x = 1:8; y=[20 22 25 30 28 25 24 22];
>> plot(x,y)
Akan muncul window baru berisi figure hasil plotting. Perhatikan kegunaan dari ikon yang ada.


Gambar 1 Jendela Figure

Seperti yang dilihat, titik (1,20), (2,22), (3,25), (4,30), dan seterusnya terhubung dengan garis lurus.
Sekarang dapat dicoba dengan membalik urutan sintaks dan mengamati grafik yang dihasilkan!
>> plot(y,x)
Setiap gambar di figure window, bisa di print melalui menu File Print (Ctrl+P), atau Anda simpan
sebagai file FIG dengan File Save (Ctrl+S), ataupun Anda ekspor sebagai file JPG, EMF,BMP, dsb
dengan FileExport.
Untuk menambahkan judul, label, dan grid ke dalam hasil plot Anda, digunakan command berikut ini.
Tabel 1.
xlabel
ylabel
title
grid on
grid off

memberi label pada sumbu-x
memberi label pada sumbu-y
memberi judul di atas area plot
memunculkan grid di dalam area plot
menghapus grid

Kita akan memplot kurva y = x
3
pada rentang x = -3 hingga x = +3.
>> clear
>> x=-3:0.1:3; %inkremen=0.1 agar kurva terlihat mulus
>> y=x.^3;
>> plot(x,y)
>> xlabel('Sumbu X'), ylabel('Sumbu Y')
>> title('Kurva Y=X^3')
>> grid on

Gambar 2. Contoh plot: kurva Y = X3

Ketika menggunakan command plot, gambar sebelumnya di figure window akan terhapus. Lalu
bagaimana jika kita ingin memplot beberapa fungsi dalam satu figure sekaligus? Dalam hal ini kita bisa
gunakan command hold.
Tabel 3. Tabel Hold
hold on

hold off
untuk menahan gambar sebelumnya supaya
tak terhapus ketika ditimpa gambar baru
untuk menonaktifkan command hold


Berikut ini contoh memplot beberapa kurva eksponensial negative sekaligus



Gambar 3. Hasil plot dengan hold on




a. Lebih Jauh Mengenai Plot
Matlab memungkinkan dapat memplot beberapa fungsi dalam beberapa figure window yang terpisah,
atau membagi satu window menjadi sejumlah area plot, ataupun mengatur properties dari plot yang
akan digambar. Beberapa command di bawah ini bisa digunakan untuk tujuan tersebut.
Figure

figure(k)
subplot(m,n,k)

clf
Menciptakan figure window baru yang kosong
dan siap untuk di-plot
Untuk menduduki figure window nomor-k
Membagi figure window menjadi m-baris n-kolom area
plot yang terpisah, dan menduduki area ke-k
clear figure, mengosongkan figure window
yang sedang diduduki

Misalkan figure window berikut dibagi menjadi 2-baris 2-kolom dengan subplot. Perhatikan urutan
nomor area dari kiri-atas ke kanan-bawah.

Gambar 4. Pembagian area plot dengan subplot






Tabel Lanjutan

Misalkan:
plot(x,y,r-) memplot x versus y dengan garis utuh warna merah
plot(x,y,k*) menempatkan tanda * warna hitam untuk setiap titik x versus y.
plot(x,y,g--s) memplot dengan garis putus-putus warna hijau dan menempatkan tanda bujur
sangkar di setiap titik x versus y.
Perlu diingat bahwa string dalam plot bersifat opsional. Apabila tidak dituliskan maka digunakan garis
utuh warna biru.
Tabel Lanjutan
plot(x1,y1,string1,x2,y2,string2,x3,y3,string3, ... )
menciptakan sejumlah plot sekaligus dalam satu area plot: x1 versus y1 dengan property
string1, x2 versus y2 dengan property string2, dan seterusnya
legend(ket1,ket2,ket3, ...)
menambahkan legenda ke dalam plot yang telah dibuat; ket1 untuk plot pertama, ket2 untuk
plot kedua, dan seterusnya
axis off
menghilangkan tampilan sumbu koordinat pada plot
axis on
menampakkan kembali sumbu koordinat
axis([x_awal x_akhir y_awal y_akhir])
membuat tampilan area plot pada batas-batas nilai x = x_awal hingga x_akhir, dan nilai y =
y_awal hingga y_akhir
axis equal
mengubah skala sumbu-x dan sumbu-y menjadi sama
axis square
mengubah bentuk area plot menjadi bujur sangkar


Berbagai fungsi yang berkaitan dengan plot di atas, berlaku pula untuk plot diskrit, plot logaritmik dan
plot dalam koordinat polar.

Pertama, kita akan mencoba memplot kurva eksponensial negative.
>> clear
>> x=linspace(0,5,500);
>> y1=exp(-x); y2=exp(-0.5*x); y3=exp(-0.25*x);
>> y4=exp(-0.1*x);
>> plot(x,y1,x,y2,x,y3,x,y4)
>> grid on
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Kurva y = exp(-Ax)')
>> legend('A=1','A=0.5','A=0.25','A=0.1')
Kemudian, kita coba memplot kurva tersebut dalam skala semilogaritmik
>> figure
>> semilogy(x,y1,x,y2,x,y3,x,y4)
>> grid on
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Kurva y = exp(-Ax)')
>> legend('A=1','A=0.5','A=0.25','A=0.1')
Misalkan kita ingin menyempitkan area plot pada y = 1 hingga 10
-2
saja, maka:
>> axis([0 5 1e-2 1])

Gambar 5 Contoh plot semi-logaritmik
>> figure
>> t=0:0.05:10;

>> sinus=sin(2*pi*0.25*t);
>> cosinus=cos(2*pi*0.25*t);
>> kotak=square(2*pi*0.25*t);
>> gigi=sawtooth(2*pi*0.25*t);

>> subplot(2,2,1);
>> plot(t,sinus), title('sinus 1/4 Hz')

>> subplot(2,2,2);
>> plot(t,cosinus), title('cosinus 1/4 Hz')


>> subplot(2,2,3);
>> plot(t,kotak), title('kotak 1/4 Hz')

>> subplot(2,2,4);
>> plot(t,gigi), title('gigi gergaji 1/4 Hz')



Gambar 6 Contoh penggunaan subplot

Dalam contoh ketiga, kita akan mencoba memplot suatu fungsi matematis dalam koordinat polar.
Diinginkan plot fungsi:

= sin
2
(3)

dalam MATLAB dituliskan

>> figure
>> theta=linspace(0,2*pi,500);
>> rho=(cos(theta.*3)).^2;
>> polar(theta,rho);




Gambar 7 Contoh plot dengan command polar


2. Plot 3 Dimensi
Dalam subbab ini akan dibahas tiga macam plot 3-dimensi: plot garis, plot permukaan (surface), dan plot
kontur.
a. Plot Garis
Ini mirip dengan plot 2-dimensi, tetapi kali ini kita gunakan command plot3( ... ), dan dibutuhkan vektor
z, untuk dimensi ketiga.



Gambar 8 Contoh plot 3-dimensi dengan command plot3
contoh yang lain untuk menggambarkan helix.
>> t=0:0.1:25;
>> X=sin(t); Y=cos(t); Z=0.5*t;
>> plot3(X,Y,Z)
>> xlabel(sumbu X); ylabel(sumbu Y);
>> zlabel(sumbu Z);
>> title (Helix);

b. Plot Permukaan
Sementara itu, untuk plot permukaan (surface) dalam ruang 3-dimensi digunakan command mesh atau
surf. Contoh berikut ini menggambarkan fungsi dua variabel z = x2 + y2.
Caranya ialah:
1) Definisikan batas-batas nilai x dan y yang akan diplot
1. Gunakan command meshgrid untuk mengisi bidang-XY dengan jalinan titik
2) Hitunglah fungsi 3-dimensi untuk jalinan titik tersebut
3) Buatlah plot dengan command mesh atau surf.
Sebagai contoh:
>> batas_x = -10:1:10; batas_y = -10:4:10;
>> [X,Y] = meshgrid(batas_x,batas_y);
>> Z = X.^2 + Y.^2;
>> mesh(X,Y,Z);
Kini Anda mendapatkan plot 3-dimensi. Kini cobalah
>> surf(X,Y,Z);

Gambar 10 Hasil plot dengan mesh dan surf
Amatilah perbedaan hasil antara mesh dan surf ! Anda juga bias menambahkan label dan title
seperti plot pada umumnya.
Sekarang kita coba contoh yang lain untuk memplot fungsi 3- dimensi



Gambar 11 Plot 3-dimensi dari fungsi sin(r) / r
di sini kita menggunakan variabel eps, untuk mencegah perhitungan 0/0 ketika R = 0.

c. Plot Kontur
Fungsi dua variabel, misalkan z = f(x,y) bisa kita gambarkan konturnya dalam dua dimensi dengan
command berikut ini:
Tabel 5


Mari kita gambarkan kontur dari fungsi sin(r)/r di atas, lalubandingkan dengan plot permukaannya:
>> figure; contour(X,Y,Z);
>> figure; meshc(X,Y,Z);


Gambar 12 Contoh plot kontur










III. M-File MATLAB

Pemrograman dengan M-File Matlab memberikan kontrol lebih banyak dibandingkan dengan
pemrograman dengan Command Window seperti yang dibicarakan sebelumnya. Dengan M-File kita bisa
melakukan percabangan, perulangan, pembuatan fungsi, dan lain - lain. Struktur Program M-File mirip
dengan bahasa C yang membagi blok program berupa fungsi-fungsi. Tiap fungsi dapat memanggil fungsi-
fungsi yang lain. Script dalam Command Window berguna untuk menyelesaikan permasalahan yang
pendek. Sebaliknya M-File dapat dipakai untuk membuat berbagai aplikasi sesuai keinginan pemakai.
Dalam bab ini dibahas tentang dasar-dasar pembuatan program dalam M-File. Program-program yang
membutuhkan fungsi yang lebih kompleks contohnya dapat dilihat pada Demo atau Help yang menjadi
fasilitas Matlab. Jendela M-File dapat dibuka melalui menu File->New->M->File atau langsung saja
dengan menekan Ctrl+N. Jendela M-File terlihat seperti pada gambar di bawah ini.

Gambar Jendela M-File Matlab

Beberapa hal yang harus diperhatikan pada saat menyimpan m-file :
a. Nama file tidak boleh ada spasinya
b. Nama file tidak boleh merupakan reserved word (instruksi)
c. Nama file tidak boleh diawali dengan angka.


1. Menampilkan tulisan hello matlab
Untuk memulai program pada M editor, berikut langkahnya
1. Isikan pada m editor
disp ('Hello Matlab')
2. Selanjutnya simpan dengan nama hello.m
3. Pada jendela command window, panggil hello tersebut.

Gambar pemanggilan file hello.
Pemangilan hanya nama saja tanpa adanya extention.

2. Fungtion dengan M-File
Salah satu kemampuan M-File yang begitu baik adalah membuat fungsi. Seperti layaknya fungsi - fungsi
yang sudah terdefinisi di Matlab, kita juga bisa membuat fungsi sendiri yang bisa dipanggil layaknya
fungsi bawaan Matlab.
Bentuk deklarasi sebuah fungsi dalam Matlab adalah sebagai berikut :
function <argumen_keluaran>=<nama_fungsi><argumen_masukan>

Sebagai contoh adalah bentuk deklarasi untuk menghitung luas sebuah persegi panjang :
function Luas = FLuas (panjang,lebar)

Untuk memudahkan pemahaman akan dibuat contoh pembuatan fungsi yang lengkap. Fungsi yang
dibuat adalah fungsi untuk menghitung luas persegi panjang seperti contoh definisi di atas tadi. Berikut
ini adalah fungsi lengkapnya.
function Luas = FLuas (panjang,lebar)
Luas=panjang*lebar;

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


3. M-File dengan inputan keyboard
Instruksi untuk input data dari keyboard :
Syntax
nama_var =input('Teks yang muncul dilayar '); %data numerik
nama_var =input('Teks yang muncul dilayar ',s); %data string

Instruksi untuk menampilkan output di layer :
Syntax:
disp('Teks output');
disp(nama_var);
fprintf('Teks output ');
fprintf('Teks = ',nama_var);

Variabel yang akan ditampilkan dilayar, jika menggunakan instruksi fprintf harus diformat terlebih
dahulu, seperti halnya pada C.
Penggunaan \n dapat ditambahkan seperti halnya pada C
Untuk memudahkan pemahaman, lihat contoh di bawah ini. Di sini akan dibuat program untuk
menghitung luas trapesium. Inputan yang ditampilkan adalah Sisi Alas,Sisi Atas, dan tinggi.
clc;
clear;
a=input(Masukkan panjang Sisi Alas : );
b=input(Masukkan panjang Sisi Atas : );
t=input(Masukkan tinggi : );
Luas=0.5*(a*b)*t;
disp(Luas Trapesium adalah : )
disp(Luas)

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


4. Contoh Kasus
a. Menghitung Luas Permukaan dan Volume Balok
Menghitung Luas Permukaan dan Volume Balok. Untuk menyelesaikan permasalahan ini kita akan
memakai inputan yang tetap berupa panjang, lebar, dan tinggi. Untuk output dari program ini adalah
berupa Luas Permukaan dan Volume balok yang akan ditampilkan pada Command Window di Matlab.
clc;clear;
panjang=10;
lebar=5;
tinggi=4;
Luas=2*panjang*lebar+2*panjang*tinggi+2*lebar*tinggi
Volume=panjang*lebar*tinggi

b. Menghitung n Suku Pertama dari Deret Aritmatika
.Untuk membuat program ini, akan dipakai masukan berupa nilai suku pertama, nilai beda, dan nilai n.
Inputan akan dibuat dinamis yang dapat langsung diinputkan dari keyboard ketika running program
berlangsung. Hasil dari program ini yang berupa n suku pertama dari deret Aritmatika juga akan
ditampilkan dalam Command Window.
clear;
a=input('Masukkan suku pertama : ');
b=input('Masukkan beda : ');
n=input('Masukkan nilai n : ');
for i=1:n
hasil(i)=a+b*(i-1);
end
hasil

c. Matrik
% Contoh 2
% menjumlahkan dua matrik
clc;clear;
a1=input('Masukkan matrik pertama: ');
a2=input('Masukkan matrik kedua : ');
a3=a1+a2;
disp('Hasilnya');
disp(a3);

Untuk program diatas inputkan matrik-matrik berikut:
a. a1=

5 2 3
6 4 1
dan a2 =

4 3 6
5 1 2

Bagaimana outputnya?
b. a1 =

5 2 3
6 4 1
dan a2 =

9 8 7
6 5 4
3 2 1

Bagaimana outputnya ?
Agar kasus tersebut bisa kita handle maka ubah program diatas menjadi seperti berikut:
% Contoh 3
% menjumlahkan dua matrik
clc;clear;
a1=input('Masukkan matrik pertama: ');
a2=input('Masukkan matrik kedua : ');
[b1,k1]=size(a1);
[b2,k2]=size(a2);
if (b1==b2)&(k1==k2)
a3=a1+a2;
disp('Hasilnya');
disp(a3);
else
disp('Matrik tidak dapat dijumlahkan');
end


IV. FILE CITRA PADA MATLAB
1. Image Digital
Kakas pada pengolahan citra pada Matla menyediakan berbagai macam teknik untuk menampilkan citra.
Pada Pertemuan ke 4 ini akan dijelakan mengenalkan teknik standar dalam menampilkan citra,
menjelaskan teknik khususu menampilkan citra dan menjelaskan pencetakan citra.
Sebuah citra digital adalah kumpulan piksel-piksel yang disusun dalam larik dua dimensi. Indeks baris
dan kolom (x,y) dari sebuah piksel yang dinyatakan dalam bilangan bulat dan nilai-nilai tersebut
mendefinisikan suatu ukuran intensitas cahaya pada titik tersebut. Satuan atau bagian terkecil dari suatu
citra disebut piksel (picture element).
Umumnya citra dibentuk dari persegi empat yang teratur sehingga jarak horizontal dan vertikal antara
piksel satu dengan yang lain adalah sama pada seluruh bagian citra. Piksel (0,0) terletak pada sudut kiri
atas pada citra, dimana indeks x bergerak ke kanan dan indeks y bergerak ke bawah. Untuk
menunjukkan koordinat (m-1,n-1) digunakan posisi kanan bawah dalam citra berukuran m x n pixel. Hal
ini berlawanan untuk arah vertikal dan horizontal yang berlaku pada sistem grafik dalam matematika.
Video sebenarnya juga merupakan salah satu bentuk dari citra digital. Video merupakan kumpulan dari
beberapa frame dari citra digital. Satu frame merupakan satu citra digital. Oleh karena itu, apabila di
video ada satuan yang menyatakan 12 fps(frame persecond) artinya bahwa video tersebut memainkan
12 frame/citra digital dalam tiap detiknya1. Membaca file citra Untuk membaca file citra, kita dapat
menggunakan perintah imread yang berarti image read. Output dari imread ini berupa matrix citra 3
dimensi untuk citra berwarna, ataupun matrix 2 dimensi untuk citra monokrom.

2. Membaca dan menampilkan file Citra

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

dengan syarat file yang dibaca berada pada direktori yang aktif. File yang dibaca kemudian disimpan
dalam variabel "A" dalam bentuk matriks penyusun citra.
Perintah ini digunakan untuk membaca beberapa format file citra diantaranya :

Sedangkan untuk menampilkan file citra yang telah dibaca digunakan perintah :


Untuk contoh kedua, kita masih akan membaca file yang sama, akan tetapi kali ini akan diambil masing -
masing matriks penyusun citra (matriks R, matriks G, danMatriks B) karena memang file yang dibaca
adalah gambar RGB (berwarna). Semua matriks ini kemudian akan ditampilkan ke dalam 1 figure (plot).
Berikut ini adalah listing :
clc;
clear;
A=imread('logopancabudi.jpg');%Membaca file citra
red=A(:,:,1);%Mengambil matriks penyusun citra merah
green=A(:,:,2);%Mengambil matriks penyusun citra hijau
blue=A(:,:,3);%Mengambil matriks penyusun citra biru
subplot(2,2,1)
imshow(A)
subplot(2,2,2)
imshow(red)
subplot(2,2,3)
imshow(green)
subplot(2,2,4)
imshow(blue)

hasil setelah di running

Terlihat bahwa untuk mengambil nilai piksel merah memiliki indeks 1, warna hijau memiliki indeks 2
dan warna biru memiliki indeks 3.
Untuk membaca file citra yang berbeda direktori dengan direktori yang aktif adalah dengan menuliskan
direktori tempat file berada + nama_file. Misalkan filenya berada pada direktori "D:/Picture", maka
tinggal ditulis saja :
A=imread('D:/Picture/logopancabudi.jpg')

gambar=imread('logopancabudi.jpg'); %--------membaca file gambar
red=gambar(:,:,1); %memanggil matriks gambar yang hanya berisi piksel warna
merah
green=gambar(:,:,2);% memanggil matriks gambar yang hanya berisi piksel warna
hijau
blue=gambar(:,:,3); %memanggil matriks gambar yang hanya berisi piksel warna
biru
imshow(red)
imshow(green)
imshow(blue)




3. Membaca informasi file gambar

imfinfo(pout.tif);

4. Reading an Image File
IPT berisi fungsi yang khusus untuk membaca file DICOM (Digital Imaging and Communications in
Medicine) files (dicomread), file NITF (National Imagery Transmission Format) files (nitfread), and HDR
(high dynamic range) (hdrread).

5. Data Classes and Data Conversions
Ketersediaan IPT dalam membaca berbagai type gambar, menyimpannya dalam array dan membuat nya
tersedia untuk dilakukan prosesing dan ditampilkan dan itu buth pengetahuan bagaimana menampilkan
kontent image yang dibutuhkan yang akan direpresentasikan didalam memory.
Bagian class image dapat ditunjukkan seperti dibawah ini :
uint8: 1 byte per pixel, in the [0, 255] range
double: 8 bytes per pixel, usually in the [0.0, 1.0] range
logical: 1 byte per pixel, representing its value astrue(1 or white) orfalse (0 or black)


a. Sample 1:

I = imread(pout.tif);
imshow(I)
figure, imshow(I,[])
figure, imshow(I,[100 160])

The first call toimshowdisplays the image in its original state. The following line opens a new figure and
displays a scaled (for display purposes) version of thesame image. The last line specifies a range of gray
levels, such that all values lower than 100 will be displayed as black and all values greater than 160 will
be displayed as white

b. Sample 2 :
In this example, we will read an image from a PNG file and save it to a JPG file using three different
quality parameters: 75 (default), 5 (poor quality, small size), and 95 (better quality, larger size).

I = imread(peppers.png);
imwrite(I, pep75.jpg);
imwrite(I, pep05.jpg, quality, 5);
imwrite(I, pep95.jpg, quality, 95);




6. GUI Membaca file citra
1. Desian figure
Desain figure seperti dalam Gambar 1. Dalam meletakkan komponen pallete boleh tidak
sesuai dengan gambar (sesuai selera)


2. Mengatur Layout Komponen
Setelah kita selesai mendesain figure, aturlah masing masing komponen menggunakan property
inspector.


3. Menyimpan figure
Setelah selesai mendesain figure, langkah selanjutnya adalah menyimpan figure, beri nama
aplikasi_citra.fig, secara otomatis kita akan dibuatkan kerangka m-file dengan nama yang sama.
4. Memprogram M-File
Tambahkan bebrapa program kode pada rutin callback yang diperlukan, antra lain:
btn_buka
Di bawah function btn_buka_callbck, tambahkan program menjadi 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 asli');
if ~isequal(nama_file1, 0)
handles.data1=imread(fullfile(nama_path1, nama_file1));
guidata(hObject, handles);
handles.current_data1=handles.data1;
axes(handles.axes1);
imshow(handles.current_data1);
else
return
end
set(handles.edit1, 'String', nama_file1);
set(handles.edit2, 'String', size(handles.data1,1));
set(handles.edit3, 'String', size(handles.data1,2));


btn_tutup
%untuk keluar dari apalikasi
delete(handles.figure1)







V . IMAGE CROPPING, RESIZING, FLIPPING, dan ROTATION

Tujuan :
- Mahasiswa dapat mengetahui bagaimana mengcrop, resize dan merotasi citra digital
Objektif :
- Belajar bagaimana melakukan crop citra menggunakan fungsi imcrop
- Belajar bagaimana melakukan resize citra menggunakan fungsi imresize
- Belajar bagaimana melakukan flip citra menggunakan fungsi flipup dan fliplr
- Belajar bagaimana melakukan putaran citra menggunakan fungsi imrotate
Prosedure :
1. Pemotongan Citra (Crop)
Dalam sesi ini, kamu akan belajar bagaimana melakukan pemotongan gambar (crop). Crop dalam matlab
dapat dilakukan dengan interaktif menggunakan Image Tool (imtool) atau menggunakan progam
menggunakan fungsi imcrop.
1. Buka gambar cameraman dan gunakan crop image dengan tool (imtool) Selanjutnya dapat
disimpan dengan menu File Save as Simpan dengan nama cropped_building.png

I = imread(cameraman.tif);
imtool(I)

2. Bagaimana membuka gambar hasil crop tersebut dalam matlap?

3. Fungsi imcrop, terdapat empat vector, [xmin ymin width height]
4. Lakukan hal dibawah ini untuk menggantikan nilai untuk x1, y1, x2, and y2 dengan nilai yang
diinginkan
x1 = 186; x2 = 211; y1 = 105; y2 = 159;
xmin = x1; ymin = y1; width = x2-x1; height = y2-y1;
I3 = imcrop(I, [xmin ymin width height]);
imshow(I3)








5. Merubah Ukuran kembali dapat dilakukan dengan fungsi imresize
I_big1 = imresize(I,3);
figure, imshow(I), title(Original Image);
figure, imshow(I_big1), ...
title(Enlarged Image w/ bicubic interpolation);

6. Dengan menggunakan imtool melihat detail pixel dari gambar. Penambahan fasilitas zoom
merupakan pembesaran dalam bentuk visual.
imtool(I_big1)

7. Lakukan kembali pembesaran gambar dengan nearest-neighbor dan bilinear interpolations.
I_big2 = imresize(I,3,nearest);
I_big3 = imresize(I,3,bilinear);
figure, imshow(I_big2), ...
title(Resized w/ nearest-neighbor interpolation);
figure, imshow(I_big3), ...
title(Resized w/ bilinear interpolation);

Perhatikan perbedaan dari gambar tersebut. Bagaimana mereka berbeda? One way to shrink an
image is by simply deleting rows and columns of the image.
8. Tutup semua gambar yang terbuka,
9. Kurangkan ukuran dari gambar cameraman dari 0,5 dimensi sebenarnya.
I_rows = size(I,1);
I_cols = size(I,2);
I_sm1 = I(1:2:I_rows, 1:2:I_cols);
figure, imshow(I_sm1);

Pertanyaan, Bagaimana gambar tersebut mengalamai perubahan ukuran?
10. Shrink image menggunakan fungsi imresize

I_sm2 = imresize(I,0.5,'nearest');
I_sm3 = imresize(I,0.5,'bilinear');
I_sm4 = imresize(I,0.5,'bicubic');
figure, subplot(1,3,1), imshow(I_sm2), ...
title('Nearest-neighbor Interpolation');
subplot(1,3,2), imshow(I_sm3), title('Bilinear Interpolation');
subplot(1,3,3), imshow(I_sm4), title('Bicubic Interpolation');

Note that in the case of shrinking using either bilinear or bicubic interpolation,
theimresizefunction automatically applies a low-pass filter to the image (whose default size is 1111),
slightly blurring it before the image is interpolated. This helps to reduce the effects of aliasing during
resampling

2. Fungsi flipud dan fliplr
1. Tutup semua gambar dan bersihkan semua variable yang telah digunakan.
I = imread('cameraman.tif');
J = flipud(I);
K = fliplr(I);
subplot(1,3,1), imshow(I), title('Original image')
subplot(1,3,2), imshow(J), title('Flipped upside-down')
subplot(1,3,3), imshow(K), title('Flipped left-right')




3. Fungsi imrotate

1. Tutup semua gambar yang telah terbuka, bersihkan kembali variabelnya.
2. Rotasikan gambar eight.tif dengan sudut 35
0


I = imread('eight.tif');
I_rot = imrotate(I,35);
imshow(I_rot);
amati ukuran gambar, (bilangan baris dan kolom)dari I_rot bandingkan dengan ukuran I .
Mengapa mereka berbeda?
Dapat juga menggunakan interplasi metode yang berbeda ketika melakukan perputaran image.
3. Rotasikan gambar yang sama menggunakan biliner interpolation

I_rot2 = imrotate(I,35,'bilinear');
figure, imshow(I_rot2)

Bagaimana biliner interpolation dapat memberikan effek pada rotasi gambar tersebut?
4. Lakukan rotasi pada gambar yang sama, namun outputnya dilakukan crop

I_rot3 = imrotate(I,35,bilinear,crop);
figure, imshow(I_rot3)

Bagaimana crop tersebut mempengaruhi ukuran dari keluaran nya?

4. Image Resize GUI
Untuk dapat mengubah ukuran dari citra, dapat dilakukan dengan cara sebagai berikut :
1. Ketikkan pada command window untuk merubah current directory matlab dan metode wizard
>> cd 'E:\image'
>> guide
2. Selanjutnya piih blank gui dan pilih ok

3. Buat panel pada lembaran kerja dan pada property dan atur property inspector pada gambar
dibawah ini.


4. Selanjutnya tambahkan static text untuk nama citra dan lokasi.

5. Tambahkan edit text untuk penamaan citra

6. Lakukan hal yang sama untuk lokasi.

7. Selanjutnya, tambahkan tombol push button untuk browser image. Kemudian atur properti
inpectornya.





8. Tambahkan Pup up menu, atur properti inspectornya.

9. Hasil Akhiar GUI

10. Simpan menjadi Image_resize.
11. Tambahkan script dibawah ini :
a. Fungsi image resize
function image_resize_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to image_resize (see VARARGIN)

% Choose default command line output for image_resize
handles.output = hObject;
set(handles.axes1,'Visible','off');

b. Executes on button press in loadimage.
% --- Executes on button press in loadimage.
function loadimage_Callback(hObject, eventdata, handles)
global x
[filename, pathname] = uigetfile('*.jpg','load image');
if filename==0
msgbox ('Silahkan pilih citra','Error','Error')
return
end

x=imread(filename);
axes(handles.axes1);

imshow(x);title('Loaded Image');

set(handles.edit1,'string',filename);
set(handles.edit2,'string',pathname);

c. Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenu1
contents as cell array
% contents{get(hObject,'Value')} returns selected item from
popupmenu1
global x
contents = get(hObject,'Value')
switch contents
case 1
y1=imshow(x); title('Ukuran gambar [1024*1024]')
case 2
y2=imresize(x,[512 512]);
imshow(y2); title ('Ukuran gambar [512*512]')
case 3
y3=imresize(x,[256 256]);
imshow(y3); title ('Ukuran gambar [256*256]')
case 4
y4=imresize(x,[100 100]);
imshow(y4); title ('Ukuran gambar [100*100]')
case 5
y5=imresize(x,[50 50]);
imshow(y5); title ('Ukuran gambar [50*50]')
case 6
y6=imresize(x,[10 10]);
imshow(y6); title ('Ukuran gambar [10*10]')
otherwise
end












VI. GRAY-LEVEL TRANSFORMATIONS

1. Jalankan Program MATLAB 7.10 pada desktop
2. Kemudian setelah masuk ke program MATLAB, pilih File New GUI atau pada command
windows ketikan guide
3. Setelah tampil GUIDE quick start, seperti gambar dibawah ini, pilih Blank GUI dan simpan dengan
nama aplikasi_citra.

2. Selanjutnya akan muncul tampilan jendela GUIDE layout editor untuk mempermudah kita dalam
membuat antar muka grafis dan m editor.
3. Rancanglah form seperti dibawah ini

4. Pada axes1 di menu property inpector, hapus nilai Xtick dan Ytick

5. Untuk dapat membuka file gambar, tambahkan scrip berikut pada m editor.
a. Pada buttom load tambahkan scriptnya :

b. Untuk reset

c. Untuk Black and white

d. Untuk Tombol Grayscale

e. Untuk slider





VII. HISTOGRAM PROCESSING

Tujuan :
- Mahasiswa dapat menampilkan histogram dari citra
Objektif :
- Belajar bagaimana menggunakan fungsi IPT imhist
- Belajar bagaimana ploting dalam MATLAB sehingga dapat digunakan untuk melihat dan
menganalisa data histogram
-
Prosedure :
1. Tampilkan gambar dan histogram

I = imread('circuit.tif');
figure, subplot(2,2,1), imshow(I), title('Image')
subplot(2,2,2), imhist(I,256), axis tight, title('Histogram')

2. Pada langakh sebelumnya menampilkan citra histogram default dengan 256 bin. Bagaimana jika
dirubah nilainya menjadi 64 dan 32

subplot(2,2,3), imhist(I,64), axis tight, ...
title(Histogram with 64 bins)
subplot(2,2,4), imhist(I,32), axis tight, ...
title(Histogram with 32 bins)

3. Dapatkan nilai pada setiap bin dalam histogram untuk digunakan selanjutnya.

c = imhist(I,32);

We can now use the values incto display histogram using other plotting techniques. Naturally, the
plot of a histogram displays the count of each bin, but it may be more relevant to plot each bins
percentage. This can be done by normalizing the data, as shown in the next step.

4. Normalisasi nilai c

c_norm=c/numel(I);

apa fungsi numel?

5. Tutup semua gambar,
6. Tampilkan semua data menggunakan char bar

figure, subplot(1,2,1), bar_1 = bar(c);
set(gca, 'XLim', [0 32], YLim, [0 max(c)]);

In the previous step, we saw how the bar chart can be customized. In MATLAB, almost every object
you create can be customized. When we create the bar chart, there is anaxesobject and a bar chart
object displayed on theaxesobject. Here, the variablebar_1is set to the bar chartobject so that we
can reference it later for further customization. Thesetfunction allows us to change settings of a
particular object. The first parameter of thesetfunction is the object you wish to customize. In this
case, the first object we customize isgca, which stands forget current axes. Here, we set the limits
of theXandYaxes. Even though the limits have been set, the graph is still ambiguous because the
tick marks on theXandYaxes do not reflect the limits.

7. Limit kan nilainya

set(gca, XTick, [0:8:32], YTick, ...
[linspace(0,7000,8) max(c)]);

Now the tick marks reflect the limits of the data. We used the set function to change settings of
thecurrent axes, but we can just as easily use it to customize the bar chart

8. Gunakan fungsi set untuk merubah bar histogram tersebut. Dan berikan judul pada graft tersebut.

set(bar_1, FaceColor, r), title(Bar Chart

9. Menampilkan normalisasi char bar dan megkostume tampilannya.

subplot(1,2,2), bar_2 = bar(c_norm);
set(gca, XTick, [0:8:32], YTick, ...
[linspace(0,0.09,10) max(c_norm)])
xlim([0 32]), ylim([0 max(c_norm)])
title(Normalized Bar Chart)
set(bar_2, FaceColor, g)

10. Tutup semua gambar yang terbuka
11. Tampilkan stem chart untuk histogram data normal dan standart
figure,
subplot(1,2,1), stem(c,'fill','MarkerFaceColor','red'), ...
axis tight, title('Stem Chart')
subplot(1,2,2), stem(c_norm,'fill','MarkerFaceColor','red'), ...
axis tight, title('Normalized Stem Chart')
12. Menampilkan plot graph histogram data normali dan standart

figure, subplot(1,2,1), plot(c), axis auto, title('Plot Graph')
subplot(1,2,2), plot(c_norm), axis auto, ...
title('Normalized Plot Graph')


VII. NEIGHBORHOOD PROCESSING
1. SMOOTHING FILTERS IN THE SPATIAL DOMAIN

Tujuan
Tujuan dari tutorial ini adalah untuk belajar bagaimana menerapkan smoothing filter dalam tata
ruang domain.
Tujuan :
Pelajari cara menggunakan fungsi fspecial untuk menghasilkan kernel yang umum digunakan.
Df
Df
Prosedure :
Pada materi ini, akan dibahas fungsi imfilter dan mengimlementasikan kedalam filter 3 x 3 (average).
Kita bisa dengan mudah menghasilkan mask array (nilai sembilan, masing-masing sama dengan 1/9),
tetapi IPT menawarkan fungsi yang akan membuat secara otomatis ini dan beberapa mask lain yang
umum digunakan.
1. Load gambar cameraman.jpg dan letakkan dalam subplot.

I = imread(cameraman.tif);
figure, subplot(1,2,1), imshow(I), title(Original Image);

2. Buat filter secara outomatis menggunakan fungsi fspecial.

fn = fspecial(average)

Pertanyaan 1, Jelaskan nilai variable fn yang direpresentasikan?
Question 2 What other commonly used masks is thefspecialfunction capable
of generating?
3. Berikan filter cameraman dengan generated mask

I_new = imfilter(I,fn);
subplot(1,2,2), imshow(I_new), title(Filtered Image);

Question 3 What was the effect of the averaging filter? The mean filter we just implemented
was a uniform filterall coefficients were equivalent. The nonuniform version of the mean filter
gives the center of the mask (the pixel in question) a higher weighted value, while all other
coefficients are weighted by their distance from the center. This particular mask cannot be
generated by the fspecialfunction, so we must create it ourselves.

4. Create a nonuniform version of the mean filter.

fn2=[121;242;121]
fn2 = fn2 * (1/16)


Recall that the uniform mean filter could be created by generating a 33 matrix of 1s, and then
multiplying each coefficient by a factor of 1/9. In the nonuniform mean filter implantation
above, note that the sum of all the original values in the filter equals 16this is why we divide
each coefficient by 16 in the second step. Figure 10.14 illustrates the previous two masks we
created

5. Filter the original image with the new, nonuniform averaging mask

I_new2 = imfilter(I,fn2);
figure, subplot(1,2,1), imshow(I_new), title(Uniform Average);
subplot(1,2,2), imshow(I_new2), title(Non-uniform Average);

6. Create a Gaussian filter and display the kernel as a 3D plot
fn_gau = fspecial(gaussian,9,1.5);
figure, bar3(fn_gau,b), ...
title(Gaussian filter as a 3D graph);

7. Filter the cameraman image using the Gaussian mask

I_new3 = imfilter(I,fn_gau);
figure
subplot(1,3,1), imshow(I), title(Original Image);
subplot(1,3,2), imshow(I_new), title(Average Filter);
subplot(1,3,3), imshow(I_new3), title(Gaussian Filter);


VIII. DETEKSI TEPI

Tujuan
Tujuan dari tutorial ini adalah untuk belajar bagaimana menerapkan deteksi tepi dan
terkait teknik di MATLAB.

Objektif
Mempelajarin bagaimana penggunaan IPT edge function.
Mengekplore edge deteki yang paling popoler : Roberts, Sobel, dan Prewitt.
Jelajahi Marr-Hildreth Laplacian dari Gaussian detektor tepi.
Jelajahi detektor tepi Canny.
Mempelajari bagaimana menerapkan deteksi tepi dengan masker kompas (Kirsch dan
Robinson).

1. Edge Detection Using the Prewitt Operator
1. Load dan tampilkan test image.

I = imread(lenna.tif);
figure, subplot(2,2,1), imshow(I), title(Original Image);

2. Extract t edges pada gambar mengguankan Prewitt operator

[I_prw1,t1] = edge(I,prewitt);
subplot(2,2,2), imshow(I_prw1), title(Prewitt, default thresh);

Question 1 What does thet1variable represent? Edge detection methods are often compared by
their ability to detect edges in noisy images. Let us perform the Prewitt operator on the Lenna
image with additive Gaussian noise.

3. Tambahkan noise pada test image dan extract its edges.
I_noise = imnoise(I,gaussian);
[I_prw2,t2] = edge(I_noise,prewitt);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_prw2), title(Prewitt on noise);`

Question 2 How did the Prewitt edge detector perform in the presence of noise (compared to
no noise)?
Question 3 Did MATLAB use a different threshold value for the noisy image?
Question 4 Try using different threshold values. Do these different values affect the operators
response to noise? How does the threshold value affect the edges of the object?


2. Edge Detection Using the Sobel Operator
4. Extract the edges dari test image menggunakan Sobel edge detector.

[I_sob1,t1] = edge(I,'sobel');
figure, subplot(2,2,1), imshow(I), title('Original Image');
subplot(2,2,2), imshow(I_sob1), title('Sobel, default thresh');

5. Extract the edges dari test image dengan Gaussian noise using the Sobel edge
[I_sob2,t2] = edge(I_noise,sobel);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_sob2), title(Sobel on noise);

Question 5 How does the Sobel operator compare with the Prewitt operator with and without noise?
Another feature of the edge function isthinning, which reduces the thickness of the detected edges.
Although this feature is turned on by default, it can be turned off, which results in faster edge detection.

6. Extract the edges dari test image dengan the Sobel operator with no thinning.

I_sob3 = edge(I,sobel,nothinning);
figure, subplot(1,2,1), imshow(I_sob1), title(Thinning);
subplot(1,2,2), imshow(I_sob3), title(No Thinning);

Seperti yang Anda sudah tahu, operator Sobel benar-benar melakukan dua convolutions
(horizontal dan vertikal). Gambar-gambar individu dapat diperoleh dengan menggunakan
tambahan parameter output

7. Tampilkan hasil convoultion horizontal dan vertical dari Sobel operator.

[I_sob4,t,I_sobv,I_sobh] = edge(I,sobel);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_sob4), title(Complete Sobel);
subplot(2,2,3), imshow(abs(I_sobv),[]), title(Sobel Vertical);
subplot(2,2,4), imshow(abs(I_sobh),[]), title(Sobel
Horizontal);

Question 6 Why do we display the absolute value of the vertical and horizontal images?Hint:
Inspect the minimum and maximum values of these images.
Question 7 Change the code in step 7 to display thresholded (binarized), not thinned, versions
of all images.

As you may have noticed, theedgefunction returns the vertical and horizontal
images before any thresholding takes place

3. Edge Detection with the Roberts Operator
8. Extract the edges dari image asli menggunakan Roberts operator.

I_rob1 = edge(I,roberts);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_rob1), title(Roberts, default thresh);

9. Apply the Roberts operator to a noisy image
[I_rob2,t] = edge(I_noise,roberts);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_rob2), title(Roberts on noise);

Question 8 Compare the Roberts operator with the Sobel and Prewitt operators. How does it
hold up to noise?
Question 9 If we were to adjust the threshold, would we get better results whenfiltering the
noisy image?
Question 10 Suggest a method to reduce the noise in the image before performing edge
detection

4. Edge Detection with the Laplacian of a Gaussian Operato

10. Extract edges dari original image menggunakan LoG edge detector
I_log1 = edge(I,log);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_log1), title(LoG, default parameters);

11. Apply the LoG edge detector to the noisy image

[I_log2,t] = edge(I_noise,log);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_log2), title(LoG on noise);

5. Edge Detection with the Canny Operator

12. Extract edges dari original image menggunakan Canny edge detector.

I_can1 = edge(I,canny);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_log1), title(Canny, default
parameters);

13. Apply the filter to the noisy image.
[I_can2,t] = edge(I_noise,canny, [], 2.5);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_can2), title(Canny on noise);

Seperti yang Anda tahu, detektor Canny pertama berlaku fungsi smoothing Gaussian
untuk gambar, diikuti oleh peningkatan tepi. Untuk mencapai hasil yang lebih baik pada
berisik gambar, kita dapat meningkatkan ukuran smoothing filter Gaussian melalui
thesigma parameter.

14. Apply the Canny detector on the noisy image wheresigma=2.
[I_can3,t] = edge(I_noise,canny, [], 2);
figure
subplot(1,2,1), imshow(I_can2), title(Canny, default
parameters);
subplot(1,2,2), imshow(I_can3), title(Canny, sigma = 2);
15. Close semua gambar yang telah terbuka dan clear all variabel di workspace
16. Load gambar mandrill dan perform Canny edge detector denga n parameter default
I = imread(mandrill.tif);
[I_can1,thresh] = edge(I,canny);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_can1), title(Canny, default
parameters);
17. Periksa isi variable thresh
18. Gunakan nilai batas yang lebih tinggi dari nilai variable theresh

[I_can2,thresh] = edge(I, canny, 0.4);
subplot(2,2,3), imshow(I_can2), title(Canny, thresh = 0.4);

19. Gunakan nilai threashold lebih rendah dari nilai variable threst

[I_can2,thresh] = edge(I, canny, 0.08);
subplot(2,2,4), imshow(I_can2), title(Canny, thresh = 0.08);


6. Edge Detection with the Kirsch Operator
20. Keluarkan semua gambar yang terbuka dan bersihkan variable di workspace
21. Load gambar mandrill dan convert menjadi format double

I = imread(mandrill.tif);
I = im2double(I);

Sebelumnya, ketika menggunakan fungsi edge, kita tidak perlu mengkonversi gambar untuk
kelas double karena fungsi tersebut menangani hal tersebut secara otomatis.
Karena sekarang kita menerapkan tepi detektor, kita harus melakukan konversi kelas untuk
menangani nilai negatif (mencegah pemotongan yang tidak diinginkan).

Selanjutnya menentukan delapan masker Kirsch. Untuk memudahkan pelaksanaan, Simpan
kedelapan dalam matrik 3 3 8. Gambar 14.18 mengilustrasikan format penyimpanan ini

22. Buat Kirsch masks dan simpan sebelum pengalokasian matrix
k = zeros(3,3,8);
k(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5];
k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3];
k(:,:,3) = [5 5 5; -3 0 -3; -3 -3 -3];
k(:,:,4) = [5 5 -3; 5 0 -3; -3 -3 -3];
k(:,:,5) = [5 -3 -3; 5 0 -3; 5 -3 -3];
k(:,:,6) = [-3 -3 -3; 5 0 -3; 5 5 -3];
k(:,:,7) = [-3 -3 -3; -3 0 -3;5 5 5];
k(:,:,8) = [-3 -3 -3; -3 0 5; -3 5 5];


Selanjutnya kita harus membelit setiap mask pada gambar, menghasilkan delapan gambar. Kami
akan menyimpan gambar tersebut dalam matriks tiga dimensi seperti yang kita lakukan untuk
masker. karena semua masker disimpan dalam satu matriks, kita dapat menggunakan
perulangan melakukan semua delapan convolutions dengan garis kurang kode.

23. Convolve each mask with the image using aforloop.

I_k = zeros(size(I,1), size(I,2), 8);
for i = 1:8
I_k(:,:,i) = imfilter(I,k(:,:,i));
End

24. Tampilkan hasil gambar

figure
for j = 1:8
subplot(2,4,j), imshow(abs(I_k(:,:,j)),[]), ...
title([Kirsch mask , num2str(j)]);
end

25. Temukan nilai minimum

I_kir = max(I_k,[],3);
figure, imshow(I_kir,[]);

26. Buat fungsi transformasi pada map imate kedalam rentangan dan transformasi
m = 255 / (max(I_kir(:)) - min(I_kir(:)));
I_kir_adj = uint8(m * I_kir);
figure, imshow(I_kir_adj);


Question 18 Why is it not necessary to scale this image (I_kir_adj) when displaying it?
Question 19 Make a copy of themandrillimage and add Gaussian noise to it. Then perform the
Kirsch edge detector on it. Comment on its performance when noise is present

7. Edge Detection with the Robinson Operator
27. Generate the Robinson masks

r = zeros(3,3,8);
r(:,:,1) = [-1 0 1; -2 0 2; -1 0 1];
r(:,:,2) = [0 1 2; -1 0 1; -2 -1 0];
r(:,:,3) = [1 2 1;0 0 0;-1 -2 -1];
r(:,:,4) = [2 1 0; 1 0 -1; 0 -1 -2];
r(:,:,5) = [1 0 -1; 2 0 -2; 1 0 -1];
r(:,:,6) = [0 -1 -2;1 0 -1;2 1 0];
r(:,:,7) = [-1 -2 -1;0 0 0;1 2 1];
r(:,:,8) = [-2 -1 0; -1 0 1;0 1 2];

28. Filter gambar dengan outpu ttampila delapan Robinson masks

I_r = zeros(size(I,1), size(I,2), 8);
for i = 1:8
I_r(:,:,i) = imfilter(I,r(:,:,i));
end
figure
for j = 1:8
subplot(2,4,j), imshow(abs(I_r(:,:,j)),[]), ...
title([Robinson mask , num2str(j)]);
end

29. Kalkulasikan nilai maksimum dari kedelapan gambar dan tampilkan hasilnya

I_rob = max(I_r,[],3);
figure, imshow(I_kir,[]);


IX. PERBAIKAN KUALITAS CITRA
Citra direpresentasikan dalam bentuk matrik. Berbagai macam citra disimpan menggunakan
format berbeda seperti bmp, png, gif, jpg atau format lainnya. Tidak semua citra yang diperoleh
menggunakan kamera atau device lain menghasilkan citra berkuatlitas yang disebabkan oleh
factor pencahayaan, kondisi objek maupun kamera yang digunakan, sehingga perlu perbaikan
kualitas citra menggunakan beberapa metode, diantaranya adalah :
1. Operasi titik, perbaikan dilakukan menggunakan operasi piksel
a. Penambahan dan pengurangan intensitas citra
b. Histogram
2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik
a. Low Pass Filter
b. High Pass Filter
c. Median Filter

1.Operasi titik penambahan dan pengurangan intensitas
Operasi ini dilakukan dengan melakukan manipulasi nilai gray citra pada setiap titik, misalkan suatu
citra cameraman.tif akan ditambah kecarahannya atau dikurangi kecerahannya (misalkan untuk setiap
piksel akan ditambah 100 untuk menambah kecerahan dan mengurangi 50 untuk mengurangi
kecerahan citra), maka code dalam matlab dapat dilihat pada berikut ini

a=imread('cameraman.tif');
b=a+100;
c=a-50;
imshow([a b c]);

a.Operasi titik melalui ekualisasi histogram
Perbaikan citra menggunakan histogram merupakan cara yang paling banyak digunakan oleh pada
peneliti. Pada prinsipnya ekualisasi histogram melakukan pemerataan dist ribusi gray yang ada pada
citra sebagaimana terlihat pada code berikut ini
a=imread('cameraman.tif');
b=histeq(a);
imshow([a b]);

2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik LPF
Model perbaikan citra tersebut dengan memanfaatkan mask matrik yang didefinisikan terlebih
dahulu sebelum operasi konvolusi dilakukan.

Mask LPF berfungsi untuk meratakan/menghilangkan noise. Model operasi ruang tersebut
adalah menggunakan model konvolusi. Berikut merupakan code nya
a=imread('cameraman.tif');
LPF=ones(3)/9;
J=conv2(double(a),LPF,'same');
imshow(uint8(J))

Perbedaan yang sangat signifikan dapat dilihat dengan mengubah ukuran matrik mask yang
digunakan, misalkan menggunakan matrik mask ukuran 9x9 sebagaimana pada code program
berikut

a=imread('cameraman.tif');
LPF=ones(9)/81;
J=conv2(double(a),LPF,'same');
imshow(uint8(J))

Citra yang diproses dari code program tersebut akan terlihat lebih blur, sehingga model mask
LPF akan lebih tepat jika digunakan untuk menghilangkan noise citra.

a. Operasi ruang, perbaikan dilakukan menggunakan mask matrik HPF
Mask High Pass Filter mempunyai fungsi yang berbeda dengan Low Pass Filter LPF. Untuk mask HPF
berfungsi menajamkan tepi objek, adapun mask matrik yang digunakan mempunyai nilai negative pada
tepi-tepinya


a=imread('cameraman.tif');
HPF=ones(3)*-1;
HPF(2,2)=9;
J=conv2(double(a),HPF,'same');
imshow([a uint8(J)]);







Mask matrik lain untuk HPF dapat dicoba menggunakan mask berikut ini


b.Operasi ruang, perbaikan dilakukan menggunakan median filter
Median filter adalah dengan meletakkan nilai tengah setelah nilai piksel diurutkan secara
increasing. Metode ini biasanya digunakan untuk menghilangkan noise pada citra. Contoh program
dapat dilihat pada code berikut ini
a=imread('cameraman.tif');
MED = medfilt2(a,[3 3]);
imshow([a MED]);

Untuk melihat efek dari median filter, coba gunakan citra yang ada noisenya atau membuat citra sendiri
dan diberi noise. Kemudian operasikan menggunakan median filter

Anda mungkin juga menyukai