Segmentasi citra merupakan salah satu hal yang paling umum dilkauka dalam image processing. Pada kesempatan ini saya akan membagikan cara melakukan segmentasi citra secara otomatis dan manual pada platform MATLAB.
1. Segmentasi Manual
Pada dasarnya, segmentasi manual dilakukan dengan melakukan proses threshold menggunakan suatu nilai batas. Sebagai bahan ujicoba, saya gunakan citra yang udah ada di MATLAB itu sendiri, rice.png. Berikut codenya :
im = imread('rice.png');
figure(1)
imagesc(im) ; colormap gray
Setelah di running, hasil seperti berikut akan muncul :
Citra ini berformat uint8, artinya sebarab bilai pixel hitam ke putih berkisar dari 0 - 255. Sebagai contoh, jika saya ingin memisahkan butiran padi pada gambar diatas, maka saya harus menyediakan nilai ambang batas "Th" . Pada kasus ini saya hanya menganggap pixel yang nilainya lebih besar daripada Th sebagai pixel si- beras. Coba code berikut:
Th = 150 ;
imTh = im> Th ;
figure(2)
imagesc(imTh) ; colormap gray
Variabel imTh adalah citra hasil segmentasi beras menggunakan nilai ambang Th sebesar 150. Lihat hasilnya :
Citra tersegmentasi : (Th = 150)
Keliatan kan, si beras mulai terpiah dari background nya. Tentunya, kalian juga bisa memvariasikan nilai Th untuk mendapatkan hasil terbaik. Berikut adalah hasil lainnya menggunakan nilai Th yang lebih tinggi.
Citra tersegmentasi : (Th = 170)
Semakin tinggi nilai Th yang digunakan, semakin sedikit pula pixel yang tersegmentasi, karena tadinya kita menggunakan operator ">".
2. Segmentasi Otomatis
Nah, ada cara lain untuk melakukan proses segmentasi ini yaitu secara otomatis. Dalam pembahasan kali ini, saya akan merujuk pada metode yang sangat umum yaitu Otsu. Penjelasan singkat mengenai metode ini dapat kalian baca disini. Tapi pada tulisan ini saya hanya menunjukkan cara penggunaannya di MATAB.
Intinya, ,etode Otsu membantu kita dalam mencari nilai ambang Th, yang mana nantinya akan digunakan untuk melakukan proses segmentasi. Berikut contoh code-nya :
T = graythresh(im);
imThOtsu = imbinarize(im,T);
figure(3)
imagesc(imThOtsu) ; colormap gray
Fungsi graythresh akan mencari nilai batas optimum, lalu nilai ini akan digunakan untuk mensegmentasi pixel yang diinginkan menggunakan perintah imbinarize. Haislnya adalah seperti berikut :
Citra tersegmentasi : Metode otomatis
Keliatan kan, hasilnya lebih baik meskipun tanpa menggunakan nilai Th secara manual.
Oke terakhir, kalau diperhatikan semua code yang ada diatas hanya mampu memisahakn pixel menjadi 2 bagian yaitu hitam dan putih (1 0). Sedangkan, pada kasus tertentu, bisa saja lebih dari 2 jenis pixel harus dipisahkan. Tenang, metode Otsu juga punya solusi untuk ini. Berikut contohnya :
N = 2 ;
T = multithresh(im,N);
imMultiOtsu = imquantize(im,T) ;
figure (4)
imagesc(imMultiOtsu) ; colorbar
Variabel N adalah jumlah kelas pixel yang akan disegmentasi, yang mana pada citra tersegmentasi, jumlah kelasnya menjadi N + 1. Berikut hasilnya :
Segmentasi multi-class : 3 kelas
Dari hasil diatas, terlihat bahwa pixel masukan dikategorikan menjadi 3 kelas dengan warna masig-masing adalah kuning, hijau, dan biru.
Oke, kita selesai. Untuk mempermudah, berikut saya rangkum semua code yang telah digunakan di atas.
clc
clear
close all
im = imread('rice.png');
figure(1)
imagesc(im) ; colormap gray
Th = 150 ;
imTh = im> Th ;
figure(2)
imagesc(imTh) ; colormap gray
figure(3)
T = graythresh(im);
imThOtsu = imbinarize(im,T);
imagesc(imThOtsu) ; colormap gray
N = 2 ;
T = multithresh(im,N);
imMultiOtsu = imquantize(im,T) ;
figure (4)
imagesc(imMultiOtsu) ; colorbar
Semog bermanfaat. Jangan lupa kasih masukan, request tutorial juga boleh.
Ngomong-ngomong, kalian juga bisa liat koeksi video Youtube saya (disini). Semuanya tentang penggunaan MATLAB.
Salam.