Pada artikel ini akan dijelaskan bagaimana melakukan segmentasi menggunakan Active Contour Without Edge.
Misalkan ada sebuah yang memiliki objek yang saling bersinggungan dan akan dilakukan segmentasi untuk mendapatkan setiap objek yang ada pada image tersebut.
Gambar diatas digunakan untuk menguji coba apakah segmentasi citra dapat berhasil dilakukan dengan baik atau tidak. Harapan dari percobaan ini adalah semua koin dapat dibedakan dari background. Hasil output akan berupa gambar berformat grayscale.
Kode Python berikut digunakan untuk melakukan peningkatan kualitas sebuah citra (image enhacement). Peningkatan kualitas citra dilakukan dengan kombinasi dari tiga filter dan dua peningkatan kontras. Tiga filter tersebut antara lain adalah Gaussian Filtering, Median Filtering, dan Low Pass Filltering.
Untuk menerapkan filtering pada Python, dapat digunakan library openCV, yakni fungsi untuk menjalankan Gaussian Filtering, Median Filtering, dan Low Pass Filltering. Untuk gaussian filtering digunakan fungsi langsung dari opencv dengan parameter yang telah ditentukan yakni source(image input), lalu kernel atau ksize yang didefinisikan (5,5) atau dapat dikatakan sebuah matriks dengan ukuran 5×5, lalu ditutup sigmaX dan sigmaY yang didefinisikan dengan 0. Gaussian filtering memiliki prinsip yang hampir sama dengan median filtering hanya saja gaussian tidak menggunakan nilai tengah namun ia menggunakan rumus gaussian.
Setelah itu untuk filter selanjutnya adalah median filtering. Median filtering merupakan filter yang memanfaatkan nilai median dari intensitas piksel tetangga untuk menutup noise yang ditemukan.
Selanjutnya adalah low pass filtering yang digunakan untuk menghilangkan noise pada gambar dengan melakukan blur. Pada dasarnya cara kerja filter ini adalah dengan mengambil sejumlah piksel yang bersesuaian dengan matriks yang ditentukan lalu melakukan perhitungan rata-rata untuk mendapatkan intensitas baru. Pada library openCv, filter ini termasuk dalam filter2D yang dimana harus ditentukan terlebih dahulu kernel nya menggunakan fungsi numpy.
Langkah selanjutnya adalah mengimplementasikan kernel yang telah dibuat untuk dilakukan filtering yakni dengan menggunakan filter2D dengan parameter inputan image input, depth (kedalaman gambar, default -1), dan kernel yang sudah didefinisikan.
Selanjutnya adalah peningkatan kontras yang terdiri dari dua teknik yakni Contrast Stretching dan Dark Stretching. Kode berikut merupakan coding untuk melakukan contrast stretching yang telah diusulkan. Pada coding ini digunakan library python-pillows untuk membuat gambar baru yang telah diolah tiap pikselnya. Pertama-tama gambar diubah menjadi greyscale dengan code ‘LA’. Setelah itu load array of pixel dari gambar menggunakan fungsi load(). Image.new digunakan untuk membuat sebuah variabel gambar baru dengan mode dan besar yang sama dengan image yang dijadikan pedoman. Pada coding ini image yang dijadikan pedoman adalah image yang sedang diolah. Setelah itu setiap piksel diolah menggunakan fungsi contrast stretching yang di mana proses tersebut sudah didefinisikan ke dalam sebuah fungsi “fungsi”. Setelah seluruh pixel telah diolah maka akan didapatkan sebuah image baru dengan nama img_new.
Teknik selanjutnya adalah dark stretching. Pada teknik ini kurang lebih sama dengan proses yang dilakukan dengan contrast stretching namun terdapat beberapa perbedaan dalam penggunaan fungsinya. Pada dark stretching terdapat sebuah treshold yang digunakan untuk membagi wilayah pengolahan intensitas piksel citra. Selain itu perlu untuk mencari piksel maksimum dan minimum disetiap treshold untuk digunakan di dalam perhitungan intensitas baru.
[to be continued]