PCD2011-7-Segmentasi Citra

Download Report

Transcript PCD2011-7-Segmentasi Citra

Segmentasi Citra
Pengolahan Citra Digital
Materi 7
Eko Prasetyo
Teknik Informatika
Universitas Muhamamdiyah Gresik
2011
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.Yang
diinginkan adalah analisis citra produk dengan tujuan untuk 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.
2
Deteksi Tepi
Merupakan 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)


 f 
G x   x 
f      
f
G y   
1/ 2
 y 
Jarak vektor ini adalah:
 f  mag (  f )  G x  G y 
2

2
Atau dengan nilai absolutnya:
f  Gx  Gy

Turunan kedua dalam pengolahan citra umumnya dihitung menggunakan
Laplacian
 f ( x, y )
2
 f ( x, y ) 
2
x
2
 f ( x, y )
2

y
2
3
Operator Deteksi Tepi: Sobel,
Prewitt, Robert
4
Fungsi untuk deteksi tepi di MATLAB:
[g, t] = edge(f, ‘method’, parameters)
Detektor tepi
Sobel
Prewitt
Robert
Laplacian of a
Gaussian (LoG)
Zerro crossing
Canny
Properti dasar
Menemukan tepi menggunakan perkiraan Sobel untuk turunannya
dalam Gambar 8.4 (a) dan (b)
Menemukan tepi menggunakan perkiraan Prewitt untuk turunannya
dalam Gambar 8.4 (c) dan (d)
Menemukan tepi menggunakan perkiraan Robert untuk turunannya
dalam Gambar 8.4 (e) dan (f)
Menemukan tepi dengan mencari zero crossing setelah pemfilteran
f(x,y) dengan filter Gaussian
Menemukan tepi dengan mencari zero crossing setelah pemfilteran
f(x,y) dengan filter yang didefinisikan user
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
5
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)
Laplacian of Gaussian
fungsi Gaussian:
CANNY
[g, t] = edge(f, ‘canny’, T, sigma)
h(r )  e

r
2
2
2
di mana r2 = x2 + y2 dan  adalah standard deviasi
Laplacian dari fungsi ini (turunan kedua terhadap r) adalah:
 r     2
 h(r )  
e
 4 


2
2
2
r
2
2
[g, t] = edge(f, ‘log’, T, sigma)
6
Citra grayscale
Hasil deteksi tepi Robert
dengan threshold otomatis
Hasil deteksi tepi Sobel
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');
Hasil deteksi tepi Prewitt
dengan threshold otomatis
Hasil deteksi tepi Canny
dengan threshold otomatis
>> 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);
7
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
8
Citra grayscale
Citra biner yang telah
melewati pengujian
threshold (TI)
Seed points yang
ditemukan (gray level =
255) (SI)
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);
9
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)

10
Citra asli RGB
%Jumlah cluster = 3
>> f = imread('gadung-12.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
Hasil segmentasi dengan 3 cluster (percobaan 1)
Hasil segmentasi dengan 3 cluster (percobaan 2)
11
Saatnya presentasi paper
ANY QUESTION ?
12