5.14. Penghalusan Gaussian dan tepi¶
Dua pekerjaan mendominasi penggunaan jendela tetangga dalam visi mesin klasik: menghaluskan variasi piksel-ke-piksel dengan bersih, dan menemukan tepi di mana citra berubah dengan tajam. Filter Gaussian adalah alat standar untuk yang pertama, detektor berbasis Laplacian adalah alat standar untuk yang kedua -- dan keduanya dapat dikombinasikan, karena setiap detektor tepi bekerja lebih baik pada masukan yang sedikit dihaluskan.
5.14.1. Filter Gaussian¶
gaussian() adalah saudara berbobot-pusat dari mean(). Keduanya menghitung rata-rata atas tetangga setiap piksel, tetapi bobot Gaussian tidak seragam: piksel yang lebih dekat ke pusat tetangga dihitung lebih, piksel di tepi tetangga dihitung kurang, dengan bobot mengikuti kurva lonceng yang memberikan filter namanya.
Pembobotan berbentuk lonceng itulah yang membuat filter Gaussian lebih halus dibanding rata-rata kotak. Filter mean dapat menghasilkan artefak yang terlihat di tepi objek -- batas bobot yang keras menimbulkan pola berdering kecil pada transisi tajam. Bobot Gaussian yang turun secara halus menghindari berdering itu dan menghasilkan hasil yang terlihat lebih dekat dengan apa yang seharusnya terlihat "buram". Biayanya adalah lebih banyak komputasi per piksel dibanding filter mean, tetapi tidak jauh lebih besar -- biaya per piksel masih jauh lebih rendah dibanding filter bilateral.
img.gaussian(1) # 3x3 Gaussian -- a clean light blur
img.gaussian(2) # 5x5 Gaussian -- stronger smoothing
Penghalusan Gaussian adalah tahap pertama standar dari hampir setiap pipeline deteksi tepi. Detektor tepi di bawah ini semuanya memperkuat konten frekuensi tinggi, termasuk noise sensor yang sebenarnya tidak ingin dideteksi oleh algoritma. Menjalankan Gaussian ringan terlebih dahulu menekan noise itu tanpa banyak melembutkan tepi nyata, sehingga detektor tepi dapat menemukan tepi nyata alih-alih speckle.
5.14.2. Unsharp masking¶
Salinan citra yang diblur Gaussian adalah bahan mentah yang digunakan teknik unsharp mask untuk penajaman klasik. Menetapkan unsharp=True pada filter mengalihkannya dari "hasilkan citra yang diblur" menjadi "kurangi citra yang diblur dari aslinya dan tambahkan perbedaannya kembali ke aslinya" -- efeknya adalah tepi frekuensi tinggi diperkuat relatif terhadap interior yang halus.
img.gaussian(1, unsharp=True)
Parameter opsional mul dan add menskalakan kekuatan hasil unsharp; nilai default (mul=1.0, add=0.0) adalah penajaman moderat yang tidak melebih-lebihkan noise sensor.
5.14.3. Filter Laplacian¶
laplacian() menjalankan aproksimasi diskrit dari turunan spasial kedua citra. Keluarannya besar di mana nilai piksel berubah dengan cepat, mendekati nol di mana nilainya konstan atau berubah secara linear. Pembacaan alami dari hasilnya adalah respons tepi: piksel di mana citra berubah dengan cepat menyala, piksel di interior halus tetap gelap.
img.laplacian(1) # 3x3 Laplacian -- edge response
Parameter yang sama dengan gaussian tersedia. sharpen=True menghasilkan citra yang ditajamkan (Laplacian ditambahkan kembali ke aslinya alih-alih dikembalikan sendiri). mul dan add menskalakan respons.
Penggunaan praktis di luar deteksi tepi adalah pengukuran fokus. Respons Laplacian yang dirata-ratakan di seluruh wilayah memberikan ukuran kasar tentang berapa banyak konten frekuensi tinggi yang dibawa wilayah tersebut; pada bingkai yang difokuskan dengan baik rata-rata tersebut tinggi, pada bingkai yang buram nilainya turun. Membandingkan respons Laplacian antar bingkai adalah cara murah untuk menanyakan "apakah lensa sudah terfokus?" tanpa membutuhkan metrik kontras yang lebih mahal.
5.14.4. Metode find_edges¶
find_edges() menjalankan pipeline deteksi tepi lengkap alih-alih hanya filter respons tepi. Pipeline ini bekerja pada citra skala abu-abu, dan hasilnya adalah citra biner yang piksel-piksel bukan-nolnya menandai posisi di mana masukan memiliki jenis perubahan kecerahan yang harus dihitung sebagai tepi.
Metode ini mengambil parameter edge_type yang memilih antara dua algoritma:
EDGE_SIMPLE menjalankan filter high-pass, menerapkan ambang batas, dan mengembalikan hasilnya. Cepat, tetapi keluarannya mencakup setiap perubahan kecerahan di atas ambang batas, termasuk noise dan tekstur yang mungkin tidak dipedulikan aplikasi. Masuk akal untuk citra yang bersih dan untuk kasus di mana noise akan dibersihkan oleh lintasan morfologi berikutnya.
EDGE_CANNY menjalankan detektor tepi Canny -- algoritma multi-tahap klasik. Algoritma ini menghitung gradien kecerahan, menekan setiap respons non-maksimum sepanjang arah gradien (sehingga setiap tepi selebar satu piksel), dan menerapkan ambang batas histeresis (sehingga tepi yang kuat di satu tempat tetap ditelusuri bahkan di mana ia memudar di antaranya). Hasilnya adalah kumpulan piksel tepi yang bersih, tipis, dan terhubung yang diinginkan setiap algoritma berbasis tepi klasik.
Parameter threshold adalah tuple dua elemen (low, high). Untuk EDGE_CANNY, nilai high adalah batas atas yang di atasnya piksel pasti merupakan tepi, dan nilai low adalah batas atas yang di atasnya piksel merupakan tepi hanya jika terhubung ke yang pasti. Untuk EDGE_SIMPLE, hanya nilai high yang penting; itulah satu-satunya batas di atasnya piksel dihitung sebagai tepi. Default (100, 200) adalah titik awal yang patut disesuaikan untuk adegan tertentu.
img.gaussian(1) # pre-smooth
img.find_edges(image.EDGE_CANNY, threshold=(50, 100))
Detektor Canny adalah pilihan yang lebih baik untuk hampir setiap aplikasi di mana tepi penting. EDGE_SIMPLE yang lebih cepat patut diingat untuk kasus di mana biaya Canny menjadi masalah dan penolakan noise dari histeresisnya sebenarnya tidak diperlukan.
5.14.5. Ambang batas adaptif pada Gaussian¶
Seperti filter statistik, gaussian() menerima pasangan kata kunci threshold=True / offset=N untuk ambang batas adaptif. Perilakunya sama dengan mean(): statistik Gaussian di setiap posisi menjadi batas lokal, dan piksel sumber dibandingkan dengan statistik ditambah offset untuk menghasilkan hasil biner.
Varian Gaussian biasanya merupakan pilihan paling bersih untuk ambang batas adaptif ketika masukan cukup bebas dari noise. Rata-rata berbobot memberikan batas yang lebih halus dibanding yang dihasilkan filter mean, dengan lebih sedikit artefak pada transisi pencahayaan yang tajam.