5.8. Flood fill dan glyph deteksi

Primitif geometris di awal bagian ini menempatkan tanda pada posisi yang sudah diketahui aplikasi. Komposisi citra meletakkan satu citra di atas yang lain. Sekelompok kecil metode gambar terakhir melakukan sesuatu yang berbeda: menempatkan tanda yang bentuknya bergantung pada apa yang sudah ada di dalam citra, atau apa yang ditemukan oleh suatu algoritma sebelumnya.

5.8.1. Flood fill

flood_fill() dimulai dari satu piksel -- seed -- dan tumbuh ke luar, mewarnai setiap piksel yang cukup mirip dengan seed dan terhubung ke sana melalui rantai piksel serupa lainnya. Hasilnya adalah wilayah terisi yang batasnya ditentukan oleh citra itu sendiri, bukan oleh apa pun yang diteruskan ke panggilan tersebut.

Bentuk paling sederhana mengambil koordinat seed dan warna untuk diisi:

img.flood_fill(x=160, y=120, color=(0, 255, 0))

Dua parameter ambang batas mengontrol seberapa agresif pengisian tumbuh. seed_threshold (fraksi ternormalisasi dari 0.0 hingga 1.0) menetapkan seberapa berbeda sebuah piksel dari nilai seed asli sambil tetap disertakan. floating_threshold menetapkan seberapa berbeda dari setiap tetangga yang sudah disertakan. Kedua ambang batas bekerja bersama: floating_threshold yang longgar memungkinkan pengisian mengikuti gradien di seluruh citra, sementara seed_threshold yang ketat mencegahnya terlalu jauh menyimpang dari nilai seed bahkan sepanjang gradien tersebut.

Beberapa flag menyempurnakan hasil lebih lanjut:

  • invert=True mewarnai setiap piksel yang tidak cocok -- komplemen dari wilayah yang cocok -- daripada piksel yang cocok itu sendiri.

  • clear_background=True mengosongkan setiap piksel di luar wilayah pengisian. Berguna untuk mengekstrak hanya wilayah yang terisi sebagai mask.

  • Kata kunci mask memiliki arti biasanya: piksel yang tidak aktif dalam mask dibiarkan saja terlepas dari apakah pengisian seharusnya mencapainya.

Flood fill paling berguna untuk dua pola. Pertama adalah memvisualisasikan apa yang ditemukan oleh detektor wilayah, dengan mengisi wilayah yang terdeteksi dengan warna yang berbeda sehingga menonjol dari sisa bingkai. Kedua adalah mengekstrak wilayah itu sendiri, dengan menggabungkan clear_background=True dengan seed yang diketahui di dalam wilayah dan membaca citra hasilnya sebagai mask untuk operasi berikutnya.

5.8.2. Menggambar hasil deteksi

Algoritma pemrosesan citra sering mengembalikan objek hasil yang membawa posisi dan beberapa struktur tambahan: titik kunci dengan orientasi, deteksi wajah dengan sentroid yang berbeda dari kotak pembatasnya, AprilTag dengan empat titik sudut. Menggambar semuanya dengan baik -- dengan glyph yang menangkap struktur, bukan hanya kotak pembatas -- adalah pola yang cukup berulang sehingga modul mengekspos dua helper untuk itu.

draw_keypoints() menerima deskriptor titik kunci yang dikembalikan oleh ekstraktor fitur, atau daftar biasa berisi tripel (x, y, rotation), dan menggambar glyph kecil di setiap titik. Glyph membawa posisi dan orientasi: lingkaran di sekitar titik ditambah garis keluar dari pusat yang menunjukkan rotasi. Visualisasi satu-panggilan itu adalah cara termudah untuk memeriksa bahwa ekstraktor titik kunci mengembalikan orientasi yang diharapkan aplikasi.

draw_detection() menerima enam-tupel (rx, ry, rw, rh, cx, cy) -- persegi panjang pembatas ditambah sentroid yang dilaporkan secara terpisah -- dan menggambar keduanya sekaligus: persegi panjang di sekitar kotak pembatas, salib pada sentroid, dan opsional label teks di sudut persegi panjang. Bentuk ini cocok dengan apa yang biasanya dilaporkan oleh deteksi jaringan saraf atau pelacak template, di mana sentroid adalah posisi yang lebih presisi daripada pusat kotak pembatas.

Kedua metode glyph adalah lapisan kenyamanan di atas primitif geometris di awal bagian ini. Aplikasi dapat selalu mereproduksi visualisasi yang sama dengan memanggil draw_rectangle(), draw_circle(), draw_cross(), dan draw_string() secara langsung; metode glyph hanya menghemat pengelolaan bookkeeping untuk pola yang terus berulang.

Dengan primitif geometris untuk geometri yang diketahui, komposisi citra untuk overlay, flood fill untuk wilayah yang diturunkan dari citra, dan glyph deteksi untuk pola visualisasi standar, toolkit gambar sudah lengkap. Apa pun yang dibutuhkan aplikasi untuk membuat output algoritma terlihat memiliki metode pada permukaan yang menempatkannya di sana.