Seri Tutorial Computer Vision M2C2 – Menuju AI

Panduan Data Scientist untuk Prompt Engineering – Menuju AI

Author(s): Sujay Kapadnis

Awalnya diterbitkan di Menuju AI.

Modul 2 — Filter Konvolusional dan Deteksi Tepi

Bab 2— Filter

Mulai dari sini? Artikel ini adalah bagian dari Seri Tutorial visi komputer. Di sinilah Anda bisa memulai.

Tujuan pembelajaran:

Apa itu Filter? Apa itu filter sobel? Bagaimana cara membuat dan menerapkan filter sobel? Apa itu filter Laplacian? Bagaimana cara membuat dan menerapkan filter Laplacian?

Prasyarat: Tutorial Sebelumnya

sumber: MidJourney

Apa itu filter?

Dalam visi komputer, filter adalah operasi matematika yang diterapkan pada gambar untuk mengubahnya dengan cara tertentu. Filter digunakan untuk mengekstrak informasi dari gambar, menyempurnakan fitur, menghilangkan noise, dan menyiapkan gambar untuk diproses lebih lanjut.

Ada banyak jenis filter yang digunakan dalam visi komputer, masing-masing dengan tujuan tertentu. Beberapa filter umum meliputi:

Filter Gaussian: menghaluskan gambar dengan menghilangkan noise frekuensi tinggi. Filter Sobel: mendeteksi tepi dalam gambar dengan menghitung gradien gambar dalam arah horizontal dan vertikal. Filter Laplacian: mendeteksi perubahan intensitas pada gambar dengan menghitung turunan kedua dari gambar. Filter median: menghilangkan noise dari gambar dengan mengganti setiap piksel dengan nilai median piksel tetangganya. Filter bilateral: menghaluskan gambar sambil mempertahankan tepi

Filter bekerja dengan menggabungkan gambar dengan matriks kecil, yang dikenal sebagai kernel atau filter. Filter dipusatkan pada setiap piksel gambar, dan nilai piksel tetangga dikalikan dengan nilai yang sesuai dalam matriks filter. Produk yang dihasilkan kemudian dijumlahkan, dan jumlah tersebut digunakan untuk mengganti nilai piksel yang sedang diproses.

Impor impor numpy sebagai np
impor matplotlib.pyplot sebagai plt
%matplotlib sebaris
impor cv2

2. Muat gambar dalam format yang Anda inginkan

Karena kami menggunakan skema warna RGB, saya akan memuat gambar langsung ke saluran RGB

gambar3 = cv2.cvtColor(cv2.imread(‘jalur_gambar’),cv2.COLOR_BGR2RGB)

3. Plot gambar

plt.imshow(gambar3)
plt.set_title(‘Gambar 3’)
plt.tampilkan()

untuk contoh yang sudah saya ambil gambar yang ditampilkan adalah seperti di bawah ini

keluaran

Menulis fungsi pembantu untuk mengonversi gambar kita menjadi skala abu-abu

def to_gray(gambar):
kembalikan cv2.cvtColor(gambar,cv2.COLOR_RGB2GRAY)

Membuat Kernel

Filter Sobel — Digunakan untuk mendeteksi tepi vertikel

format -> [-k,0,k]
mendeteksi perubahan intensitas mendadak dalam arah tertentu (horizontal di sini)

4. Saringan Sobel

di bawah ini adalah contoh format tampilan filter sobel, jika Anda ingin mempelajari matematika di balik filter ini, Anda dapat merujuk ke artikel ini

sobel_x = np.array([[-1,0,1],
[-5,0,5],
[-1,0,1]])
filtered_x = cv2.filter2D(to_gray(image3),-1,sobel_x)
#mewakili bahwa ‘jangan mengubah format gambar keluaran dan tetap sama dengan gambar masukan’
plt.imshow(filtered_x,cmap=’gray’)

keluaran:

keluaran

Mari kita lihat bagaimana perubahan nilai ambang mengubah output

# Tetapkan ambang batas, sehingga titik di atas ambang batas akan menjadi putih/terlihat
retval, binary_image1 = cv2.threshold(filtered_x,50,255,cv2.THRESH_BINARY)
retval, binary_image2 = cv2.threshold(filtered_x,100,255,cv2.THRESH_BINARY)
retval, binary_image3 = cv2.threshold(filtered_x,150,255,cv2.THRESH_BINARY)
retval, binary_image4 = cv2.threshold(filtered_x,200,255,cv2.THRESH_BINARY)

ara,(ax1,ax2,ax3,ax4) = plt.subplots(1,4,figsize=(15,8))
ax1.set_title(‘ambang batas 50’)
ax1.imshow(binary_image1,cmap=’gray’)
ax2.set_title(‘ambang 100’)
ax2.imshow(binary_image2,cmap=’gray’)
ax3.set_title(‘ambang batas 150’)
ax3.imshow(binary_image3,cmap=’gray’)
ax4.set_title(‘ambang 200’)
ax4.imshow(binary_image4,cmap=’gray’)

keluaran

Mengapa Menetapkan Ambang Batas?

Tujuan penggunaan threshold di sini adalah untuk menghilangkan noise yang ada pada sebuah gambar; misalnya, pada gambar 1 dengan ambang batas 50, kami mendeteksi banyak garis, tetapi saat kami meningkatkan ambang batas, lebih sedikit garis yang terdeteksi. Kami membutuhkan ambang tinggi saat kami hanya membutuhkan garis kuat dari gambar dan bukan noise. perhatikan gambar yang sedang kita eksperimen rn. Seandainya

Filter Sobel — Digunakan untuk mendeteksi tepi horizontal

format -> [-k,
0,
k]

mendeteksi perubahan intensitas mendadak dalam arah tertentu(vertikal di sini) sobel_y = np.array([[-1,-5,-1],
[0,0,0],
[1,5,1]])
filtered_y = cv2.filter2D(to_gray(image3),-1,sobel_y)
plt.imshow(filtered_y,cmap=’gray’)
keluaran # Tetapkan ambang batas, sehingga titik di atas ambang batas akan menjadi putih/terlihat
retval, binary_image1 = cv2.threshold(filtered_y,50,255,cv2.THRESH_BINARY)
retval, binary_image2 = cv2.threshold(filtered_y,100,255,cv2.THRESH_BINARY)
retval, binary_image3 = cv2.threshold(filtered_y,150,255,cv2.THRESH_BINARY)
retval, binary_image4 = cv2.threshold(filtered_y,200,255,cv2.THRESH_BINARY)

ara,(ax1,ax2,ax3,ax4) = plt.subplots(1,4,figsize=(15,8))
ax1.set_title(‘ambang batas 50’)
ax1.imshow(binary_image1,cmap=’gray’)
ax2.set_title(‘ambang 100’)
ax2.imshow(binary_image2,cmap=’gray’)
ax3.set_title(‘ambang batas 150’)
ax3.imshow(binary_image3,cmap=’gray’)
ax4.set_title(‘ambang 200’)
ax4.imshow(binary_image4,cmap=’gray’)

keluaran

Filter Laplace

Filter Laplacian digunakan untuk menyempurnakan tepian pada gambar. Ini menerapkan kernel turunan orde kedua ke gambar untuk mendeteksi perubahan intensitas. kernel_size = 3
def lap_filter(k):
laplacian_filter = np.array([[1, 1, 1],
[1, -k, 1],
[1, 1, 1]])
laplacian_filter = laplacian_filter / np.sum(np.abs(laplacian_filter))
return laplacian_filter # Terapkan filter Laplacian

img = cv2.imread(‘img_path’, cv2.IMREAD_GRAYSCALE)

filtered_3 = cv2.filter2D(img, -1, lap_filter(3))
filtered_5 = ​​cv2.filter2D(img, -1, lap_filter(5))
filtered_7 = cv2.filter2D(img, -1, lap_filter(7))

ara,(ax1,ax2,ax3) = plt.subplots(1,3,figsize=(15,8))
ax1.set_title(‘k = 3’)
ax1.imshow(filtered_3,cmap=’gray’)
ax2.set_title(‘k = 5’)
ax2.imshow(filtered_5,cmap=’gray’)
ax3.set_title(‘k = 7’)
ax3.imshow(filtered_7,cmap=’gray’)

keluaran

Bungkus

Dengan ini, kami telah menyelesaikan tujuan pembelajaran kami untuk pelajaran ini.

Setelah ini, Anda akan membuat filter dan menerapkannya pada gambar pilihan Anda.

Referensi: Bahan Bacaan

Filter Laplacian Filter Median Filter Bilateral

Tautkan ke GitHub.

Tautan Katalog di sini

Mendatang

Ini untuk Filter dan jenisnya, tutorial selanjutnya akan didedikasikan untuk Filter Gaussian

Dengan ini, kita telah sampai pada akhir artikel ini. Sampai jumpa di yang berikutnya

Sampai saat itu, Ikuti lebih banyak, dan jangan lupa untuk terhubung dengan saya di LinkedIn.❤❤❤

Diterbitkan melalui Menuju AI

Author: Jeffrey Hayes