Segmentasi Citra Materi 6 Eko Prasetyo Teknik Informatika UBHARA 2012
Konsep Segmentasi Segmentasi membagi citra ke dalam sejumlah region atau obyek. Level untuk pembagian tergantung pada masalah yang diselesaikan. Proses segmentasi berhenti ketika obyek yang diinginkan dalam aplikasi telah terisolasi. Misal, pemeriksaan otomatis pada rakitan produk elektronik. Tujuannya mengetahui ada atau tidaknya penyimpangan tertentu, seperti salah komponen, atau lintasan hubungan yang putus Algoritma umumnya didasarkan pada satu dari dua properti nilai intensitas: diskontinuitas dan similaritas. Kategori pertama, pendekatannya adalah memecah/memilah citra berdasarkan perubahan kasar dalam intensitas, seperti tepi dalam citra. Kategori kedua didasarkan pada pemecahan citra ke dalam region yang sama menurut sejumlah kriteria yang didefinisikan, seperti thresholding, region growing, region splitting and merging.
Deteksi Tepi Pendekatan yang paling umum untuk pendeteksian diskontinuitas nilai intensitas, seperti diskontinuitas yang dideteksi oleh penggunaan turunan pertama dan kedua. Menggunakan turunan pertama dalam pengolahan citra (gradien) Jarak vektor ini adalah: Atau dengan nilai absolutnya: Turunan kedua dalam pengolahan citra umumnya dihitung menggunakan Laplacian
Operator Deteksi Tepi: Sobel, Prewitt, Robert
Fungsi untuk deteksi tepi di MATLAB: [g, t] = edge(f, ‘method’, parameters) Detektor tepi Properti dasar Sobel Menemukan tepi menggunakan perkiraan Sobel untuk turunannya dalam Gambar 8.4 (a) dan (b) Prewitt Menemukan tepi menggunakan perkiraan Prewitt untuk turunannya dalam Gambar 8.4 (c) dan (d) Robert Menemukan tepi menggunakan perkiraan Robert untuk turunannya dalam Gambar 8.4 (e) dan (f) Laplacian of a Gaussian (LoG) Menemukan tepi dengan mencari zero crossing setelah pemfilteran f(x,y) dengan filter Gaussian Zerro crossing Menemukan tepi dengan mencari zero crossing setelah pemfilteran f(x,y) dengan filter yang didefinisikan user Canny Menemukan tepi dengan mencari local maxima dari gradien f(x,y). Gradien dihitung menggunakan turunan filter Gaussian. Metode ini menggunakan dua threshold untuk mendeteksi tepi yang kuat dan lemah, dan memasukkan tepi lemah dalam output hanya jika tepi tersebut terhubung ke tepi yang kuat. Maka, metode ini lebih memungkinkan untuk mendeteksi tepi yang lemah dengan benar
SOBEL, PREWITT, ROBERT [g, t] = edge(f, ‘sobel’, T, dir) f adalah citra input, T adalah threshold, dir menetapkan arah yang lebih disukai pada citra terdeteksi: ‘horizontal’, ‘vertical’, atau ‘both’ (default). g adalah citra biner yang berisi nilai 1 pada lokasi di mana tepi terdeteksi dan 0 untuk yang tidak. Parameter t pada output bersifat opsional, t adalah nilai threshold yang digunakan oleh fungsi edge [g, t] = edge(f, ‘prewitt’, T, dir) [g, t] = edge(f, ‘robert’, T, dir) CANNY [g, t] = edge(f, ‘canny’, T, sigma) Laplacian of Gaussian fungsi Gaussian: di mana r2 = x2 + y2 dan adalah standard deviasi Laplacian dari fungsi ini (turunan kedua terhadap r) adalah: [g, t] = edge(f, ‘log’, T, sigma)
Hasil deteksi tepi Sobel dengan threshold otomatis Citra grayscale Hasil deteksi tepi Sobel dengan threshold otomatis Hasil deteksi tepi Prewitt dengan threshold otomatis Hasil deteksi tepi Robert dengan threshold otomatis Hasil deteksi tepi Canny dengan threshold otomatis Hasil deteksi tepi LoG dengan threshold otomatis >> [g_sobel_default, ts] = edge(f, 'sobel'); >> [g_log_default, tlog] = edge(f, 'log'); >> [g_canny_default, tcan] = edge(f, 'canny'); >> g_sobel_best = edge(i, 'sobel', 0.05); >> g_log_best = edge(i, 'log', 0.003, 2.25); >> g_canny_best = edge(i, 'canny', [0.04, 0.10], 1.5);
Region Growing Prosedur yang mengelompokkan piksel atau sub-region ke dalam region yang lebih besar berdasarkan pada kriteria yang sudah ditentukan untuk pertumbuhannya. Pendekatan dasarnya adalah memulai dengan sejumlah titik seed dan dari sini menumbuhkan region oleh penambahan pada setiap seed piksel tetangga yang mempunyai properti sama dengan seed (seperti range spesifik dari gray level atau warna). Sintaks fungsinya adalah: [g, NR, SI, TI] = regiongrow(f, S, T) di mana f adalah citra yang disegmentasi parameter S bisa menjadi array (ukuran sama dengan f) atau skalar. Jika f adalah skalar, maka harus berisi nilai 1 pada semua koordinat di mana titik seed ditempatkan dan 0 untuk lainnya. Jika S skalar, mendefinisikan nilai intensitas seperti bahwa semua titik dalam f dengan nilai menjadi titik seed. T bisa menjadi array (ukurannya sama dengan f) atau skalar. Jika T adalah array, maka berisi nilai threshold untuk setiap lokasi dalam f. Jika T skalar, maka mendefinisikan global threshold. Nilai threshold digunakan untuk menguji jika piksel dalam citra cukup sama dengan seed dengan 8-connected
Citra grayscale Seed points yang ditemukan (gray level = 255) (SI) Intensitas 255 menjadi titik seed Threshold terbaik ada di titik intensitas 190 Maka 255-190 = 65 (nilai T yang digunakan untuk segmentasi) Citra biner yang telah melewati pengujian threshold (TI) Citra yang mempunyai hubungan 8-connected terhadap seed (g) >> i = imread('defective_weld.tif'); figure, imshow(i); >> [g, NR, SI, TI] = regiongrow(i, 255, 65); >> figure, imshow(g); >> figure, imshow(SI); figure, imshow(TI);
Segmentasi berbasis Watershed Dalam ilmu geografi, watershed adalah pertemuan dua lereng yang membagi daerah yang dikeluarkan oleh sistem sungai yang berbeda. Catchment basin adalah daerah goegrafis yang keluar menuju sungai atau reservoir. Watershed transform mengaplikasi ide ini untuk menyelesaikan berbagai masalah segmentasi citra. Citra grayscale Permukaan 3-D citra
Segmentasi berbasis Watershed M1, M2, …, MR menyatakan koordinat titik-titik regional minimal dari citra g(x,y). C(Mi) adalah himpunan yang menyatakan koordinat titik-titik dalam catchment basin yang diasosiasikan dengan regional minimum Mi (membentuk komponen terkoneksi). T[n] merepresentasikan himpunan koordinat (s,t) di mana g(s,t) < n. Oleh sebab itu: T[n] = {(s,t)|g(s,t) < n} Secara geometris, T[n] adalah sekumpulan koordinat titik- titik g(x,y) yang berada di bawah plane g(x,y) = n. Citra grayscale Permukaan 3-D citra
Watershed dengan transformasi jarak Watershed dalam penggunaan dikonjungsi dengan teknik yang lain, seperti: transformasi jarak, gradien, dsb. Transformasi jarak dari citra biner adalah jarak dari setiap piksel ke nilai piksel non-zero terdekat. Toolbox: D = bwdist(f) >> g = im2bw(i, graythresh(i)); >> gc = ~g; >> D = bwdist(gc); >> L = watershed(-D); >> w = L == 0; >> g2 = g & ~w;
Segmentasi dengan K-Means Segmentasinya berbasis clustering dengan fitur: R (red), G (green), dan B (blue). Karena citra berukuran m*n*3 (3 dimensi), maka harus di-reshape menjadi bentuk tabel (struktur fitur dalam clustering) berukuran mn*3 (2 dimensi). Setelah dilakukan clustering dengan k- means, didapatkan index dari setiap piksel yang menyatakan nomor cluster yang diikuti. Kemudian struktur index (matrik mn*1) diubah menjadi struktur citra 2 dimensi (m*n)
Hasil segmentasi dengan 3 cluster (percobaan 1) %Jumlah cluster = 3 >> f = imread('gadung-1-2.jpg'); >> f = im2double(f); >> r = f(:,:,1); >> g = f(:,:,2); >> b = f(:,:,3); >> [m,n] = size(r); >> r = reshape(r,m*n,1); >> g = reshape(g,m*n,1); >> b = reshape(b,m*n,1); >> rgb = cat(2,r,g,b); >> h = kmeans(rgb,3); %3 adalah jumlah cluster >> h = reshape(h,m,n); >> h = h/3; %dibagi dengan jumlah cluster Citra asli RGB Hasil segmentasi dengan 3 cluster (percobaan 1) Hasil segmentasi dengan 3 cluster (percobaan 2)
To Be Continued … Materi 7 – Fitur ANY QUESTION ?