5.15. Operasi morfologi

Operasi morfologi bekerja pada citra biner -- mask yang dihasilkan dari thresholding dan deteksi tepi. Setiap operasi berjalan melalui jenis tetangga geser yang sama yang digunakan oleh filter penghalus, tetapi pertanyaan yang diajukan di setiap posisi adalah ya/tidak: apakah setiap piksel dalam tetangga aktif, apakah ada piksel dalam tetangga yang aktif, seperti apa pola aktif/tidak aktifnya? Jawabannya menumbuhkan wilayah, menyusutkannya, dan memotong ulang batasnya dengan cara yang tidak bisa dilakukan oleh filter rata-rata.

Morfologi adalah apa yang ada di antara mask biner awal -- keluaran thresholding, deteksi tepi, atau pengklasifikasi lainnya -- dan mask biner yang bersih yang dapat digunakan oleh pipeline selanjutnya. Keluaran ambang batas mentah biasanya memiliki piksel noise yang tersebar di area latar depan yang sebenarnya, lubang kecil yang berlubang ke wilayah yang seharusnya padat, dan batas yang tidak rata di mana ambang batas memotong dekat tepi objek. Morfologi menghilangkan cacat-cacat itu.

5.15.1. Empat operasi klasik

Dua operasi primitif, dan dua komposisi darinya, membentuk toolkit morfologi:

dilate() menumbuhkan setiap wilayah latar depan. Aturannya adalah: piksel mana pun yang memiliki setidaknya satu tetangga latar depan dalam jendela (2 * size + 1)-nya menjadi latar depan. Efek visualnya adalah wilayah latar depan menjadi lebih besar size piksel ke setiap arah, dan lubang di dalamnya menyusut (atau menghilang) dengan jumlah yang sama.

erode() melakukan kebalikannya. Piksel mana pun yang tidak memiliki setiap tetangga dalam jendelanya di latar depan menjadi latar belakang. Wilayah latar depan menjadi lebih kecil size piksel ke setiap arah, piksel latar depan yang terisolasi (yang tidak memiliki tetangga latar depan) menghilang sepenuhnya, dan koneksi kecil antara wilayah yang lebih besar dipotong.

A binary input region in the leftmost panel: a solid square with a one-pixel hole in its middle and three isolated noise pixels around it. Four panels to the right show the result of applying dilate, erode, open, and close to that input. Dilate grows the region, fills the hole, and grows each noise pixel into a block; erode shrinks the region, grows the hole, and removes the noise; open removes the noise while reproducing the region and its hole exactly; close fills the hole while reproducing the region's outline and the noise pixels exactly.

Empat operasi morfologi klasik diterapkan pada wilayah biner yang berisik. Erode menyusutkan; dilate menumbuhkan; open adalah erode kemudian dilate (menghilangkan noise); close adalah dilate kemudian erode (mengisi lubang).

open() adalah erode diikuti oleh dilate. Citra yang di-erode telah kehilangan setiap piksel noise yang terisolasi, tetapi juga telah menyusut size piksel ke setiap arah. Mengikuti erode dengan dilate berukuran sama mengembalikan wilayah latar depan yang sebenarnya ke sekitar batas aslinya sambil membiarkan noise hilang. Komposisi inilah yang membuat open menjadi operasi "hapus noise" standar dalam morfologi klasik: piksel latar depan yang terisolasi menghilang, wilayah nyata kembali tidak terluka.

close() adalah cerminannya -- dilate diikuti oleh erode. Dilate mengisi lubang kecil di dalam wilayah latar depan dan menghubungkan wilayah yang dipisahkan oleh celah kecil; erode menyusutkan hasilnya kembali ke batas luar aslinya sambil membiarkan bagian dalam yang terisi tetap padat. close adalah operasi "isi celah kecil" standar.

binary_mask.open(1)       # remove single-pixel noise
binary_mask.close(2)      # fill small holes and gaps

Parameter size memiliki arti yang sama seperti dalam filter kecerahan: size=1 berarti tetangga 3-kali-3, size=2 berarti 5-kali-5, dan seterusnya. Ukuran yang lebih besar berarti pembersihan yang lebih agresif -- dan biaya per piksel yang lebih lama.

5.15.2. Top-hat dan black-hat

Dua komposisi lanjutan layak diketahui karena mereka mengekstrak persis fitur yang dihilangkan oleh open dan close:

top_hat() mengembalikan perbedaan antara citra asli dan versi yang telah di-open -- piksel latar depan yang akan dihilangkan oleh open. Itu secara harfiah adalah mask piksel noise, wilayah latar depan kecil yang terisolasi, struktur latar depan tipis yang tidak bisa dipertahankan oleh operasi open. Berguna untuk mengekstrak fitur latar depan kecil ketika fitur tersebut adalah yang dipedulikan aplikasi, daripada menghilangkannya.

black_hat() mengembalikan perbedaan antara versi tertutup citra dan aslinya -- piksel latar belakang yang akan diisi oleh close. Itu adalah mask lubang kecil di dalam wilayah latar depan, celah sempit antara wilayah yang akan dijembatani oleh operasi close.

Keduanya kurang sering digunakan dibanding empat operasi dasar, tetapi polanya layak diingat -- ketika aplikasi perlu mengekstrak fitur kecil atau tipis yang dihilangkan oleh tahap pembersihan standar, top-hat dan black-hat adalah cara alami untuk mendapatkannya kembali.

5.15.3. Mode threshold

Keempat operasi morfologi dasar semuanya menerima kata kunci integer threshold yang melembutkan pengujian aktif/tidak aktif di setiap posisi. Tanpa itu, operasi berperilaku seperti yang dijelaskan di atas: erode() membutuhkan setiap tetangga untuk aktif, dilate() membutuhkan setidaknya satu. Dengan threshold yang ditetapkan, setiap operasi mentoleransi sejumlah tetangga yang memilih cara lain. Untuk erode, threshold adalah jumlah tetangga latar belakang yang boleh dimiliki piksel dan tetap bertahan: threshold=4 mempertahankan piksel mana pun dengan setidaknya empat dari delapan tetangganya aktif (dalam jendela 3-kali-3, piksel pusat memiliki delapan tetangga), sehingga tidak erode seagresif itu. Untuk dilate, threshold adalah jumlah tetangga latar depan yang harus dimiliki piksel latar belakang sebelum menjadi aktif: threshold=2 membutuhkan setidaknya tiga tetangga latar depan alih-alih satu, sehingga tumbuh kurang agresif.

Bentuk threshold berguna untuk menyetel agresivitas tahap morfologi tanpa mengubah ukuran jendelanya, yang juga akan mengubah skala fitur yang ditindaklanjutinya. Sebagian besar aplikasi tetap menggunakan perilaku default; bentuk threshold ada untuk kasus-kasus di mana default sedikit terlalu banyak atau terlalu sedikit.