3/24/2014
UNIVERSITAS PEMBANGUNAN PANCA BUDI
MODUL PRAKTIKUM IMAGE PROCESSING
Image Processing | Akhyar Lubis, S.Kom
Daftar Isi Daftar Isi.................................................................................................................................................. 2 I. PENDAHULUAN ................................................................................................................................... 4 1. Apa itu itu MATLAB MATLAB .................................................. ........................ .......................... .......................... ......................... ......................... 4 2. Sistem MATLAB MATLAB ......................... .......................... .......................... ......................... ......................... 4 3. Instalasi Program MATLAB .................................................. ........................ .......................... ......................... ........................... ....... 5 4. Mulai Menjalankan MATLAB 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 P lot 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 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 THE SPATIAL DOMAIN ......................... ......................... .......................... . 51 VIII. DETEKSI TEPI ................................................................................................................................. 53
1. Edge Detection Using the Prewitt Operator ................................................................................... 53 2. Edge Detection Using the Sobel 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 pengg una (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 dig unakan 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 m esin 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 deng an dimensi 1x5, sedangkan sebuah angka scalar 9 akan menggunakan matriks dengan dimensi 1x1 . Untuk menyimpan array A di MATLAB, dicommand prompt >> masukkan :
MATLAB akan menampilkan kembali masukan :
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”
Ans = 1
5
Arti ans adalah dimensi dari matriks A adalah 1x5 (1 baris dan 5 kolom)
Contoh ke 2 :
Bagaimana hasilnya? Contoh ke 3 :
Contoh ke 4 :
Menghapus baris dan kolom dari matriks dengan sepasang tanda kurung siku. Contoh
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 mengg unakan notasi (‘) setelah mendefenisikan suatu matriks,
seperti
7. Format Data Matlab mengenal bilangan “floating point” dengan format “single precision atgau double precision. P ada “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 pre cision)
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 :
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.
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
3
Kita akan memplot kurva y = x 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 me njadi 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.
Kemudian, kita coba memplot kurva tersebut dalam skala semilogaritmik
-2
Misalkan kita ingin menyempitkan area plot pada y = 1 hingga 10 saja, maka:
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: 2
ρ = sin (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.
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:
Kini Anda mendapatkan plot 3-dimensi. Ki ni 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.
Plot Kontur Fungsi dua variabel, misalkan z = f(x,y) bisa kita gambarkan konturnya dalam dua dimensi dengan c.
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 fungsifungsi yang lain. Script dalam Command Window berguna untuk menyelesaikan permasalahan yang pendek. Sebaliknya M-File dapat dipakai untuk membuat berbagai aplikasi sesuai keinginan pem akai. 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 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 ('Hello Matlab') 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 function
=
Sebagai contoh adalah bentuk deklarasi untuk menghitung luas sebuah persegi panjang : function Luas 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) function Luas 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, j ika 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:
1
4
3
2
a. a1=
6
2
1
5
5
6
3
4
1 dan a2 = 4 5 7
2
3
dan a2 =
Bagaimana outputnya?
1 b. a1 = 3
4 2
6
5 8
9 6
Bagaimana outputnya ? Agar kasus tersebut bisa kita handle maka ubah pro gram 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 I maging 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 me nggunakan 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 deng an 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 berbe da? 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 11×11), 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 u pside-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), t itle('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 bin’s 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 chang e 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 bel ajar 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 j ust implemented was a uniform filter—all 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 3×3 matrix of 1’s, 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 16—this is why we divide each coefficient by 16 in the second step. Figure 10.14 illustrates the previous two masks w e 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 imag es. Let us perform the Prewitt operator o n 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 dete ctor 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 operator’s
response to noise? How does the threshold value affect the edg es 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 wi th the Prewitt operator with and without noise? Another feature of the edge function is’thinning’, 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 thresh olded (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 imag e
[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 p arameters’); 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, det ektor 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)]);