Canny Edge Detection Menggunakan OpenCV Python

Postingan kali ini akan membahas konsep Canny Deteksi Tepi dan opencv menyediakan fungsi tersebut yaitu : cv2.Canny().




Canny Edge Detection adalah algoritma pendeteksi tepi yang populer. Ini dikembangkan oleh John F. Canny pada tahun 1986. Ini adalah algoritma multi-tahap dan kami akan melalui setiap tahap.

  1. Pengurangan Noise

Karena deteksi tepi rentan terhadap noise pada gambar, langkah pertama adalah menghilangkan noise pada gambar dengan filter 5×5 Gaussian. Kami telah melihat ini di bab-bab sebelumnya.

  1. Mencari Intensitas Gradien Gambar

Gambar yang diperhalus kemudian disaring dengan kernel Sobel di kedua arah horisontal dan vertikal untuk mendapatkan turunan pertama dalam arah horizontal ( G_x ) dan arah vertikal ( G_y ). Dari dua gambar ini, kita dapat menemukan gradien tepi dan arah untuk setiap piksel sebagai berikut:

Edge \ _Gradient \; (G) = \ sqrt {G_x ^ 2 + G_y ^ 2} Sudut \; (\ theta) = \ tan ^ {- 1} \ bigg (\ frac {G_y} {G_x} \ bigg)

Arah gradien selalu tegak lurus terhadap tepi. Ini dibulatkan ke salah satu dari empat sudut yang mewakili arah vertikal, horizontal dan dua arah diagonal.




  1. Suppression Non-maksimum

Setelah mendapatkan magnitudo dan arah gradien, pemindaian penuh gambar dilakukan untuk menghilangkan piksel yang tidak diinginkan yang mungkin bukan merupakan bagian tepi. Untuk ini, pada setiap pixel, pixel diperiksa jika itu adalah maksimum lokal di lingkungannya di arah gradien. Periksa gambar di bawah ini:

Suppression Non-Maksimum

Titik A berada di tepi (dalam arah vertikal). Arah gradien normal ke tepi. Titik B dan C berada dalam arah gradien. Jadi titik A diperiksa dengan titik B dan C untuk melihat apakah itu membentuk maksimum lokal. Jika demikian, itu dianggap untuk tahap berikutnya, jika tidak, itu ditekan (dihukum nol).

Singkatnya, hasil yang Anda dapatkan adalah gambar biner dengan “tepi tipis”.

  1. Hysteresis Thresholding

Tahapan ini yang memutuskan semua tepi benar-benar tepi dan mana yang tidak. Untuk ini, kita membutuhkan dua nilai ambang, minimum dan maks . Setiap sisi dengan intensitas gradien lebih dari maxVal pasti menjadi tepi dan yang di bawah minimum yakin tidak menjadi bagian-bagian, jadi dibuang. Mereka yang berada di antara dua ambang ini diklasifikasikan sebagai tepi atau non-tepi berdasarkan konektivitasnya. Jika mereka terhubung ke piksel “yakin-tepi”, mereka dianggap sebagai bagian dari tepi. Jika tidak, mereka juga dibuang. Lihat gambar di bawah ini:

Hysteresis Thresholding

Tepi A berada di atas maxVal , sehingga dianggap sebagai “pasti-tepi”. Meskipun edge C di bawah maxVal , ia terhubung ke edge A, jadi itu juga dianggap sebagai edge yang valid dan kita mendapatkan kurva penuh. Tapi ujung B, meskipun di atas minVal dan berada di wilayah yang sama dengan tepi C, itu tidak terhubung ke “yakin-tepi”, sehingga dibuang. Jadi sangat penting bahwa kita harus memilih minVal dan maxVal sesuai untuk mendapatkan hasil yang benar.




Tahap ini juga menghilangkan noise piksel kecil dengan asumsi bahwa tepi adalah garis panjang.

Jadi apa yang akhirnya kita dapatkan adalah tepi yang kuat dalam gambar.

Hasilnya akan terlihat seperti video diatas.




Tinggalkan komentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.