Pcd 10

1,502
-1

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,502
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
151
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Pcd 10

  1. 1. BAB 10 Segmentasi Citra Setelah bab ini berakhir, diharapkan pembaca dapat memahami berbagai istilah berikut dan juga dapat mempraktikkan beberapa penerapannya.  Segmentasi citra  Deteksi garis  Deteksi tepi  Peng-ambangan dwi-aras  Peng-ambangan global Vs. lokal  Peng-ambangan aras-jamak  Peng-ambangan dengan metode Otsu  Peng-ambangan adaptif  Peng-ambangan berdasarkan entropi  Segmentasi warna
  2. 2. 402 Pengolahan Citra : Teori dan Aplikasi 10.1 Pengantar Segmentasi Citra Segmentasi citra merupakan proses yang ditujukan untuk mendapatkan objek-objek yang terkandung di dalam citra atau membagi citra ke dalam beberapa daerah dengan setiap objek atau daerah memiliki kemiripan atribut. Pada citra yang mengandung hanya satu objek, objek dibedakan dari latarbelakangnya. Contoh ditunjukkan pada Gambar 10.1. Pada citra yang mengandung sejumlah objek, proses untuk memilah semua objek tentu saja lebih kompleks. Contoh penerapan segmentasi yaitu untuk membuat “Magic Wand”, yang biasa terdapat pada perangkat pengedit foto. Contoh pada Gambar 10.2 menunjukkan penggunaan “Magic Wand” pada Adobe Photoshop. Contoh memperlihatkan pemilihan area yang ditandai dengan warna khusus. (b) Citra daun (a) Hasil segmentasi dalam bentuk biner Gambar 10.1 Pemisahan objek daun terhadap latarbelakang tersebut
  3. 3. Segmentasi Citra 403 Area ini diperoleh melalui “Magic Wand” Gambar 10.2 Pemilihan citra berdasarkan warna, yang intinya diperoleh melalui segmentasi. Bagian terpilih ditandai dengan garis terputus-putus Gambaran berbagai aplikasi segmentasi serta acuan yang digunakan dapat dilihat pada Tabel 10.1. Secara prinsip, segmentasi dilakukan untuk mendapatkan objek yang menjadi perhatian. Tabel 10.1 Aplikasi segmentasi pada citra Objek Kegunaan Mobil, jalan, dan Acuan yang Segmentasi Mobil Citra Digunakan Pelacakan mobil latarbelakang Struktur warna Foto satelit Pengklasifikasian Kerumunan orang Tekstur dan area permukaan bumi Wajah orang warna Pengenalan wajah Warna, bentuk, di pasar Apel Gerakan dan dan tekstur Kumpulan apel Bentuk, warna, pada ban berjalan Segmentasi Pemilahan buah apel berdasarkan ukuran ukuran juga biasa dilakukan sebagai langkah awal untuk melaksanakan klasifikasi objek. Gambar 10.3 menperlihatkkan hal ini. Setelah segmentasi citra dilaksanakan, fitur yang terdapat pada objek diambil. Sebagai
  4. 4. 404 Pengolahan Citra : Teori dan Aplikasi contoh, fitur objek dapat berupa perbandingan lebar dan panjang objek, warna rata-rata objek, atau bahkan tekstur pada objek. Selanjutnya, melalui pengklasifikasi, jenis objek dapat ditentukan. Sebagai contoh, pengklasifikasi menyatakan bahwa daun termasuk golongan Aglaonema. Teknik segmentasi citra didasarkan pada dua properti dasar nilai aras keabuan: ketidaksinambungan dan kesamaan antarpiksel. Pada bentuk yang pertama, pemisahan citra didasarkan pada perubahan mendadak pada aras keabuan. Contoh yang menggunakan pendekatan seperti itu adalah detektor garis dan detektor tepi pada citra. Cara kedua didasarkan pada kesamaan antarpiksel dalam suatu area (Acharya dan Ray, 2005). Termasuk dalam cara kedua ini yaitu:  peng-ambangan berdasarkan histogram;  pertumbuhan area;  pemisahan dan penggabungan area;  pengelompokan atau pengklasifikasian;  pendekatan teori graf;  pendekatan yang dipandu pengetahuan atau berbasis aturan. Berdasarkan teknik yang digunakan, segmentasi dapat dibagi menjadi empat kategori berikut(Rangayyan, 2005): 1) teknik peng-ambangan; 2) metode berbasis batas; 3) metode berbasis area; 4) metode hibrid yang mengombinasikan kriteria batas dan area.
  5. 5. Segmentasi Citra 405 Citra masukan Segmentasi Citra Objek daun Ekstraksi Fitur Fitur-fitur pada daun Pengklasifikasi Jenis tanaman Gambar 10.3 Segmentasi sebagai langkah awal sistem klasifikasi 10.2 Deteksi Garis Deteksi garis pada citra dapat diperoleh melalui penggunaan “cadar” (mask) dengan contoh tercantum pada Gambar 10.4 (Gonzalez & Woods, 2002). Cadar (a) berguna untuk memperoleh garis horizontal, cadar (b) untuk mendapatkan garis yang berorientasi 45o, cadar (c) untuk memperoleh garis tegak, dan cadar (d) untuk mendapatkan garis yang berorientasi -45o. −1 −1 −1 2 2 2 −1 −1 −1 −1 −1 2 −1 2 −1 2 −1 −1 (a) (b) −1 2 −1 −1 2 −1 −1 2 −1 (c) 2 −1 −1 −1 2 −1 −1 −1 2 (d) Gambar 10.4 Empat pasang cadar untuk mendeteksi keberadaan garis
  6. 6. 406 Pengolahan Citra : Teori dan Aplikasi Fungsi deteksi berikut berguna untuk menguji cadar-cadar yang terdapat pada Gambar 10.4. Fungsi tersebut sekaligus dapat dipakai untuk menguji cadarcadar yang lain. Program : deteksi.m function [G] = deteksi(F, H, potong, pembulatan) % DETEKSI Melakukan operasi korelasi kernel H dengan citra F % H harus mempunyai tinggi dan lebar ganjil % Argumen potong bersifat opsional. Apabila % bernilai true, bagian citra yang tidak diproses % akan dipotong. Bawaan = false % Argumen pembulatan bersifat opsional. % Apabila bernilai true, pembulatan dengan uint8 % tidak dilakukan. Bawaan = true % % Hasil: citra G if nargin 3 potong = false; end if nargin 4 pembulatan = true; end [tinggi_f, lebar_f] = size(F); [tinggi_h, lebar_h] = size(H); if rem(lebar_h,2) == 0 || rem(tinggi_h,2) == 0 disp('Lebar dan tinggi H harus ganjil'); return; end m2 = floor(tinggi_h/2); n2 = floor(lebar_h/2); % Menentukan ukuran hasil beserta % penentu ofset koordinat if potong == true sisi_m2 = m2; sisi_n2 = n2; G = zeros(tinggi_f - 2 * m2, lebar_f - 2 * n2); else sisi_m2 = 0; sisi_n2 = 0; G = zeros(size(F)); end F2=double(F);
  7. 7. Segmentasi Citra 407 for y=m2+1 : tinggi_f-m2 for x=n2+1 : lebar_f-n2 % Pelaksanaan korelasi F(baris, kolom) jum = 0; for p=-m2 : m2 for q=-n2 : n2 jum = jum + H(p+m2+1,q+n2+1) * ... F2(y+p, x+q); end end G(y - sisi_m2, x - sisi_n2) = jum; end end if pembulatan == true G = uint8(G); end Akhir Program Dengan fungsi di atas, bagian pinggir citra yang tidak diproses akan dibuang sekiranya argumen ketiga tidak diberikan atau diberi nilai false. Dengan demikian, ukuran G akan dipengaruhi oleh ukuran H. Nilai true pada argumen ketiga akan membuat bagian tepi yang tidak diproses berwarna hitam, membentuk seperti bingkai. Argumen keempat digunakan untuk menentukan eksekusi uint8 atau tidak. Dalam banyak hal, argumen keempat tidak perlu disebutkan karena umumnya memang hasil deteksi tepi akan memotong nilai yang di bawah nol dan yang di atas 255. Namun, di belakang akan ada aplikasi yang memerlukan fungsi deteksi tetapi tanpa perlu melakukan pemotongan seperti itu. Contoh berikut menunjukkan penggunaan deteksi untuk mendapatkan garis tegak: H1 = [-1 -1 -1; 2 2 2; -1 -1 -1];  Img = imread('C:Imagejaring.png');  G = deteksi(Img, H1); imshow(G,[0 1])  Hasil deteksi garis dapat dilihat pada Gambar 10.5(b). Terlihat bahwa garis vertikal tidak tampak. Namun, garis miring dan mendatar tetap terdeteksi.
  8. 8. 408 Pengolahan Citra : Teori dan Aplikasi (a) Citra jaring.png (b) Hasil deteksi garis horizontal Gambar 10.5 Contoh deteksi garis horizontal Gambar 10.6 memperlihatkan perbedaan hasil yang menggunakan masing-masing satu dari keempat cadar yang tercantum di Gambar 10.4.
  9. 9. Segmentasi Citra 409     Gambar 10.6 Contoh hasil deteksi garis untuk empat arah yang berbeda terhadap gambar pada Gambar 10.5(a) Deteksi garis juga dapat diperoleh melalui transformasi Hough. Transformasi tersebut dibahas, misalnya, oleh Davies (1990).
  10. 10. 410 Pengolahan Citra : Teori dan Aplikasi 10.3 Deteksi Tepi Deteksi tepi berfungsi untuk memperoleh tepi objek. Deteksi tepi memanfaatkan perubahan nilai intensitas yang drastis pada batas dua area. Definisi tepi di sini adalah “himpunan piksel yang terhubung yang terletak pada batas dua area” (Gonzalez Woods, 2002). Perlu diketahui, tepi sesungguhnya mengandung informasi yang sangat penting. Informasi yang diperoleh dapat berupa bentuk maupun ukuran objek. Umumnya, deteksi tepi menggunakan dua macam detektor, yaitu detektor baris (Hy) dan detektor kolom (Hx). Beberapa contoh yang tergolong jenis ini adalaah operator Roberts, Prewitt, Sobel, dan Frei-Chen. Deteksi tepi dapat dibagi menjadi dua golongan. Golongan pertama disebut deteksi tepi orde pertama, yang bekerja dengan menggunakan turunan atau diferensial orde pertama. Termasuk kelompok ini adalah operator Roberts, Prewitt, dan Sobel. Golongan kedua dinamakan deteksi tepi orde kedua, yang menggunakan turunan orde kedua. Contoh yang termasuk kelompok ini adalah Laplacian of Gaussian (LoG). Tabel 10.2 memberikan definisi turunan orde pertama dan kedua baik pada bentuk yang kontinu maupun diskret. Bentuk diskret sangat berguna untuk melakukan deteksi tepi. Adapun Gambar 10.7 menunjukkan hubungan antara fungsi citra dan deteksi tepi orde pertama dan orde kedua. Perlu diketahui, terkait dengan turunan, tepi sesungguhnya terletak pada:  nilai absolut maksimum pada turunan pertama;  persilangan nol (zero-crossing) pada turunan kedua. Turunan 𝑑𝑓 𝑑𝑥 𝑑𝑓 𝑑𝑦 ∇𝑓(𝑦, Tabel 10.2 Turunan orde pertama dan kedua pada bentuk kontinu dan diskret Bentuk kontinu Bentuk diskret 𝑓(𝑦, 𝑥 + ∆𝑥)𝑓(𝑦, 𝑥) f(y,x+1)f(y,x) lim ∆𝑥→0 ∆𝑥 𝑓(𝑦 + ∆𝑦, 𝑥)𝑓(𝑦, 𝑥) f(y+1,x)f(y,x) lim ∆𝑥→0 ∆𝑦 𝑑𝑓 𝑑𝑓 [f(y, x+1)f(y,x), 𝑥) [ , ] f(y+1,x)f(y,x)] 𝑑𝑦 𝑑𝑥
  11. 11. Segmentasi Citra Turunan 𝑑2 𝑓 𝑑𝑥 2 𝑑2 𝑓 𝑑𝑦 2 ∇2 𝑓(𝑦, 𝑥) 411 Bentuk kontinu Bentuk diskret 𝑑𝑓 𝑑𝑓 f(y,x+1)- 2f(y,x)+f(y,x-1) ( ) (𝑦, 𝑥 + ∆𝑥) ( ) 𝑓(𝑦, 𝑥) 𝑑𝑥 𝑑𝑥 lim ∆𝑥→0 ∆𝑥 𝑑𝑓 𝑑𝑓 f(y+1,x) -2f(y,x)+f(y-1,x) ( ) (𝑦 + ∆𝑦, 𝑥) ( ) 𝑓(𝑦, 𝑥) 𝑑𝑦 𝑑𝑦 lim ∆𝑥→0 ∆𝑦 2 f(y,x+1)+f(y,x-1) 𝑑 𝑓 𝑑2 𝑓 + 2 4f(y,x)+f(y+1,x)+f(y-1,x) 2 𝑑𝑥 𝑑𝑦 𝑓(𝑥) (a) Fungsi citra Nilai maksimum Batas (b) Deteksi tepi derivatif orde pertama 𝑑 𝑓(𝑥) 𝑑𝑥 a b Persilangan nol (zero-crossing) 𝑑2 𝑓(𝑥) 𝑑𝑥 2 (c) Deteksi tepi derivatif orde kedua Gambar 10.7 Deteksi tepi orde pertama dan orde kedua pada arah x
  12. 12. 412 Pengolahan Citra : Teori dan Aplikasi Apabila profil citra mempunyai tepi dengan bentuk tanjakan (ramp), fungsi dan turunannya ditunjukkan berikut ini. Profil aras keabuan Turunan pertama Turunan kedua Profil citra dapat berupa tepi dengan bentuk atap, garis, undakan, atau tanjakan. Tepi tanjakan Tepi garis Tepi undakan Tepi atap Contoh pada Gambar 10.7(a) menunjukkan keadaan fungsi intensitas citra f(y,x) pada arah x dengan bentuk tepi tanjakan yang landai. Gambar 10.7(b) menunjukkan keadaan turunan pertama pada arah x. Puncak pada Gambar 10.7(b) menyatakan letak tepi pada turunan pertama, sedangkan persilangan nol pada Gambar 10.7(c) menyatakan letak tepi pada turunan kedua. Apabila nilai batas dikenakan pada turunan pertama, puncak tidak lagi menjadi tepi. Akibatnya, terdapat dua nilai yang memenuhi (yaitu a dan b). Kedua nilai tersebut akan menjadi piksel-piksel tepi. Berbeda halnya pada turunan kedua, tepi akan selalu berupa satu piksel. Hal itu terlihat pada perpotongan fungsi turunan kedua dengan sumbu x. Akibatnya, ketebalan tepi akan selalu berupa satu piksel.
  13. 13. Segmentasi Citra 413 Untuk memahami profil citra yang berhubungan dengan tepi, perhatikan matriks yang berukuran 4 x 6 berikut. 168 [168 168 168 168 168 168 168 168 168 168 168 0 0 0 0 0 0 0 0 0 0] 0 0 Pada contoh tersebut perubahan nilai dari sisi kiri (168) ke sisi kanan (0) sangat drastis, tidak bertahap. Profil citra tersebut berupa tepi undakan. Adapun matriks berikut mengandung tepi tanjakan: 168 168 168 168 168 168 168 168 168 138 138 138 87 87 87 30 30 30 0 0 0 0 0 0 0 0 0 Perhatikan, terjadi perubahan nilai secara bertahap dari transisi 168 ke 0. Contoh dalam bentuk citra: tepi undakan tepi tanjakan Deteksi tepi dengan turunan orde pertama dilakukan dengan menggunakan operator gradien. Operator gradien didefinisikan sebagai vektor 𝑑𝑓 𝐺𝑥 𝑑𝑥 𝒗 𝒇 = [ 𝐺 ] = [ 𝑑𝑓 ] 𝑦 𝑑𝑦 (10.1)
  14. 14. 414 Pengolahan Citra : Teori dan Aplikasi Besaran vektor dihitung menggunakan rumus 1/2 ∇𝑓 = 𝑚𝑎𝑔(∇f) = [𝐺 𝑥 2 + 𝐺 𝑦 2 ] 𝑑𝑓 𝑑𝑓 1/2 = *( 𝑑𝑥 )2 + ( 𝑑𝑦)2 + (10.2) Namun, untuk alasan penyederhanaan komputasi, operasi akar ditiadakan sehingga besaran vektor tersebut dihampiri melalui ∇𝑓 ≈ 𝐺 𝑥 2 + 𝐺 𝑦 2 (10.3) Perlu diketahui, besaran gradien sering disebut sebagai “gradien” saja. Adapun turunan orde kedua yang biasa digunakan dalam pengolahan citra dihitung dengan menggunakan Laplacian. Perhitungannya seperti berikut: ∇2 𝑓(𝑦, 𝑥) =  𝑑2 𝑓(𝑦,𝑥) 𝑑𝑥 2 + 𝑑2 𝑓(𝑦,𝑥) 𝑑𝑦 2 (10.4) Cadar yang digunakan pada deteksi tepi dalam buku ini telah disesuaikan agar proses terhadap citra dapat dilakukan secara korelasi (bukan konvolusi). Itulah sebabnya, ada kemungkinan cadar yang digunakan pada buku ini berbeda dengan cadar di literatur lain.  Berbagai teknik deteksi tepi bekerja dengan cara yang berbeda. Masing-masing memiliki kekuatan (Crane, 1997). Itulah sebabnya, eksperimen pada suatu aplikasi dengan menggunakan berbagai teknik deteksi tepi perlu dilakukan untuk mendapatkan hasil yang terbaik.
  15. 15. Segmentasi Citra 415 10.3.1 Operator Roberts Operator Roberts, yang pertama kali dipublikasikan pada tahun 1965, terdiri atas dua filter berukuran 2x2. Ukuran filter yang kecil membuat komputasi sangat cepat. Namun, kelebihan ini sekaligus menimbulkan kelemahan, yakni sangat terpengaruh oleh derau. Selain itu, operator Roberts memberikan tanggapan yang lemah terhadap tepi, kecuali kalau tepi sangat tajam (Fisher, dkk., 2003). x x+1 y z1 z2 1 0 0 -1 y+1 z3 z4 0 -1 1 0 (a) Posisi pada citra f (b) Gx (c) Gy Gambar 10.8 Operator Roberts (b) dan (c) serta posisi pada citra f Bentuk operator Roberts ditunjukkan pada Gambar 10.8. Misalkan, f adalah citra yang akan dikenai operator Roberts. Maka, nilai operator Roberts pada (y, x) didefinisikan sebagai 𝑟(𝑦, 𝑥) = √(𝑧1 − 𝑧4 )2 + (𝑧3 − 𝑧2 )2 (10.5) Dalam hal ini, z1 = f(y, x), z2 = f(y, x+1), z3 = f(y+1, x), dan z4 = f(y+1, x+1). Fungsi roberts berikut berguna untuk memperoleh tepi pada citra berskala keabuan. Program : roberts.m function [G] = roberts(F) % ROBERTS Pemerolehan tepi objek pada citra F % melalui operator Roberts % Hasil: citra G
  16. 16. 416 Pengolahan Citra : Teori dan Aplikasi [m, n] = size(F); F=double(F); for y=1 : m-1 for x=1 : n-1 G(y, x) = sqrt((F(y,x)-F(y+1,x+1))^2 + ... (F(y+1,x)-F(y,x+1))^2) ; end end G = uint8(G); Akhir Program Contoh penggunaan fungsi roberts: Img = rgb2gray(imread('C:Imagemainan.png'));  G = roberts(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.9.
  17. 17. Segmentasi Citra 417 (a) Citra mainan.png (b) Hasil deteksi tepi dengan operator Roberts Gambar 10.9 Pengenaan operator Roberts pada citra mainan.png 10.3.2 Operator Prewitt Operator Prewitt dikemukakan oleh Prewitt pada tahun 1966. Bentuknya terlihat pada Gambar 10.10. Untuk mempercepat komputasi, bagian yang bernilai nol tidak perlu diproses. Oleh karena itu, perhitungan dengan operator Prewitt ditulis menjadi 𝑟(𝑦, 𝑥) = sqrt((f(y-1,x-1)+f(y,x-1)+f(y+1,x-1) f(y-1,x+1)-f(y,x+1)-f(y+1,x+1))^2 + (f(y+1,x-1)+ f(y+1,x) + f(y+1,x+1) f(y-1,x-1) - f(y-1,x) - f(y-1,x+1))^2)) (10.6)
  18. 18. 418 Pengolahan Citra : Teori dan Aplikasi x-1 x x+1 y-1 z1 z2 z3 1 0 -1 -1 -1 -1 y z4 z5 z6 1 0 -1 0 0 0 y+1 z7 z8 z9 1 0 -1 1 1 1 (a) Posisi pada citra f (b) Gx (c) Gy Gambar 10.10 Operator Prewitt (b) dan (c) serta posisi pada citra f Fungsi prewitt berikut berguna untuk melakukan pengujian operator Prewitt terhadap citra berskala keabuan. Program : prewitt.m function [G] = prewitt(F) % PREWITT Pemerolehan tepi objek pada citra F % melalui operator Prewitt % Hasil: citra G [m, n] = size(F); F=double(F); G=zeros(m,n); for y=2 : m-1 for x=2 : n-1 G(y, x) = sqrt((F(y-1,x-1) + F(y,x-1) + F(y+1,x-1) - ... F(y,x) - F(y,x+1) - F(y+1,x+1))^2 + ... (F(y+1,x-1)+ F(y+1,x) + F(y+1,x+1) - ... F(y-1,x-1) - F(y-1,x) - F(y-1,x+1))^2) ; end end G = uint8(G); Akhir Program Contoh penggunaan fungsi prewitt: Img = rgb2gray(imread('C:Imagemainan.png')); 
  19. 19. Segmentasi Citra 419 G = prewitt(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.11. Gambar 10.11 Hasil deteksi tepi dengan operator Prewitt. Hasil tepi lebih tegas daripada hasil dengan operator Roberts
  20. 20. 420 Pengolahan Citra : Teori dan Aplikasi Fungsi deteksi dapat digunakan untuk mengamati efek cadar Gx dan Gy pada operator Prewitt secara individual. Contoh penggunaannya seperti berikut: Img = rgb2gray(imread('C:Imagemainan.png')); Gx = [ 1 0 -1; 1 0 -1; 1 0 -1]; G = deteksi(Img, Gx); imshow(G) Hasilnya seperti berikut: 10.3.3 Operator Sobel Operator Sobel dapat dilihat pada Gambar 10.12. Operator Sobel lebih sensitif terhadap tepi diagonal daripada tepi vertikal dan horizontal Hal ini berbeda dengan operator Prewitt, yang lebih sensitif terhadap tepi vertikal dan horizontal (Crane, 1997).
  21. 21. Segmentasi Citra x-1 421 x x+1 y-1 z1 z2 z3 -1 0 1 1 2 1 y z4 z5 z6 -2 0 2 0 0 0 y+1 z7 z8 z9 -1 0 1 -1 -2 -1 (a) Posisi pada citra f (b) Gx (c) Gy Gambar 10.12 Operator Sobel (b) dan (c) serta posisi dalam citra f Fungsi sobel berikut berguna untuk melakukan pengujian operator Sobel terhadap citra berskala keabuan. Program : sobel.m function [G] = sobel(F) % SOBEL Pemerolehan tepi objek pada citra F % melalui operator Sobel % Hasil: citra G [m, n] = size(F); F=double(F); G=zeros(m,n); for y=2 : m-1 for x=2 : n-1 G(y, x) = sqrt(... (F(y-1,x+1)+2*F(y,x+1)+F(y+1,x+1) - ... F(y-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ... (F(y-1,x-1)+2*F(y-1,x)+F(y-1,x+1) - ... F(y+1,x-1)-2*F(y+1,x)-F(y+1,x+1))^2) ; end end G = uint8(G); Akhir Program Contoh penggunaan fungsi sobel: Img = rgb2gray(imread('C:Imagemainan.png')); 
  22. 22. 422 Pengolahan Citra : Teori dan Aplikasi G = sobel(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.13. Gambar 10.13 Hasil deteksi tepi dengan operator Sobel 10.3.4 Operator Frei-Chen Operator Frei-Chen (kadang disebut operator isotropik) ditunjukkan pada Gambar 10.14. Operator ini mirip dengan operator Sobel, dengan setiap angka 2 diganti menjadi √2. x-1 x x+1 y-1 z1 z2 z3 -1 0 1 1 √2 1 y z4 z5 z6 -√2 0 √2 0 0 0 y+1 z7 z8 z9 -1 0 1 -1 -√2 -1 (a) Posisi pada citra f (b) Gx (c) Gy Gambar 10.14 Operator Frei-Chen (b) dan (c) serta posisi dalam citra f
  23. 23. Segmentasi Citra 423 Fungsi freichen berikut berguna untuk melakukan pengujian operator Frei-Chen terhadap citra berskala keabuan. Program : freichen.m function [G] = freichen(F) % FREICHEN Pemerolehan tepi objek pada citra F % melalui operator Frei-Chen % Hasil: citra G [m, n] = size(F); akar2 = sqrt(2); F=double(F); G=zeros(m,n); for y=2 : m-1 for x=2 : n-1 G(y, x) = sqrt(... (F(y-1,x+1)+akar2*F(y,x+1)+F(y+1,x+1) - ... F(y-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ... (F(y-1,x-1)+akar2*F(y-1,x)+F(y-1,x+1) - ... F(y+1,x-1)-akar2*F(y+1,x)-F(y+1,x+1))^2) ; end end G = uint8(G); Akhir Program Contoh penggunaan fungsi freichen: Img = rgb2gray(imread('C:Imagemainan.png'));  G = freichen(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.15.
  24. 24. 424 Pengolahan Citra : Teori dan Aplikasi Gambar 10.15 Hasil deteksi tepi dengan operator Frei-Chen Gambar 10.16 memperlihatkan perbedaan secara visual hasil deteksi tepi dengan menggunakan operator Roberts, Prewitt, Sobel, dan Frei-Chen. Perlu diketahui, hasil pada gambar tersebut masih berskala keabuan. Untuk menjadi citra biner, perlu dilakukan peng-ambangan yang mulai dibahas pada Subbab 10.4. Contoh hasil peng-ambangan dapat dilihat pada Gambar 10.17.
  25. 25. Segmentasi Citra 425 (a) Operator Roberts (c) Operator Sobel (b) Operator Prewitt (d) Operator Frei-Chen Gambar 10.16 Perbedaan hasil deteksi tepi dengan menggunakan keempat macam operator (a) Hasil deteksi tepi dengan (a) Hasil deteksi tepi dengan operator Roberts operator Roberts (b) Hasil setelah peng-ambangan dengan nilai ambang 20 Gambar 10.17 Contoh hasil deteksi tepi dan peng-ambangan 10.3.5 Operator Laplacian Operator Laplacian merupakan contoh operator yang berdasarkan pada turunan kedua. Operator ini bersifat omnidirectional, yakni menebalkan bagian tepi ke segala arah. Namun, operator Laplacian memiliki kelemahan, yakni peka terhadap derau, memberikan ketebalan ganda, dan tidak mampu mendeteksi arah tepi (Gonzalez Woods, 2002). Contoh cadar ditunjukkan pada Gambar 10.18.
  26. 26. 426 Pengolahan Citra : Teori dan Aplikasi x-1 x x+1 y-1 z1 z2 z3 0 -1 0 -1 -1 -1 y z4 z5 z6 -1 4 -1 -1 8 -1 y+1 z7 z8 z9 0 -1 0 -1 -1 -1 (a) Posisi pada citra f (b) #1 (c) #2 Gambar 10.18 Operator Laplacian Berdasarkan cadar #1 pada Gambar 10.18(b), nilai operator Laplacian pada (y, x) didefinisikan sebagai 𝑙(𝑦, 𝑥) = 4 𝑓(𝑦, 𝑥) − [𝑓(𝑦 − 1, 𝑥) + 𝑓(𝑦, 𝑥 − 1) + 𝑓(𝑦, 𝑥 + 1) + 𝑓(𝑦 + 1, 𝑥)] (10.7) Fungsi laplacian2 berikut berguna untuk melakukan pengujian operator Laplacian terhadap citra berskala keabuan dengan menggunakan cadar #2 yang tertera pada Gambar 10.18(c). Program : laplacian2.m function [G] = laplacian2(F) % LAPALACIAN2 Pemerolehan tepi objek pada citra F % melalui operator Laplacian #1 % Hasil: citra G [m, n] = size(F); G=zeros(m,n); % Semua berisi nol F=double(F); for y=2 : m-1 for x=2 : n-1 G(y, x) = 8 * F(y,x) - ... (F(y-1,x)+ F(y,x-1)+F(y,x+1)+F(y+1,x) + ... F(y-1,x-1)+ F(y-1,x+1)+F(y+1,x-1)+F(y+1,x+1));
  27. 27. Segmentasi Citra 427 end end G = uint8(G); Akhir Program Contoh penggunaan fungsi laplacian2: Img = rgb2gray(imread('C:Imagemainan.png'));  G = laplacian2(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.19. Gambar 10.19 Hasil deteksi tepi menggunakan operator Laplacian #2 10.3.6 Operator Laplacian of Gaussian Deteksi tepi orde kedua yang makin kurang sensitif terhadap derau adalah Laplacian of Gaussian (LoG). Hal ini disebabkan penggunaan fungsi Gaussian
  28. 28. 428 Pengolahan Citra : Teori dan Aplikasi yang memuluskan citra dan berdampak pada pengurangan derau pada citra. Akibatnya, operator mereduksi jumlah tepi yang salah terdeteksi (Crane, 1997). Menurut Fisher, dkk. (2003), operator LoG diperoleh melalui konvolusi dengan 𝐿𝑜𝐺(𝑦, 𝑥) = − 1 *1 − 𝜋𝜍4 𝑥 2 +𝑦 2 2𝜍2 + 𝑒 −(𝑥2 +𝑦2 ) 2𝜎2 (10.8) Fungsi di atas disebut sebagai filter topi Meksiko (the Mexican hat filter) karena bentuknya seperti topi yang biasa dikenakan orang Meksiko (lihat Gambar 10.20). Dalam hal ini, semakin besar nilai , semakin besar pula cadar yang diperlukan. Contoh cadar berukuran 5 x 5 yang mewakili operator LoG ditunjukkan pada Gambar 10.21 (Gonzalez Woods, 2002). Dalam praktik, terdapat berbagai variasi rumus yang digunakan dalam LoG. Gonzalez dan Woods (2002) menggunakan rumus seperti berikut: 𝑥 2 + 𝑦 2 − 𝜎 2 −(𝑥 2 +𝑦 2 ) 𝐿𝑜𝐺(𝑦, 𝑥) = − [ ] 𝑒 2𝜍2 𝜎4 Nixon dan Aguido (2002) menggunakan rumus: −(𝑥 2 +𝑦 2 ) 1 𝑥2 + 𝑦2 𝐿𝑜𝐺(𝑦, 𝑥) = 2 [ − 2] 𝑒 2𝜍2 𝜎 𝜎2 Adapun Crane (1997) menggunakan rumus: 𝐿𝑜𝐺(𝑦, 𝑥) = 1 𝑥 2 + 𝑦 2 −(𝑥 2 +𝑦 2 ) [1 − ] 𝑒 2𝜍2 𝜋𝜎 4 2𝜎 2
  29. 29. Segmentasi Citra 429 Gambar 10.20 Fungsi LoG(y, x) berdasarkan Fisher, dkk. (2003) 0 0 -1 0 0 0 -1 -2 -1 0 -1 -2 16 -2 -1 0 -1 -2 -1 0 0 0 -1 0 0 Gambar 10.21 Contoh operator LoG Contoh penggunaan LoG: Img = rgb2gray(imread('C:Imagemainan.png'));  H = [ 0 0 -1 0 0 0 -1 -2 -1 0 -1 -2 16 -2 -1 0 -1 -2 -1 0 0 0];  0 -1 0 G = deteksi(Img, H); imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.
  30. 30. 430 Pengolahan Citra : Teori dan Aplikasi Gambar 10.22 Contoh hasil deteksi tepi dengan LoG Nixon Aguado (2002) memberikan cara yang dapat digunakan untuk memperoleh cadar LoG berdasarkan nilai  dan ukuran. Cara tersebut tertuang dalam algoritma berikut. ALGORITMA 10.1 – Memperoleh cadar LoG Masukan:  Ukuran : ukuran cadar  : Deviasi standar Keluaran:  h (M, N): Cadar LoG cadarLoG(ukuran, ): 1. cx  floor((ukuran-1) / 2) 2. cy  cx 3. jum  0 4. FOR y  0 TO ukuran -1 FOR x  0 TO ukuran -1 nx  x – cx ny  y – cy
  31. 31. Segmentasi Citra 431 nilai  1 𝜍2 * 𝑛𝑥 2 + 𝑛𝑦 2 𝜍2 − 2+ 𝑒 −(𝑛𝑥2 + 𝑛𝑦2 ) 2𝜎2 h(y+1, x+1)  nilai jum  jum + nilai END-FOR END-FOR 5. // Lakukan normalisasi FOR y  1 TO ukuran FOR y  1 TO ukuran h(y, x)  h(y, x) / jum END-FOR END-FOR 6. RETURN h Pada algoritma di atas, normalisasi dilakukan agar jumlah koefisien pada cadar bernilai 1. Implementasi perolehan cadar LoG dapat dilihat pada cadarLoG.m. Program : cadarLoG.m function [H] = cadarLoG(ukuran, sigma) % CADARLOG Menghasilkan cadar LoG berdasarkan % Nixon dan Aguido (2002) % Masukan: % ukuran : ukuran cadar % sigma : Deviasi standar % Keluaran : H = cadar LoG cx = floor((ukuran-1) / 2); cy = cx; jum = 0; H = zeros(ukuran, ukuran); for y=0 : ukuran-1 for x=0 : ukuran -1 nx = x - cx; ny = y - cy; nilai = 1 / (sigma ^ 2) * ... ((nx^2 + ny^2)/(sigma^2)-2) * ... exp((-nx^2 - ny^2) / (2 * sigma^2)); H(y+1, x+1) = nilai; jum = jum + nilai; end end % Lakukan normalisasi for y=1 : ukuran
  32. 32. 432 Pengolahan Citra : Teori dan Aplikasi for x=1 : ukuran H(y,x) = H(y,x) / jum; end end Akhir Program Contoh penggunaan cadarLoG untuk memperoleh cadar LoG berukuran 7 x 7 dengan  = 0,6 : cadarLoG(7, 0.6)  ans = -0.0000 -0.0000 -0.0002 -0.0008 -0.0002 -0.0000 -0.0000 -0.0000 -0.0029 -0.1085 -0.3335 -0.1085 -0.0029 -0.0000 -0.0002 -0.1085 -2.0930 -1.8361 -2.0930 -0.1085 -0.0002 -0.0008 -0.3335 -1.8361 18.9348 -1.8361 -0.3335 -0.0008 -0.0002 -0.1085 -2.0930 -1.8361 -2.0930 -0.1085 -0.0002 -0.0000 -0.0029 -0.1085 -0.3335 -0.1085 -0.0029 -0.0000 -0.0000 -0.0000 -0.0002 -0.0008 -0.0002 -0.0000 -0.0000 Adapun contoh berikut untuk memperoleh cadar LoG berukuran 7 x 7 dengan  = 1: cadarLoG(7, 1)  ans = -0.0385 -0.3221 -1.0499 -1.5146 -1.0499 -0.3221 -0.0385 -0.3221 -2.1404 -4.7962 -5.2717 -4.7962 -2.1404 -0.3221 -1.0499 -4.7962 0 11.8132 0 -4.7962 -1.0499 -1.5146 -5.2717 11.8132 38.9532 11.8132 -5.2717 -1.5146
  33. 33. Segmentasi Citra 433 -1.0499 -4.7962 0 11.8132 0 -4.7962 -1.0499 -0.3221 -2.1404 -4.7962 -5.2717 -4.7962 -2.1404 -0.3221 -0.0385 -0.3221 -1.0499 -1.5146 -1.0499 -0.3221 -0.0385 Cadar LoG akan bermanfaat untuk kepentingan pemrosesan dengan operator Marr-Hildreth, yang dibahas pada Bagian 10.4.10. 10.3.7 Operator Difference of Gaussian Mengingat LoG memerlukan komputasi yang besar, Difference of Gaussian (DoG) biasa digunakan sebagai hampiran terhadap LoG. Fungsi DoG berupa 𝐷𝑜𝐺(𝑦. 𝑥) = −(𝑥2 +𝑦2 ) 2 𝑒 2𝜎1 2𝜍1 2 − −(𝑥2 +𝑦2 ) 2 𝑒 2𝜎2 2𝜍2 2 (10.9) Terlihat bahwa DoG dilaksanakan dengan melakukan konvolusi citra dengan sebuah cadar yang merupakan hasil pengurangan dua buah cadar Gaussian dengan nilai  yang berbeda. Gambar 10.23 menunjukkan dua cadar yang dapat digunakan untuk melaksanakan DoG (Crane, 1997).
  34. 34. 434 Pengolahan Citra : Teori dan Aplikasi 0 0 -1 -1 -1 0 0 0 -2 -3 -3 -3 -2 0 -1 -3 5 5 5 -3 -1 -1 -3 5 16 5 -3 -1 -1 -3 5 5 5 -3 -1 0 -2 -3 -3 -3 -2 0 0 0 -1 -1 -1 0 0 (a) Cadar berukuran 7 x 7 0 0 0 -1 -1 -1 0 0 0 0 -2 -3 -3 -3 -3 -3 -2 0 0 -3 -2 -1 -1 -1 -2 -3 0 -1 -3 -1 9 9 9 -1 -3 -1 -1 -3 -1 9 9 9 -1 -3 -1 -1 -3 -1 9 9 9 -1 -3 -1 0 -3 -2 -1 -1 -1 -2 -3 0 0 -2 -3 -3 -3 -3 -3 -2 0 0 0 0 -1 -1 -1 0 0 0 (b) Cadar berukuran 9 x 9 Gambar 10.23 Contoh cadar DoG Contoh penggunaan DoG: Img = rgb2gray(imread('C:Imagemainan.png'));  H = [ 0 0 -1 -1 -1 0 0 0 -2 -3 -3 -3 -2 0 -1 -3 5 5 5 -3 -1 -1 -3 5 16 5 -3 -1 -1 -3 5 5 5 -3 -1 0 -2 -3 -3 -3 -2 0 0 0 -1 -1 -1 0 0 ];  G = deteksi(Img, H); imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.24.
  35. 35. Segmentasi Citra 435 Gambar 10.24 Hasil deteksi tepi menggunakan DoG 10.3.9 Operator Canny Operator Canny, yang dikemukakan oleh John Canny pada tahun 1986, terkenal sebagai operator deteksi tepi yang optimal. Algoritma ini memberikan tingkat kesalahan yang rendah, melokalisasi titik-titik tepi (jarak piksel-piksel tepi yang ditemukan deteksi dan tepi yang sesungguhnya sangat pendek), dan hanya memberikan satu tanggapan untuk satu tepi. Terdapat enam langkah yang dilakukan untuk mengimplementasikan deteksi tepi Canny (Green, 2002). Keenam langkah tersebut dijabarkan berikut ini. Langkah 1: Pertama-tama dilakukan penapisan terhadap citra dengan tujuan untuk menghilangkan derau. Hal ini dapat dilakukan dengan menggunakan filter Gaussian dengan cadar sederhana. Cadar yang digunakan berukuran jauh lebih kecil daripada ukuran citra. Contoh ditunjukkan pada Gambar 10.25.
  36. 36. 436 Pengolahan Citra : Teori dan Aplikasi 2 5 4 2 4 9 12 9 4 5 12 15 12 5 4 9 12 9 4 2 1 / 115 4 4 5 4 2 Gambar 10.25 Contoh cadar Gaussian dengan theta = 1,4 Langkah 2: Setelah penghalusan gambar terhadap derau dilakukan, dilakukan proses untuk mendapatkan kekuatan tepi (edge strength). Hal ini dilakukan dengan menggunakan operator Gaussian. Selanjutnya, gradien citra dapat dihitung melalui rumus: G  Gx  G y (10.10) Langkah 3: Langkah ketiga berupa penghitungan arah tepi. Rumus yang digunakan untuk keperluan ini: theta = tan-1(Gy, Gx) (10.11) Langkah 4: Setelah arah tepi diperoleh, perlu menghubungkan antara arah tepi dengan sebuah arah yang dapat dilacak dari citra. Sebagai contoh, terdapat susunan piksel berukuran 5 x 5 seperti terlihat pada Gambar 10.26. Dengan melihat piksel “a” tampak bahwa a hanya memiliki 4 arah berupa 0o, 45o, 90o, dan 135o.
  37. 37. Segmentasi Citra 437 X X X X X X X X X X X X a X X X X X X X X X X X X Gambar 10.26 Matriks piksel berukuran 5x5 Selanjutnya, arah tepi yang diperoleh akan dimasukkan ke dalam salah satu kategori dari keempat arah tadi berdasarkan area yang tertera pada Gambar 10.27. Berikut adalah aturan konversi yang berlaku:   0 (H ) ( HI ) (H ) 45 yi  f   wij x j      j  arah   90 y  f (T )  w (TH ) y ( H )    ij  j   135 i  j   (10.12) 90o 135o 45o Gambar 10.27 Area untuk mengonversi arah tepi ke dalam kategori salah satu dari arah 0o, 45o, 90o, dan 135o Semua arah tepi yang berkisar antara 0 dan 22,5 serta 157,5 dan 180 derajat (warna biru) diubah menjadi 0 derajat. Semua arah tepi yang berkisar antara 22,5 dan 67,5 derajat (warna kuning) diubah menjadi 45 derajat. Semua arah tepi yang
  38. 38. 438 Pengolahan Citra : Teori dan Aplikasi berkisar antara 67,5 dan 112,5 derajat (warna merah) diubah menjadi 90 derajat. Semua arah tepi yang berkisar antara 112,5 dan 157,5 derajat (warna hijau) diubah menjadi 135 derajat. Langkah 5 Setelah arah tepi diperoleh, penghilangan non-maksimum dilaksanakan. Penghilangan non-maksimum dilakukan di sepanjang tepi pada arah tepi dan menghilangkan piksel-piksel (piksel diatur menjadi 0) yang tidak dianggap sebagai tepi. Dengan cara seperti itu, diperoleh tepi yang tipis. Langkah 6: Langkah keenam berupa proses yang disebut hysteresis. Proses ini menghilangkan garis-garis yang seperti terputus-putus pada tepi objek. Caranya adalah dengan menggunakan dua ambang T1 dan T2. Lalu, semua piksel citra yang bernilai lebih besar daripada T1 dianggap sebagai piksel tepi. Selanjutnya, semua piksel yang terhubung dengan piksel tersebut dan memiliki nilai lebih besar dari T2 juga dianggap sebagai piksel tepi. Bagian penting yang perlu dijelaskan adalah penghilangan non-maksimum dan peng-ambangan histeresis. Penghilangan non-maksimum dilakukan dengan mula-mula menyalin isi larik Grad (yang berisi besaran gradien) ke Non_max. Selanjutnya, penghilangan non-maksimum dilaksanakan dengan memperhatikan dua titik tetangga yang terletak pada arah tepi (yang tersimpan dalam Theta). Misalnya, arah tepi adalah 0. Apabila titik yang menjadi perhatian mempunyai koordinat (r, c), dua titik tetangga berupa (r, c-1) dan (r, c+1). Apabila gradien titik perhatian lebih besar daripada gradien kedua tetangga, nilainya akan dipertahankan. Sebaliknya, jika nilai titik perhatian lebih kecil daripada nilai salah satu atau kedua gradien tetangga, nilainya akan diabaikan (diubah menjadi nol). Seluruh kemungkinan proses seperti itu dijabarkan dalam Gambar 10.28.
  39. 39. Segmentasi Citra Arah tepi 0o: 439 i, j-1 i, j i, j+1 Arah tepi 45o: i-1, j+1 i, j if (Grad(i,j) = Grad(i,j+1)) || ... (Grad(i,j)= Grad(i,j-1)) Non_max(i,j) = 0; end Arah tepi 90o: i-1, j i+1, j-1 if (Grad(i,j) = Grad(i-1,j+1)) || ... (Grad(i,j) = Grad(i+1,j-1)) Non_max(i,j) = 0; end Arah tepi 135o: i-1, j-1 i, j i, j i, j+1 if (Grad(i,j) = Grad(i+1,j) ) || ... (Grad(i,j) = Grad(i-1,j)) Non_max(i,j) = 0; end i, j+1 if (Grad(i,j) = Grad(i+1,j+1)) || ... (Grad(i,j) = Grad(i-1,j-1)) Non_max(i,j) = 0; end Gambar 10.28 Penghilangan non-maksimum Peng-ambangan histeresis dilakukan dengan melibatkan dua ambang T1 (ambang bawah) dan ambang T2 (ambang atas). Nilai yang kurang dari T1 akan diubah menjadi hitam (nilai 0) dan nilai yang lebih dari T2 diubah menjadi putih (nilai 255). Lalu, bagaimana nilai yang lebih dari atau sama dengan T1 tetapi kurang dari T2? Oleh karena itu, untuk sementara nilai pada posisi seperti itu diberi nilai 128, yang menyatakan nilai abu-abu atau belum jelas, akan dijadikan 0 atau 255. Selanjutnya, dilakukan pengujian untuk mendapatkan kondisi seperti tercantum pada Gambar 10.29. Apabila kondisi seperti itu terpenuhi, angka 128 diubah menjadi 255. Proses pengujian seperti itu dilakukan sampai tidak ada lagi perubahan dari nilai 128 menjadi 255. Tahap selanjutnya, semua piksel yang bernilai 128 yang tersisa diubah menjadi nol.
  40. 40. 440 Pengolahan Citra : Teori dan Aplikasi j-1 j j+1 i-1 255 255 255 255 255 255 i 255 128 255 255 255 255 i+1 255 255 255 255 255 255 Gambar 10.29 Pengujian untuk mengubah nilai 128 menjadi 255 Implementasi operator Canny dapat dilihat pada canny.m. Sejumlah keterangan diberikan pada skrip, untuk menjelaskan kode. Program : canny.m function [K] = canny(F, ambang_bawah, ambang_atas) % CANNY Pemerolehan tepi objek pada citra F % melalui operator Canny % Masukan: % ambang_bawah = batas bawah untuk ambang histeresis % Nilai bawaan 011 % ambang_atas = batas atas untuk ambang histeresis % Nilai bawaan 0,3 % Hasil: citra G % Menentukan nilai ambang bawaan if nargin 2 ambang_bawah = 0.1; end if nargin 2 ambang_atas = 0.3; end % Kernel Gaussians HG = [ 2 4 5 4 2 4 9 12 9 12 5 12 15 12 5 4 9 12 9 12 2 4 5 4 2 ] / 115.0; [hHG, wHG] = size(HG); h2 = floor(hHG / 2); w2 = floor(wHG / 2); % Kenakan operasi Gaussian G = double(deteksi(F, HG, true)); % Pastikan hasilnya berada antara 0 sampai dengan 255 [m, n] = size(G);
  41. 41. Segmentasi Citra for i = 1 : m for j = 1 : n G(i, j) = round(G(i, j)); if G(i, j) 255 G(i, j) = 255; else if G(i, j) 0 G(i, j) = 0; end end end end % Kenakan perhitungan gradien dan arah tepi Theta = zeros(m, n); Grad = zeros(m, n); for i = 1 : m-1 for j = 1 : n-1 gx = (G(i,j+1)-G(i,j) + ... G(i+1,j+1)-G(i+1,j)) / 2; gy = (G(i,j)-G(i+1,j) + ... G(i,j+1)-G(i+1,j+1)) / 2; Grad(i, j) = sqrt(gx.^2 + gy.^2); Theta(i,j) = atan2(gy, gx); end end % Konversi arah tepi menjadi 0, 45, 90, atau 135 derajat [r c] = size (Theta); if Theta 0 Theta = Theta + pi; % Jangkauan menjadi 0 s/d pi end for i = 1 : r for j = 1 : c if (Theta(i,j) pi/8 || Theta(i,j) = 7/8*pi) Theta(i,j) = 0; elseif (Theta(i,j)=pi/8 Theta(i,j) 3*pi/8 ) Theta(i,j) = 45; elseif (Theta(i,j) =3*pi/8 Theta(i,j) 5*pi/8 ) Theta(i,j) = 90; else Theta(i,j) = 135; end end end % penghilangan non-maksimum Non_max = Grad; for i = 1+h2 : r-h2 for j = 1+w2 : c-h2 if Theta(i,j) == 0 if (Grad(i,j) = Grad(i,j+1)) || ... (Grad(i,j)= Grad(i,j-1)) Non_max(i,j) = 0; end 441
  42. 42. 442 Pengolahan Citra : Teori dan Aplikasi elseif Theta(i,j) == if (Grad(i,j) = (Grad(i,j) = Non_max(i,j) end elseif Theta(i,j) == if (Grad(i,j) = (Grad(i,j) = Non_max(i,j) end else if (Grad(i,j) = (Grad(i,j) = Non_max(i,j) end end 45 Grad(i-1,j+1)) || ... Grad(i+1,j-1)) = 0; 90 Grad(i+1,j) ) || ... Grad(i-1,j)) = 0; Grad(i+1,j+1)) || ... Grad(i-1,j-1)) = 0; end end % Pengambangan histeresis ambang_bawah = ambang_bawah * max(max(Non_max)); ambang_atas = ambang_atas * max(max(Non_max)); Histeresis = Non_max; % ----% ----for i = for Penentuan awal untuk memberikan nilai 0, 128, dan 255 1+h2 : r-h2 j = 1+w2 : c-w2 if (Histeresis(i,j) = ambang_atas) Histeresis(i,j) = 255; end if (Histeresis(i,j) ambang_atas) ... (Histeresis(i,j) = ambang_bawah) Histeresis(i,j)= 128; end if (Histeresis(i,j) ambang_bawah) Histeresis(i,j) = 0; end end end % ----- Penggantian angka 128 menjadi 255 % ----- Berakhir kalau tidak ada lagi yang berubah ulang = true; while ulang ulang = false; for i = 1+h2 : r-h2 for j = 1+w2 : c-w2 if (Histeresis(i,j) == 128) if (Histeresis(i-1, j-1) == 255) ... (Histeresis(i-1, j) == 255) ... (Histeresis(i, j+1) == 255) ... (Histeresis(i, j-1) == 255) ... (Histeresis(i, j+1) == 255) ... (Histeresis(i+1, j-1) == 255) ... (Histeresis(i+1, j) == 255) ...
  43. 43. Segmentasi Citra 443 (Histeresis(i+1, j+1) == 255) Histeresis(i,j) = 255; ulang = true; % Ulang pengujian end end end end end % ----% ----for i = for Penggantian angka 128 menjadi 0 untuk yang tersisa 1+h2 : r-h2 j = 1+w2 : c-w2 if (Histeresis(i,j) == 128) Histeresis(i,j) = 0; end end end % Buang tepi for i = 1+h2 : r-h2 for j = 1+w2 : c-w2 K(i-1,j-1) = Histeresis(i,j); end end Akhir Program Contoh penggunaan fungsi canny: Img = imread('C:Imagelena256.png');  G = canny(Img, 0.05, 0.15); imshow(G)  Contoh di atas menggunakan peng-ambangan berupa 0,05 untuk batas bawah dan 0,15 untuk batas atas. Hasilnya dapat dilihat pada Gambar 10.30.
  44. 44. 444 Pengolahan Citra : Teori dan Aplikasi (a) Citra lena256.tif (b) Efek Gaussian (d) Penghilangan non-maksimum (c) Besaran gradien (e) Hasil operator Canny Gambar 10.30 Contoh hasil antara hingga hasil akhir pada pengenaan operator Canny 10.3.10 Operator Zero-Crossing Operator zero-crossing atau dikenal dengan nama lain yaitu operator MarrHildreth sebenarnya adalah operator LoG yang dilengkapi dengan upaya untuk menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepitepi dalam citra. Sebagaimana telah dibahas di depan, zero-crossing merupakan perpotongan dengan sumbu X pada turunan kedua (Gambar 10.7). Operasi inilah yang membuat operator Marr-Hildreth mampu menghasilkan kurva yang tertutup, yang tidak dapat dipenuhi oleh operator Canny. Ada beberapa teknik yang dapat digunakan untuk melakukan pemrosesan zero-crossing, misalnya seperti yang dibahas pada Crane (1997) atau pada Nixon dan Aguido (2002). Algoritma yang didasarkan pada Nixon dan Aguido dapat dilihat berikut ini.
  45. 45. Segmentasi Citra 445 ALGORITMA 10.2 – Memproses zero crossing Masukan:  g: Citra hasil pemrosesan LoG, berukuran MxN  ukuran : Ukuran cadar  : Deviasi standar Keluaran:  k: citra hasil pemrosesan operator Marr-Hildreth zerocross(g, ukuran, ) : 1. // Bentuk larik k yang seluruhnya bernilai 0 FOR y  1 TO M FOR y  1 TO M k(y, x)  0 END END 2. FOR y  2 TO M-1 FOR kolom  2 TO N-1 bag1  rerata(g(x-1, y-1), g(x, y), g(x-1, y-1), g(x, y)) bag2  rerata(g(x, y-1), g(x+1, y), g(x, y-1), g(x+1, y)) bag3  rerata(g(x, y-1), g(x+1, y), g(x+1, y-1), g(x+1, y)) bag4  rerata(g(x, y), g(x+1, y+1), g(x, y), g(x+1, y+1)) terbesar  max(bag) terkecil  min(bag) IF (terbesar 0) AND (terkecil 0) k(y,x)  255 END-IF END-FOR END-FOR 3. RETURN k Implementasi operator zero-crossing dapat dilihat pada zerocross.m. Proses zero-crossing yang digunakan pada algoritma di depan dilaksanakan dengan memanfaatkan jendela berukuran 3 x 3. Setiap piksel yang diperoleh melalui operasi Laplacian dikenai jendela tersebut. Adapun perhitungan yang dilakukan adalah dengan mula-mula menghitung nilai rerata dari empat bagian (masing-masing berukuran 2 x 2) seperti yang diperlihatkan pada Gambar 10.31. Berdasarkan keempat bagian tersebut, nilai terbesar dan nilai terkecil
  46. 46. 446 Pengolahan Citra : Teori dan Aplikasi diperoleh. Piksel yang nilai terbesarnya melebihi nol dan nilai terkecilnya kurang dari nol akan dijadikan sebagai tepi (diberi nilai 255). Bagian 1 Bagian 3 Bagian 4 Bagian 2 Piksel pusat dalam jendela 3 x 3 Gambar 10.31 Area untuk deteksi zero-crossing pada jendela berukuran 3 x 3 Implementasi operator Marr-Hilbreth ditunjukkan di bawah ini. Program : zerocross.m function [K] = zerocross(F, ukuran, sigma) % ZEROCROSS Pemerolehan tepi objek pada citra F % melalui operator Marr-Hildreth % Hasil: citra K H = cadarLoG(ukuran, sigma); pembulatan = false; potong = true; G = deteksi(F, H, potong, pembulatan); % Proses zero crossing K = zeros(size(G)); [m, n] = size(K); for y=2 : m-1 for x=2: n-1 jum = 0;
  47. 47. Segmentasi Citra 447 for p = x-1 : x for q = y-1 : y jum = jum + G(q,p); end end rerata0 = jum / 4; jum = 0; for p = x-1 : for q = y jum = end end rerata1 = jum x : y+1 jum + G(q,p); / 4; jum = 0; for p = x : x+1 for q = y-1 : y jum = jum + G(q,p); end end rerata2 = jum / 4; jum = 0; for p = x : x+1 for q = y : y+1 jum = jum + G(q,p); end end rerata3 = jum / 4; terbesar = max([rerata0 rerata1 rerata2 rerata3]); terkecil = min([rerata0 rerata1 rerata2 rerata3]); if (terbesar 0) (terkecil 0) K(y,x) = 255; end end end return Akhir Program Contoh penggunaan fungsi zerocross: Img = imread('C:Imagelena256.png');  G = zerocross(Img, 7,1); imshow(G) 
  48. 48. 448 Pengolahan Citra : Teori dan Aplikasi Lima contoh hasil pemrosesan dengan operator Harr-Hildreth dengan nilai  berbeda dapat dilihat pada Gambar 10.32. (a) Citra lena256.tif (b) Zero crossing 7 x 7, =1 (c) Zero crossing 7 x 7, =0.6 (d) Zero crossing 9 x 9, =1 (e) Zero crossing 9 x 9, =0.6 (e) Zero crossing 9 x 9, =0.5 Gambar 10.32 Hasil penerapan operator Marr-Hilldreth pada lena256.png Contoh berikut menunjukkan penggunaan fungsi zerocross pada citra bangunan2.png: Img = imread('C:Imagebangunan2.png');  G = zerocross(Img,7,1); imshow(G)  Hasilnya ditunjukkan pada Gambar 10.33.
  49. 49. Segmentasi Citra 449 (a) Citra bangunan2.png (b) Hasil operator Marr-Hilldreth Gambar 10.33 Operator Marr-Hilldreth pada bangunan2.png Apabila dikehendaki untuk menggunakan  yang besar, ukuran cadar juga perlu diperbesar. Sebagai pedoman kasar, ukuran cadar yang diperlukan sebesar round(6 ) + 1 .
  50. 50. 450 Pengolahan Citra : Teori dan Aplikasi 10.3.11 Operator Gradien Kompas Operator gradien kompas adalah jenis operator yang mencari tepi dengan menggunakan delapan arah mata angin. Prosesnya adalah melakukan konvolusi terhadap citra dengan menggunakan 8 cadar. Hasil operasinya berupa nilai maksimum dari kedelapan konvolusi. Empat contoh operator beserta delapan cadar masing-masing dapat dilihat pada Gambar 10.34 (Crane, 1997). Prewitt Kirsch Robinson 3-level 1 1 1 Timur H1 1 1 1 1 −2 1 −1 −1 −1 5 5 5 Timur Laut H2 1 1 1 −1 −2 1 −1 −1 −1 −3 5 5 −3 0 5 −3 −3 −3 0 1 1 −1 1 1 −3 −3 5 −3 0 5 −3 −3 5 1 1 1 0 0 0 −1 0 1 Utara H3 −1 1 1 −1 −2 1 −3 0 −3 −3 −3 −3 Barat Laut H4 −1 −1 1 −1 −2 1 1 1 1 −3 −3 −3 −3 0 5 −3 5 5 Barat H5 −1 −1 −1 1 −2 1 1 1 1 −3 −3 −3 −3 0 −3 5 5 −3 Barat Daya H6 1 −1 −1 1 −2 −1 1 1 1 −3 −3 −3 5 0 −3 5 5 −3 1 1 −1 5 −3 −3 5 0 −3 5 −3 −3 1 0 −1 1 1 1 5 5 −3 5 0 −3 −3 −3 −3 1 1 0 Selatan H7 Tenggara H8 1 1 −1 1 −1 −1 1 −2 −1 1 −2 −1 0 −1 −1 −1 −1 −1 −1 0 1 −1 0 1 1 −2 1 −1 −1 −1 Robinson 5-level 0 0 0 1 0 −1 1 0 −1 1 0 −1 1 2 1 −1 −1 0 −1 0 0 0 1 2 −2 0 2 −2 −1 0 1 1 1 −1 0 1 −1 −2 −1 1 1 0 0 −1 −2 1 0 −1 0 −1 −1 2 1 0 −1 −2 −1 −1 0 1 −1 0 1 −1 −1 −1 1 0 −1 0 0 0 0 0 0 1 0 −1 2 0 −2 1 0 −1 −2 −1 0 −1 0 −1 0 1 2 1 2 1 2 1 0 1 0 −1 0 −1 −2 Gambar 10.34 Operator gradien kompas Fungsi kompas berikut berguna untuk melakukan pengujian operator gradien kompas terhadap citra berskala keabuan dengan menggunakan cadar yang tertera pada Gambar 10.35.
  51. 51. Segmentasi Citra 451 Program : kompas.m function [G] = kompas(F, jenis) % KOMPAS Melakukan operasi dengan operator kompas % Argumen F berupa citra berskala keabuan dan % jenis berupa tipe operator % 1 = Prewitt % 2 = Kirsch % 3 = Robinson 3-level % 4 = Robinson 4-level % % Hasil: citra G if nargin 2 jenis = 1; end % Operator Prewitt1 = Prewitt2 = Prewitt3 = Prewitt4 = Prewitt5 = Prewitt6 = Prewitt7 = Prewitt8 = Kirsch1 Kirsch2 Kirsch3 Kirsch4 Kirsch5 Kirsch6 Kirsch7 Kirsch8 = = = = = = = = kompas [1 1 -1;1 -2 -1;1 1 -1]; [1 -1 -1;1 -2 -1;1 1 -1]; [-1 -1 -1;1 -2 1;1 1 1]; [-1 -1 1;-1 -2 1;1 1 1]; [-1 1 1;-1 -2 1;-1 1 1]; [1 1 1;-1 -2 1;-1 -1 1]; [1 1 1;1 -2 1;-1 -1 -1]; [1 1 1;-1 -2 1;-1 -1 1]; [5 -3 -3;5 0 -3;5 -3 -3]; [-3 -3 -3;5 0 -3; 5 5 -3]; [-3 -3 -3;-3 0 -3;5 5 5]; [-3 -3 -3;-3 0 5;-3 5 5]; [-3 -3 5;-3 0 5;-3 -3 -3]; [-3 5 5;-3 0 5;-3 -3 -3]; [5 5 5;-3 0 -3;-3 -3 -3]; [5 5 -3;5 0 -3;-3 -3 -3]; Robinson3_1 Robinson3_2 Robinson3_3 Robinson3_4 Robinson3_5 Robinson3_6 Robinson3_7 Robinson3_8 = = = = = = = = [1 0 -1;1 0 -1;1 0 -1]; [0 -1 -1;1 0 -1;1 1 0]; [-1 -1 -1;0 0 0;1 1 0]; [1 1 -1;1 -2 -1;1 1 -1]; [-1 0 1;-1 0 1;-1 0 1]; [0 1 1;-1 0 1;-1 -1 0]; [1 1 1;0 0 0;-1 -1 -1]; [1 1 0;1 0 -1;0 -1 -1]; Robinson5_1 Robinson5_2 Robinson5_3 Robinson5_4 Robinson5_5 Robinson5_6 Robinson5_7 Robinson5_8 = = = = = = = = [1 0 -1;2 0 -2;1 0 -1]; [0 -1 -2;1 0 -1;2 1 0]; [-1 -2 -1;0 0 0;1 2 -1]; [-2 -1 0;-1 0 1;0 1 2]; [-1 0 1;-2 0 2;-1 0 1]; [0 1 2;-1 0 1;-2 -1 0]; [1 2 1;0 0 0;-1 -2 -1]; [2 1 0;1 0 -1;0 -1 -2];
  52. 52. 452 Prewitt(:,:,1) Prewitt(:,:,2) Prewitt(:,:,3) Prewitt(:,:,4) Prewitt(:,:,5) Prewitt(:,:,6) Prewitt(:,:,7) Prewitt(:,:,8) Kirsch(:,:,1) Kirsch(:,:,2) Kirsch(:,:,3) Kirsch(:,:,4) Kirsch(:,:,5) Kirsch(:,:,6) Kirsch(:,:,7) Kirsch(:,:,8) Pengolahan Citra : Teori dan Aplikasi = = = = = = = = = = = = = = = = Prewitt1; Prewitt2; Prewitt3; Prewitt4; Prewitt5; Prewitt6; Prewitt7; Prewitt8; Kirsch1; Kirsch2; Kirsch3; Kirsch4; Kirsch5; Kirsch6; Kirsch7; Kirsch8; Robinson3(:,:,1) Robinson3(:,:,2) Robinson3(:,:,3) Robinson3(:,:,4) Robinson3(:,:,5) Robinson3(:,:,6) Robinson3(:,:,7) Robinson3(:,:,8) = = = = = = = = Robinson3_1; Robinson3_2; Robinson3_3; Robinson3_4; Robinson3_5; Robinson3_6; Robinson3_7; Robinson3_8; Robinson5(:,:,1) Robinson5(:,:,2) Robinson5(:,:,3) Robinson5(:,:,4) Robinson5(:,:,5) Robinson5(:,:,6) Robinson5(:,:,7) Robinson5(:,:,8) = = = = = = = = Robinson5_1; Robinson5_2; Robinson5_3; Robinson5_4; Robinson5_5; Robinson5_6; Robinson5_7; Robinson5_8; % Tentukan operator yang dipakai if jenis == 1 Opr = Prewitt; elseif jenis == 2 Opr = Kirsch; elseif jenis == 3 Opr = Robinson3; elseif jenis == 4 Opr = Robinson5; else error('Operator kedua: 1 s/d 4'); end % Lakukan proses konvolusi F = double(F); [m, n] = size(F); for y=2 : m-1 for x=2 : n-1 % Pelaksanaan konvolusi for i=1 : 8 Grad(i) = Opr(1,1,i) * F(y+1, x+1) + ... Opr(1,2,i) * F(y+1, x) + ... Opr(1,3,i) * F(y+1, x-1) + ...
  53. 53. Segmentasi Citra 453 Opr(2,1,i) Opr(2,2,i) Opr(2,3,i) Opr(3,1,i) Opr(3,2,i) Opr(3,3,i) * * * * * * F(y, x+1) + ... F(y, x) + ... F(y, x-1) + ... F(y-1, x+1) + ... F(y-1, x) + ... F(y-1, x-1); end maks = max(Grad); G(y-1, x-1) = maks; end end G = uint8(G); Akhir Program Contoh penggunaan fungsi kompas: Img = rgb2gray(imread('C:Imagemainan.png'));  G = kompas(Img, 1);  imshow(G)  Angka 1 pada pemanggilan fungsi kompas menyatakan bahwa operator yang dipakai adalah Prewitt. Angka yang dapat digunakan pada argumen kedua berupa 1, 2 ,3, atau 4, dengan ketentuan sebagai berikut: 1 = Prewitt 2 = Kirsch 3 = Robinson 3-level 4 = Robinson 4-level Gambar 10.35 memperlihatkan contoh hasil deteksi tepi dengan keempat operator tersebut.
  54. 54. 454 Pengolahan Citra : Teori dan Aplikasi (a) Prewitt (c) Robinson 3-level (b) Kirsch (c) Robinson 5-level Gambar 10.35 Hasil deteksi tepi dengan operator gradien kompas 10.4 Peng-ambangan Dwi-Aras Segmentasi yang paling sederhana dilaksanakan dengan menggunakan ambang intensitas. Nilai yang lebih kecil daripada nilai ambang diperlakukan sebagai area pertama dan yang lebih besar daripada atau sama dengan nilai ambang dikelompokkan sebagai area yang kedua. Dalam hal ini, salah satu area tersebut berkedudukan sebagai latarbelakang. Cara seperti itulah yang disebut peng-ambangan dwi-aras (bi-level thresholding) atau terkadang dinamakan pengambangan intensitas. Secara matematis, hal itu dinyatakan dengan 𝑏(𝑦, 𝑥) = 𝑓(𝑥) = { 1, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) ≥ 𝑇 0, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) 𝑇 (10.13) Pada rumus di atas, T menyatakan ambang intensitas. Dalam praktik, nilai 1 atau 0 pada Persamaan 10.13 dapat dipertukarkan. Peng-ambangan intensitas biasa digunakan untuk memisahkan tulisan hitam yang berada di atas secarik kertas putih. Namun, perlu diketahui, pengambangan ini mempunyai kelemahan, yaitu:
  55. 55. Segmentasi Citra 455 1) tidak memperlihatkan hubungan spasial antarpiksel; 2) sensitif terhadap pencahayaan yang tidak seragam; 3) hanya berlaku untuk keadaan yang ideal (misalnya, latarbelakang hitam dan objek berwarna putih). (a) ipomoea.png (b) Histogram citra Gambar 10.36 Citra daun dan histogramnya Salah satu cara untuk menentukan nilai ambang adalah dengan memperhatikan histogram citra. Sebagai contoh, perhatikan Gambar 10.36. Berdasarkan histogram, pemisahan dapat dilakukan dengan memilih nilai ambang pada bagian lembah. Sebagai contoh, nilai di sekitar 100 dapat digunakan sebagai nilai ambang. Untuk mengujinya, mula-mula siapkan skrip berikut. Program : ambang.m function [G] = ambang(F, t) % AMBANG Menentukan nilai ambang yang digunakan % untuk melakukan pengambangan % F = Citra berskala keabuan % t = nilai ambang % % Keluaran: G = Citra biner [m, n] = size(F); for i=1 : m for j=1:n
  56. 56. 456 Pengolahan Citra : Teori dan Aplikasi if F(i,j) = t G(i,j) = 0; else G(i,j) = 1; end end end Akhir Program Contoh peng-ambangan dengan nilai ambang sebesar 100: Img = imread('C:Imageipomoea.png');  G = ambang(Img, 100);  imshow(1-G)  Penggunaan 1-G dalam imshow ditujukan untuk membalik nilai 1 dan 0. Dengan ungkapan tersebut, bagian daun akan diberi nilai 1 (putih). Contoh hasilnya dapat dilihat pada Gambar 10.37. (a) ipomoea.tif (b) Hasil pengambangan Gambar 10.37 Hasil pembalikan latarbelakang dan objek Persoalan utama dalam peng-ambangan intensitas terletak pada penentuan nilai ambang (T) secara otomatis. Salah satu cara yang dilakukan adalah dengan menentukan nilai ambang iteratif secara interaktif (Gonzalez Woods, 2002;
  57. 57. Segmentasi Citra 457 Acharya Ray, 2005). Algoritma untuk menentukan T secara iteratif adalah seperti berikut. ALGORITMA 10.3 – Memperoleh nilai ambang secara iteratif Masukan:  f (M,N): Citra berskala keabuan berukuran M baris dan N kolom Keluaran:  nilai ambang T ambang_adaptif(f): 1. Pilihlah satu nilai untuk menentukan nilai ambang (T  To). 2. Bagilah citra menjadi dua bagian dengan menggunakan T sebagai nilai ambang. 3. Hitunglah nilai rata-rata pada kedua area (1 dan 2). 𝜇 +𝜇 4. Hitunglah nilai ambang: T  1 2 2 5. Ulangi langkah 2 sampai dengan 4 sampai tidak ada perubahan nilai T. 6. RETURN T Peng-ambangan iteratif dikenal juga dengan sebutan pengambangan optimal. Algoritma peng-ambangan iteratif dituangkan dalam bentuk program seperti berikut. Program : titeratif.m function [t1] = titeratif(F) % TITERATIF Menentukan nilai ambang yang digunakan % untuk melakukan pengambangan % F = Citra berskala keabuan %
  58. 58. 458 Pengolahan Citra : Teori dan Aplikasi % Keluaran: G = Citra biner [m, n] = size(F); F = double(F); t0 = 127; while true rata_kiri = 0; rata_kanan = 0; jum_kiri = 0; jum_kanan = 0; for i=1 : m for j=1 : n if F(i, j) = 127 rata_kiri = rata_kiri + F(i,j); jum_kiri = jum_kiri + 1; else rata_kanan = rata_kanan + F(i,j); jum_kanan = jum_kanan + 1; end end end rata_kiri = rata_kiri / jum_kiri; rata_kanan = rata_kanan / jum_kanan; t1 = (rata_kiri + rata_kanan) / 2.0; if (t0 - t1) 1 break; % Keluar dari while end t0 = t1; end t1 = floor(t1); Akhir Program Pengujian fungsi titeratif dapat dilihat di bawah ini. Img = imread('C:Imageipomoea.png');  t = titeratif(Img)  t = 130 G = ambang(Img, t);  imshow(1-G) 
  59. 59. Segmentasi Citra 459 Hasil di atas menyatakan bahwa nilai ambang yang dihasilkan oleh fungsi titeratif adalah 130. Penggunaan 1-G dalam imshow adalah untuk membalik nilai 1 dan 0. Nilai 1 menjadi 0 dan nilai 0 menjadi 1. Dengan ungkapan tersebut, bagian daun akan diberi nilai 1 (putih). Contoh hasilnya dapat dilihat pada Gambar 10.38. (a) ipomoea.tif (b) Hasil peng-ambangan Gambar 10.38 Contoh hasil peng-ambangan secara iteratif 10.5 Peng-ambangan Global Vs. Lokal Terkait dengan nilai ambang yang digunakan pada segmentasi citra, terdapat istilah peng-ambangan global dan peng-ambangan lokal. Pengertiannya sebagai berikut.  Apabila nilai ambang t bergantung hanya pada satu nilai aras keabuan f(y, x), peng-ambangan disebut sebagai global. Dalam hal ini, semua piksel dalam citra akan ditentukan oleh satu nilai ambang t.  Peng-ambangan disebut lokal kalau nilai ambang t bergantung pada f(y, x) dan g(y, x) dengan g(y,x) menyatakan properti citra lokal pada titik (y, x). Dalam hal ini, properti citra lokal dapat diperoleh melalui statisti (misalnya rerata tetangga di sekitar titik (y, x) ). Dengan kata lain, nilai ambang untuk setiap piksel ditentukan oleh nilai piksel tetangga. Dengan demikian, nilai ambang untuk piksel masing-masing belum tentu sama.
  60. 60. 460 Pengolahan Citra : Teori dan Aplikasi 10.6 Peng-ambangan Aras-jamak Pada peng-ambangan beraras-jamak (multilevel thresholding), citra dibagi menjadi beberapa bagian dengan menggunakan beberapa nilai ambang, Cara seperti itu dilakukan kalau pada histogram terdapat puncak-puncak yang membedakan antara satu objek terhadap yang lain. Sebagai contoh, perhatikan Gambar 10.39(a) dan kemudian lihatlah pada histogram yang terdapat pada Gambar 10.39(b). T1 Objek lingkaran T2 Objek kotak (a) benda.png (b) Histogram Gambar 10.39 Contoh citra dengan beberapa puncak dan lembah yang terpisah Contoh berikut menunjukkan algoritma yang digunakan pada peng-ambangan aras-jamak yang menggunakan dua buah nilai ambang. ALGORITMA 10.3 – Segmentasi dengan peng-ambangan arasjamak Masukan:  f (MxN): Citra berskala keabuan (berukuran MxN) Keluaran:  g (M, N): Citra biner ambang_aras_jamak(ukuran, ): FOR y  1 TO ukuran -1 FOR x  1 TO ukuran -1 nx  x – cx ny  y – cy
  61. 61. Segmentasi Citra 461 nilai  1 𝜍2 * 𝑛𝑥 2 + 𝑛𝑦 2 𝜍2 − 2+ 𝑒 −(𝑛𝑥2 + 𝑛𝑦2 ) 2𝜎2 h(y+1, x+1)  nilai jum  jum + nilai END-FOR END-FOR 7. RETURN g Implementasi berdasarkan algoritma di atas dapat dilihat di bawah ini. Program : arasjamak.m function [G] = arasjamak(F, t1, t2) % Pengambanan dengan dua nilai ambang % F = Citra berskala keabuan % t1 = nilai ambang bawah % t2 = nilai ambang atas % % Keluaran: G = Citra biner [m, n] = size(F); for i=1 : m for j=1:n if F(i,j) = t1 || F(i,j) = t2 G(i,j) = 0; else G(i,j) = 1; end end end Akhir Program Contoh penggunaan fungsi arasjamak: Img = imread('C:Imagebenda.png');  G = arasjamak(Img, 50, 100); imshow(G); 
  62. 62. 462 Pengolahan Citra : Teori dan Aplikasi Hasilnya dapat dilihat pada Gambar 10.40(b). beberapa contoh penggunaan nilai ambang yang lain dapat dilihat pada Gambar 10.40(c) hingga 10.40(f). (a) benda.png (c) Nilai ambang t1=175 dan t2=200 (e) Nilai ambang t1=235 dan t2=250 (b) Nilai ambang t1=50 dan t2=100 (d) Nilai ambang t1=220 dan t2=230 (f) Nilai ambang t1=220 dan t2=250 Gambar 10.40 Hasil penerapan nilai ambang jamak Contoh lain dapat dilihat di bawah ini: Img = imread('C:Imageipomoea.png');  G = arasjamak(Img, 50, 100); imshow(G); 
  63. 63. Segmentasi Citra 463 Hasilnya dapat dilihat pada Gambar 10.41(b). Terlihat bahwa dengan cara seperti itu, bayangan daun dapat dihilangkan. (a) ipomoea.png (b) Pengambangan t1=50, t2=100 Gambar 10.41 Contoh peng-ambangan aras jamak pada ipomoea.png 10.7 Peng-ambangan dengan Metode Otsu Metode Otsu dipublikasikan oleh Nobuyuki Otsu pada tahun 1979. Metode ini menentukan nilai ambang dengan cara membedakan dua kelompok, yaitu objek dan latarbelakang, yang memiliki bagian yang saling bertumpukan, berdasarkan histogram (lihat Gambar 10.42). Nilai ambang (t) Kelas 1 Kelas 2 Gambar 10.42 Penentuan nilai ambang untuk memperoleh hasil yang optimal Prinsip metode Otsu dijelaskan berikut ini. Pertama-tama, probabilitas nilai intensitas i dalam histogram dihitung melalui
  64. 64. 464 Pengolahan Citra : Teori dan Aplikasi 𝑝(𝑖) = 𝑛𝑖 𝑁 , 𝑝(𝑖) ≥ 0, ∑256 𝑝(𝑖) = 1 1 (10.14) dengan ni menyatakan jumlah piksel berintensitas i dan N menyatakan jumlah semua piksel dalam citra. Jika histogram dibagi menjadi dua kelas (objek dan latarbelakang), pembobotan pada kedua kelas dinyatakan sebagai berikut: 𝑡 𝑤1 (𝑡) = ∑ 𝑖=1 𝑝(𝑖) (10.15) 𝐿 𝑤2 (𝑡) = ∑ 𝑖=𝑡+1 𝑝(𝑖) = 1 − 𝑤1 (𝑡) (10.16) Dalam hal ini, L menyatakan jumlah aras keabuan. Rerata kedua kelas dihitung melalui: 𝑡 𝑚1 (𝑡) = ∑ 𝑖=1 𝑖. 𝑝(𝑖) /𝑊1 (𝑡) (10.17) 𝑡 𝑚2 (𝑡) = ∑ 𝑖=1 𝑖. 𝑝(𝑖) /𝑊2 (𝑡) (10.18) Varians kedua kelas dinyatakan dengan rumus: 𝑡 𝜎1 2 (𝑡) = ∑ 𝑖=1(1 − 𝑚1 )2 . 𝑝(𝑖) 𝑊1 (𝑡) 𝐿 𝜎2 2 (𝑡) = ∑ 𝑖=𝑡+1(1 − 𝑚2 )2 . 𝑝(𝑖) 𝑊2 (𝑡) (10.19) (10.20) Varians total dapat dinyatakan dengan 𝜎 2 (𝑡) = 𝜎 𝑊 2 (𝑡) + 𝜎 𝐵 2 (𝑡) Dalam hal ini, (10.21) 𝜎 𝑊 2 dinamakan sebagai within-class variance (WCV) dan 𝜎 𝐵 2 disebut sebagai between-class variance (BCV). WCV dapat dinyatakan dengan 𝜎 𝑊 2 (𝑡) = 𝑊1 (𝑡). 𝜎1 (𝑡)2 + 𝑊2 (𝑡). 𝜎2 (𝑡)2 (10.22) Rumus di atas menunjukkan bahwa WCV adalah jumlah varians kelas secara individual yang telah diboboti dengan probabilitas kelas masing-masing. Adapun BCV dinyatakan dengan
  65. 65. Segmentasi Citra 𝜎 𝐵 2 (𝑡) = 𝑊1 . [𝑚1 (𝑡) − 𝑚 𝑇 ]2 + 𝑊2 . [𝑚2 (𝑡) − 𝑚 𝑇 ]2 465 (10.23) 𝑁 Dalam hal ini, mT adalah rerata total (𝑚 𝑇 = ∑ 𝑖=1 𝑖. 𝑝(𝑖)). Nilai ambang optimum dapat diperoleh dengan dua cara. Cara pertama dilaksanakan dengan meminimumkan WCV. Cara kedua dilaksanakan dengan memaksimumkan BCV. Namun, berdasarkan kedua cara tersebut, cara yang kedua lebih menghemat komputasi. Implementasi berikut didasarkan pada Persamaan 10.23. Skrip ditulis tanpa memperhatikan optimasi komputasi. Pendekatan lain, yang memperhatikan kecepatan komputasi, dapat dilihat pada Demirkaya, dkk. (2009). Program : otsu.m function [ambang] = otsu(F) % OTSU Memperoleh nilai ambang menggunakan metode Otsu % F = Citra berskala keabuan [m, n] = size(F); jum_piksel = m * n; % Kosongkan histogram for i=1 : 256 h(i) = 0; end % Hitung histogram for i=1 : m for j=1 : n intensitas = F(i,j); h(intensitas+1) = h(intensitas+1) + 1; end end % Hitung p(i) for i=1 : 256 p(i) = h(i) / jum_piksel; end % Hitung rerata total mT = 0; for i=1 : 256 mT = mT + i * p(i); end
  66. 66. 466 Pengolahan Citra : Teori dan Aplikasi % Hitung t optimal ambang = 0; varMaks = 0; for t=0 : 255 % Hitung w1(t) w1 = 0.0; for i=1 : t w1 = w1 + p(i+1); end % Hitung w2(t) w2 = 0.0; for i=t+1 : 255 w2 = w2 + p(i+1); end % Hitung m1 m1 = 0; for i=0 : t if w1 0 m1 = m1 + i * p(i+1)/w1; end end % Hitung m2 m2 = 0; for i=t+1 : 255 if w2 0 m2 = m2 + i * p(i+1)/w2; end end % Hitung BCV bcv = w1 * (m1 - mT)^2 + w2 * (m2 - mT)^2; if bcv varMaks varMaks = bcv; ambang = t; end end Akhir Program Contoh: Img = imread('C:Imageipomoea.png');  t = otsu(Img)  t = 130
  67. 67. Segmentasi Citra 467 Hasil dengan menggunakan pendekatan Otsu tidak berbeda dengan hasil yang menggunakan peng-ambangan iteratif. Octave menyediakan fungsi bawaan bernama graythresh, yang diimplementasikan dengan menggunakan metode Otsu. 10.8 Peng-ambangan Adaptif Peng-ambangan adaptif (adaptive thresholding) merupakan peng-ambangan yang menggunakan nilai ambang lokal, yang dihitung secara adaptif berdasarkan statistika piksel-piksel tetangga. Hal ini didasarkan kenyataan bahwa bagianbagian kecil dalam citra mempunyai iluminasi yang sama, sehingga lebih tepat kalau nilai ambang dihitung berdasarkan bagian-bagian kecil dalam citra dan bukan berdasarkan seluruh piksel dalam citra. Ada tiga pendekatan yang biasa digunakan untuk mewujudkan pengambangan ini. Pendekatan pertama menggunakan statistika rerata terhadap intensitas lokal. Terkadang, nilai yang konstan ikut dilibatkan. Rumusnya sebagai berikut. 𝑇= ∑(𝑦,𝑥)∈𝑊 𝑓(𝑖,𝑗) 𝑁𝑤 − 𝐶 (10.24) Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah piksel dalam jendela, dan C menyatakan suatu konstanta. Contoh fungsi yang menggunakan pendekatan rerata dapat dilihat berikut ini.
  68. 68. 468 Pengolahan Citra : Teori dan Aplikasi Program : adapmean.m function [G] = adapmean(F, w, c) % ADAPMEAN Melakukan pengambangan adaptif dengan menggunakan % mean. % F = Citra berskala keabuan % w = ukura jendela % c = nilai konstan % % Hasil: citra G if nargin == 0 disp('Penggunaan adapmean(Citra, ukuran, konstanta'); return; end if nargin == 1 w = 2; c = 0; end if nargin == 2 c = 0; end % Lakukan pemrosesan citra [m, n] = size(F); delta = floor(w/2); if c 0 G = zeros(m, n); else G = ones(m, n); end % Diasumsikan berlatarbelakang 0 % Diasumsikan berlatarbelakang 1 F=double(F); for y=1+delta : m-delta for x=1+delta : n-delta rerata = 0.0; jum = w * w; for p=1 : w for q=1 : w rerata = rerata + F(y-round(w/2)+p, ... x-round(w/2)+q); end end rerata = floor(rerata / jum) - c; if F(y,x) = rerata G(y, x) = 1; else
  69. 69. Segmentasi Citra 469 G(y, x) = 0; end end end Akhir Program Contoh penggunaan fungsi adapmeaan: Img = imread('C:Imageipomoea.png');  G = adapmean(Img, 3, -4); imshow(G)  Berbagai contoh pengaturan argumen kedua (w) dan argumen ketiga (c) ditunjukkan pada Gambar 10.43.
  70. 70. 470 Pengolahan Citra : Teori dan Aplikasi (a) Citra ipomoea.tif (b) w = 2, c = 0 (c) w = 2, c = -2 (d) w = 3, c = -4 (f) w = 7, c = -5 (e) w = 10, c = 5 Gambar 10.43 Efek peng-ambangan adaptif dengan menggunakan nilai mean dengan berbagai ukuran jendela w dan nilai ambang c Pendekatan peng-ambangan adaptif yang kedua menggunakan statistika median. Secara matematis, pendekatan ini dapat ditulis menjadi 𝑇 = 𝑚𝑒𝑑𝑖𝑎𝑛(𝑓(𝑦, 𝑥), (𝑦, 𝑥) ∈ 𝑊) − 𝐶 (10.25)
  71. 71. Segmentasi Citra 471 Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah citra dalam jendela, dan C menyatakan suatu nilai yang konstan. Implementasinya dapat dilihat pada kode berikut. Program : adapmedian.m function [G] = adapmedian(F, w, c) % ADAPMEDIAN Melakukan pengambangan adaptif dengan menggunakan % median. % F = Citra berskala keabuan % w = ukura jendela % c = nilai konstan % % Hasil: citra G if nargin == 0 disp('Penggunaan adapmean(Citra, ukuran, konstanta'); return; end if nargin == 1 w = 2; c = 0; end if nargin == 2 c = 0; end % Lakukan pemrosesan citra [m, n] = size(F); delta = floor(w/2); if c 0 G = zeros(m, n); else G = ones(m, n); end Nilai = []; % Diasumsikan berlatarbelakang 0 % Diasumsikan berlatarbelakang 1 % Kosongkan array untuk median for y=1+delta : m-delta for x=1+delta : n-delta rerata = 0.0; jum = w * w; pencacah = 0; for p=1 : w for q=1 : w
  72. 72. 472 Pengolahan Citra : Teori dan Aplikasi pencacah = pencacah + 1; Nilai(pencacah) = F(y-round(w/2)+p, ... x-round(w/2)+q); end end % Urutkan hasil Urut = sort(Nilai); median = Urut(floor(pencacah/2)) - c; if F(y,x) = median G(y, x) = 1; else G(y, x) = 0; end end end Akhir Program Contoh penggunaan fungsi adapmedian: Img = imread('C:Imageipomoea.png');  G = adapmedian(Img, 10, 5); imshow(G)  Efek berbagai pengaturan terhadap w dan c dapat dilihat pada Gambar 10.44.
  73. 73. Segmentasi Citra 473 (a) Citra ipomoea.tif (b) w = 4, c = 0 (c) w = 13, c = 2 (d) w = 3, c = -4 (f) w = 7, c = -5 (e) w = 10, c = 5 Gambar 10.44 Efek peng-ambangan adaptif dengan menggunakan nilai median dengan berbagai ukuran jendela dan konstanta yang berbeda Pendekatan peng-ambangan adaptif yang ketiga menggunakan statistika maksimum dan minimum, yang dinyatakan dengan rumus 𝑇= 𝑚𝑎𝑥(𝑓(𝑦,𝑥),(𝑦,𝑥)∈𝑊) + 𝑚𝑖𝑛(𝑓(𝑦,𝑥),(𝑦,𝑥)∈𝑊) 2 (10.26)
  74. 74. 474 Pengolahan Citra : Teori dan Aplikasi Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah piksel dalam jendela. Implementasinya sebagai berikut. Program : adapmaxmin.m function [G] = adapmaxmin(F, w, c) % ADAPMAXMIN Melakukan pengambangan adaptif dengan menggunakan % maximum dan minumum. % F = Citra berskala keabuan % w = ukura jendela % c = nilai konstan % % Hasil: citra G if nargin == 0 disp('Penggunaan adapmean(Citra, ukuran, konstanta'); return; end if nargin == 1 w = 2; c = 0; end if nargin == 2 c = 0; end % Lakukan pemrosesan citra [m, n] = size(F); delta = floor(w/2); if c 0 G = zeros(m, n); else G = ones(m, n); end % Diasumsikan berlatarbelakang 0 % Diasumsikan berlatarbelakang 1 for y=1+delta : m-delta for x=1+delta : n-delta rerata = 0.0; terbesar = 0.0; terkecil = 0.0; jum = w * w; pencacah = 0; for p=1 : w for q=1 : w pencacah = pencacah + 1;
  75. 75. Segmentasi Citra 475 nilai= F(y-round(w/2)+p, ... x-round(w/2)+q); if nilai terbesar terbesar = nilai; end if nilai terkecil terkecil = nilai; end end end rerata = floor((terbesar - terkecil) / 2) - c; if F(y,x) = rerata G(y, x) = 1; else G(y, x) = 0; end end end Akhir Program Contoh penggunaan fungsi adapmaxmin: Img = imread('C:Imageipomoea.png');  G = adapmaxmin(Img, 10, -30); imshow(G)  Gambar 10.45 memperlihatkan berbagai efek nilai w (ukuran jendela) dan c (konstanta pengurang).
  76. 76. 476 Pengolahan Citra : Teori dan Aplikasi (a) Citra ipomoea.tif (b) w = 2, c = -50 (c) w = 4, c = -25 (d) w = 4, c = -25 (f) w = 10, c = -10 (e) w = 10, c = -30 Gambar 10.45 Efek peng-ambangan adaptif dengan menggunakan nilai maksimum dan minimum dengan berbagai ukuran jendela dan konstanta yang berbeda Penggunaan peng-ambangan adaptif pada citra berisi teks dapat dilihat di bawah ini. Img = imread('C:Imagemaryamah.png');  G = adapmean(Img, 13, 15); imshow(G); 
  77. 77. Segmentasi Citra 477 Seperti terlihat pada Gambar 10.46(a), pencahayaan pada citra berisi teks tidak merata. Akibatnya, terdapat teks yang mengandung latarbelakang lebih gelap daripada bagian yang lain. Beberapa contoh penggunaan parameter berbeda dan hasil masing-masing dapat dilihat pada Gambar 10.46(b), 10.46(c), dan 10.46(d). Sebagai perbandingan, apabila peng-ambangan aras-jamak digunakan, diperoleh hasil seperti terlihat pada Gambar 10.47. (a) Citra maryamah.png (b) w = 13, c = 15 (c) w = 3, c = 5 (d) w = 7, c = 10 Gambar 10.46 Contoh penerapan peng-ambangan adaptif menggunakan rerata pada citra teks dengan latar belakang tidak merata
  78. 78. 478 Pengolahan Citra : Teori dan Aplikasi (a) Citra maryamah.png (a) Pengambangan aras-jamak dengan t1=140, t2=200 (b) Pengambangan aras-jamak dengan t1=140, t2=220 Gambar 10.47 Hasil peng-ambangan aras-jamak terhadap citra maryamah.png 10.9 Peng-ambangan Berdasarkan Entropi Entropi adalah istilah yang diperkenalkan oleh Shannon, yang menyatakan sebuah ukuran informasi yang terkandung di dalam citra. Entropi telah digunakan dalam peng-ambangan untuk memperoleh nilai ambang yang optimal. Kapur, Sahoo, dan Wang memperkenalkan penggunaan entropi dalam peng-ambangan di tahun 1985 (Acharya dan Ray, 2005). Namun, sesungguhnya Kapur dkk. mengemukan metode yang diusulkan tersebut sebagai koreksi terhadap artikel yang ditulis oleh peneliti bernama Pun, yang dipublikasikan pada tahun 1980 (Demirkaya, 2009). Metode peng-ambangan berbasis entropi yang dikemukakan oleh Kapur dkk. dapat dijelaskan sebagai berikut. Misalkan, f1, f2, …, fn adalah frekuensi pada citra beraras keabuan. Maka, 𝑝(𝑖) = 𝑓𝑖 𝑁 𝐿−1 , ∑ 𝑖=0 𝑓𝑖 = 1 𝑖 = 0,1,2, … , 𝐿 − 1 (10.27) Dalam hal ini, N adalah jumlah piksel citra, dan L menyatakan jumlah aras keabuan. Selanjutnya, apabila t adalah nilai ambang, entropi latarbelakang adalah:
  79. 79. Segmentasi Citra 479 𝑡 𝐻 𝑏 (𝑡) = − ∑ 𝑖=0 𝑝(𝑖) 𝑃 𝑏 (𝑡) . ln 𝑝(𝑖) (10.28) 𝑃 𝑏 (𝑡) dan entropi objek adalah: 𝐿−1 𝐻 𝑜 (𝑡) = − ∑ 𝑖=𝑡+1 𝑝(𝑖) 𝑃 𝑜 (𝑡) . ln 𝑝(𝑖) (10.29) 𝑃 𝑜 (𝑡) Dalam hal ini, 𝑡 𝐿−1 𝑃 𝑏 (𝑡) = ∑ 𝑖=0 𝑝(𝑖) , 𝑃𝑜 (𝑡) = ∑ 𝑖=𝑡+1 𝑝(𝑖) (10.30) Jumlah Hb dan Ho dinyatakan dengan (t). Jadi, 𝑡 (t) = − ∑ 𝑖=0 𝑝(𝑖) 𝑃 𝑏 (𝑡) 𝑙𝑛 𝑝(𝑖) 𝑃 𝑏 (𝑡) 𝐿−1 − ∑ 𝑖=𝑡+1 𝑝(𝑖) 𝑃 𝑜 (𝑡) 𝑙𝑛 𝑝(𝑖) 𝑃 𝑜 (𝑡) (10.31) Optimalisasi dilakukan dengan memaksimalkan fungsi (t). Implementasi peng-ambangan berbasis entropi Kapur dapat dilihat berikut ini. Program : kapur.m function [ambang] = tentropi(F) % TENTROPI Memperoleh nilai ambang menggunakan % metode entropi Kapur % berdasarkan rumus pada Acharya dan Ray (2005) % F = Citra berskala keabuan F = double(F); [m, n] = size(F); jum_piksel = m * n; % Kosongkan histogram for i=1 : 256 h(i) = 0.0; end
  80. 80. 480 Pengolahan Citra : Teori dan Aplikasi % Hitung histogram for i=1 : m for j=1 : n intensitas = F(i,j); h(intensitas+1) = h(intensitas+1) + 1; end end % Hitung p(i) for i=1 : 256 p(i) = h(i) / jum_piksel; end % Hitung t optimal ambang = 0; varMaks = 0; for t=0 : 255 % Hitung Pb(t) pbt = 0.0; for i=0 : t pbt = pbt + p(i+1); end % Hitung Po(t) pot = 0; for i=t+1 : 255 pot = pot + p(i+1); end % Hitung Hb(t) hbt = 0; for i = 0 : t if p(i+1) ~= 0 hbt = hbt + p(i+1) / pbt * log(p(i+1) / pbt); end end hbt = -hbt; % Hitung Hb(t) hot = 0; for i = t+1 : 255 if p(i+1) ~= 0 hot = hot + p(i+1) / pot * log(p(i+1) / pot); end end hot = -hot; % Hitung w(t) wt = hot + hbt; if wt varMaks varMaks = wt; ambang = t; end end
  81. 81. Segmentasi Citra 481 Akhir Program Contoh penggunaan fungsi kapur: Img = imread('C:Imageipomoea.png');  t = kapur(Img); G = ambang(Img, t); imshow(G)  Gambar 10.48(c) menunjukkan hasil perintah di atas. Pada gambar tersebut, terlihat perbedaan empat citra setelah mengalami peng-ambangan dengan Otsu dan Kapur.
  82. 82. 482 Pengolahan Citra : Teori dan Aplikasi (a) benda.png (b) Otsu (c) Entropy (Kapur) (d) benda.png (e) Otsu (f) Entropy (Kapur) (g) sidikjari.png (h) Otsu (i) Entropy (Kapur) (j) gedung.tif (k) Otsu (l) Entropy (Kapur) Gambar 10.48 Perbandingan peng-ambangan dengan Otsu dan Kapur Peng-ambangan berbasis entropi yang lain dikemukakan oleh Renyi (Acharya dan Ray, 2005). Rumus yang digunakan seperti berikut: 1 𝑝(𝑖) 𝑡 𝐻 𝑏 (𝑡) = 1−𝜌 𝑙𝑛 *∑ 𝑖=0 ( 𝑃 𝑏 𝜌 ) + (𝑡) (10.32)
  83. 83. Segmentasi Citra 1 483 𝜌 𝑝(𝑖) ) + 𝑜 (𝑡) 𝐿−1 𝐻 𝑜 (𝑡) = 1−𝜌 𝑙𝑛 *∑ 𝑖=𝑡+1 (1−𝑃 (10.33) Notasi yang digunakan pada Persamaan 10.32 dan 10.33 sama seperti rumus yang digunakan pada entropi Kapur. Parameter  berguna untuk memperoleh nilai ambang terbaik. Implementasi peng-ambangan yang didasarkan Renyi dapat dilihat di bawah ini. Program : renyi.m function [ambang] = renyi(F, rho) % RENYI Memperoleh nilai ambang menggunakan metode entropi Renyi % berdasarkan rumus pada Acharya dan Ray (2005) % F = Citra berskala keabuan F = double(F); [m, n] = size(F); jum_piksel = m * n; % Kosongkan histogram for i=1 : 256 h(i) = 0.0; end % Hitung histogram for i=1 : m for j=1 : n intensitas = F(i,j); h(intensitas+1) = h(intensitas+1) + 1; end end % Hitung p(i) for i=1 : 256 p(i) = h(i) / jum_piksel; end % Hitung t optimal ambang = 0; varMaks = 0; for t=0 : 255 % Hitung Pb(t) pbt = 0.0; for i=0 : t pbt = pbt + p(i+1); end % Hitung Hb(t)
  84. 84. 484 Pengolahan Citra : Teori dan Aplikasi hbt = 0; for i = 0 : t if pbt ~= 0 hbt = hbt + (p(i+1) / pbt) ^ rho; end end if hbt == 0 hbt = 0; else hbt = 1 / (1 - rho) * log(hbt); end % Hitung Ho(t) hot = 0; for i = t+1 : 255 hot = hot + (p(i+1) / 1-pbt) ^ rho; end if hot == 0 hot = 0; else hot = 1 / (1 - rho) * log(hot); end % Hitung w(t) wt = hot + hbt; if wt varMaks varMaks = wt; ambang = t; end end Akhir Program Contoh penggunaan fungsi renyi: Img = imread('C:Imageipomoea.png');  t = renyi(Img, 0.05); G = ambang(Img, t);  imshow(G)  Contoh hasil penerapan berbagai parameter  ditunjukkan pada Gambar 10.49.
  85. 85. Segmentasi Citra 485 (a) Citra ipomoea.tif (c)  = 0,5 (b)  = 0,05 (d)  = 0,6 Gambar 10.49 Peng-ambangan dengan entropi Renyi 10.10 Segmentasi Warna Segmentasi warna dapat dilakukan pada ruang warna HLS. Kemudian, dengan berpedoman pada susunan warna sesuai dengan Gambar 9.12, dilakukan pengubahan warna Hue yang berdekatan dengan warna yang menjadi pusat dalam fungsi keanggotaan fuzzy. Sebagai contoh, warna hijau dengan H = 80 akan diubah menjadi 85 dan warna kuning dengan H = 40 diubah menjadi 45. Adapun nilai pada komponen L dan S disederhanakan menjadi tiga nilai, yaitu 0, 128, dan 255. Warna yang mungkin timbul ada dua belas buah, yaitu merah, jingga, kuning, hijau, cyan, biru, ungu, magenta, merah muda, hitam, putih, dan abu-abu. Selanjutnya, warna HLS diubah kembali ke RGB. Implementasinya seperti berikut.
  86. 86. 486 Pengolahan Citra : Teori dan Aplikasi Program : segwarna.m function [RGB] = segwarna(nama_file) % SEGWARNA Digunakan untuk melakukan segmentasi citra % berdasarkan warna % F = citra berwarna % Keluaran: % G = citra berwarna yang telah disegmentasi Img = imread(nama_file); [tinggi, lebar, dim] = size(Img); if dim 3 error('Masukan harus berupa citra berwarna'); end % Konversi ke HVS [H,S,L] = RGBkeHSL(Img(:,:,1),Img(:,:,2),Img(:,:,3)); for y=1: tinggi for x=1: lebar h = H(y,x); % Ubah warna if h 11 h = 0; elseif h 32 h = 21; elseif h 54 h = 43; elseif h 116 h = 85; elseif h 141 h = 128; elseif h 185 h = 170; elseif h 202 h = 191; elseif h 223 h = 213; elseif h 244 h = 234; else h = 0; end % Ubah komponen H H(y,x) = h; % Ubah komponen S if S(y,x) = 200 S(y,x) = 255; elseif S(y,x) = 20 S(y,x) = 0;
  87. 87. Segmentasi Citra 487 else S(y,x) = 128; end % Ubah komponen L if L(y,x) = 200 L(y,x) = 255; elseif L(y,x) = 20 L(y,x) = 0; else L(y,x) = 128; end end end [R, G, B] = HSLkeRGB(H, S, L); RGB(:,:,1) = R; RGB(:,:,2) = G; RGB(:,:,3) = B; return Akhir Program Contoh penggunaan fungsi segwarna: G = segwarna('C:Imagebangunan.png'); imshow(G)  Hasilnya dapat dilihat pada Gambar 10.50. Dua contoh lain hasil pemrosesan dengan segwarna dapat dilihat pada Gambar 10.51.
  88. 88. 488 Pengolahan Citra : Teori dan Aplikasi Gambar 10.50 Hasil segmentasi warna terhadap citra bangunan.png
  89. 89. Segmentasi Citra (a) Citra lapangan.png (c) Citra mainan.png (e) Citra inns.png 489 (b) Hasil segmentasi lapangan.png (d) Hasil segmentasi mainan.png (f) Hasil segmentasi inns.png Gambar 10.51 Contoh lain hasil segmentasi warna dengan segwarna
  90. 90. 490 Pengolahan Citra : Teori dan Aplikasi Contoh aplikasi segmentasi warna dengan menggunakan segwarna dapat dilihat pada skrip segdaun.m. Suatu daun dipotret dengan latarbelakang putih (Gambar 10.52(a)). Hasilnya, latarbelakang tidak putih diakibatkan pencahayaan yang tidak baik. Selanjutnya, citra disegmentasi dengan fungsi segwarna. Hasilnya ditunjukkan pada Gambar 10.52(b). Terlihat bahwa latarbelakang ada yang berwarna hitam, abu-abu, dan putih. Nah, selanjutnya dengan membuat warna abu-abu dan hitam menjadi putih maka bagian daun diperoleh (Gambar 10.52(c)). Program : segdaun.m % SEGDAUN Contoh eksperimen untuk memisahkan daun % yang dipotret dengan latarbelakang putih % tetapi pencahayaan tidak sempurna close all; berkas = 'C:Imageficus.png'; G = imread(berkas); figure(1); imshow(G) G = segwarna(berkas); figure(2); imshow(G) H = G; [m, n, dim] = size(H); for i=1: m for j=1:n % Buang warna abu-abu if H(i,j,1) == 128 H(i,j,2) == 128 H(i,j,3) == 128 H(i,j,1) = 255; H(i,j,2) = 255; H(i,j,3) = 255; end % Buang warna hitam if H(i,j,1) == 0 H(i,j,2) == 0 H(i,j,3) == 0 H(i,j,1) = 255; H(i,j,2) = 255; H(i,j,3) = 255; end end end
  91. 91. Segmentasi Citra 491 figure(3); imshow(H) clear G H; Akhir Program Apabila skrip di atas dijalankan akan muncul tiga jendela. Jendela pertama berisi citra asli. Jendela kedua berisi hasil pemrosesan dengan segwarna. Jendela ketiga berisi hasil setelah warna abu-abu dan hitam diubah menjadi putih. (a) Citra ficus.png (b) Hasil segwarna (c) Warna abu-abu dan hitam diubah menjadi putih Gambar 10.52 Segmentasi daun Segmentasi juga dapat dilakukan melalui perantaraan citra biner. Contoh ditunjukkan pada skrip segdaun2.m. Program : segdaun2.m % SEGDAUN2 Contoh segmentasi daun melalui citra biner RGB = imread('C:Imageficus.png'); [m,n,dim] = size(RGB); % Konversi ke citra berskala keabuan for baris=1 : m for kolom=1 : n r = RGB(baris,kolom,1);
  92. 92. 492 Pengolahan Citra : Teori dan Aplikasi g = RGB(baris,kolom,2); b = RGB(baris,kolom,3); kelabu = r * 0.2989 + g * 0.5870 + b * 0.1140; A(baris,kolom) = kelabu; end end figure(1); imshow(A); A = double(A); % Lakukan penghalusan dengan rerata for baris=2 : m-1 for kolom=2 : n-1 jum = A(baris-1, kolom-1)+ ... A(baris-1, kolom) + ... A(baris-1, kolom-1) + ... A(baris, kolom-1) + ... A(baris, kolom) + ... A(baris, kolom+1) + ... A(baris+1, kolom-1) + ... A(baris+1, kolom) + ... A(baris+1, kolom+1); B(baris, kolom) = jum/9; end end B = uint8(B); % t t C Gunakan pengambangan otsu = otsu(B); = t + 13; % Koreksi ambang. Sesuaikan dengan kebutuhan = ambang(B, t); % Lakukan operasi morfologi opening H = ones(3); D = opening(C, H); figure(2); imshow(C); % Atur bagian tepi berwarna putih % sebagai kompnesasi bagian % yang tidak diproses sewaktu % melakukan pemerataan nilai for baris=1 : m D(baris,1) = 1; D(baris,n) = 1; end for kolom=1 : n D(1,kolom) = 1; D(m,kolom) = 1; end figure(3); imshow(D); % Kosongkan bagian latarbelakang % untuk mendapatkan bagian daun E = RGB;
  93. 93. Segmentasi Citra 493 for baris=1 : m for kolom=1 : n if D(baris, kolom) == 1 E(baris,kolom,1) = 255; E(baris,kolom,2) = 255; E(baris,kolom,3) = 255; end end end figure(4); imshow(E); clear RGB A B C D E H; Akhir Program Proses untuk mendapatkan daun ditunjukkan pada gambar berikut. (a) Citra ficus.png (b) Konversi ke abu-abu (d) Morfologi opening (c) citra biner (e) Hasil segmentasi Gambar 10.53 Urutan segmentasi daun melalui citra biner
  94. 94. 494 Pengolahan Citra : Teori dan Aplikasi  Latihan 1. Apa yang disebut dengan segementasi? 2. Apa hubungan tool seperti „Magic Wand‟ dengan segmentasi? 3. Berdasarkan teknik yang digunakan, segmentasi dapat dibagi menjadi empat kategori. Apa saja dan berikan penjelasan secara singkat. 4. Apa yang dimaksud dengan deteksi tepi? Sebutkan paling tidak empat operator yang terkait dengan deteksi tepi. 5. Jelaskan pengertian gradien. 6. Sebutkan contoh deteksi tepi orde kedua. Apa kelebihan deteksi tepi orde kedua dibandingkan dengan orde pertama? 7. Apa kegunaan operator Canny? 8. Apa keunikan operator zero-crossing dibandingkan dengan operator seperti Sobel dan Prewitt? 9. Apa yang dimaksud dengan operator Kompas? 10. Jelaskan istilah-istilah berikut. (a) Peng-ambangan dwi-aras (b) Peng-ambangan aras-jamak (c) Peng-ambangan optimal (d) Peng-ambangan iteratif (e) Peng-ambangan global (f) Peng-ambangan lokal (g) Peng-ambangan adaptif 11. Berikan contoh yang tergolong sebagai peng-ambangan secara entropi. 12. Pada file yang disediakan untuk buku ini, terdapat file bernama empatbola.png, yang isinya seperti berikut.
  95. 95. Segmentasi Citra 495 Tugas Anda adalah membuat suatu fungsi yang menerima masukan berupa sebuah warna. Sebagai contoh, apabila Anda menyertakan warna “biru” sebagai argumen, citra hanya akan menampilkan bola yang berwarna biru.
  96. 96. 496 Pengolahan Citra : Teori dan Aplikasi

×