Buramkan citra dengan berbagai filter akses rendah
Terapkan filter yang dibuat khusus ke gambar (konvolusi 2D)
Konvolusi 2D (Penyaringan Gambar) ¶
Sedangkan untuk sinyal satu dimensi, gambar juga dapat difilter dengan berbagai filter low-pass (LPF), filter high-pass (HPF), dll. LPF membantu menghilangkan noise, atau mengaburkan gambar. Filter HPF membantu menemukan tepi pada gambar.
OpenCV menyediakan fungsi, cv2.filter2D (), untuk menggabungkan kernel dengan sebuah image. Sebagai contoh, kami akan mencoba filter averaging pada gambar. Kernel filter rata-rata 5x5 dapat didefinisikan sebagai berikut:
Pemfilteran dengan hasil kernel di atas dilakukan sebagai berikut: untuk setiap piksel, jendela 5x5 dipusatkan pada piksel ini, semua piksel yang termasuk dalam jendela ini dijumlahkan, dan hasilnya kemudian dibagi 25. Ini sama dengan menghitung rata-rata dari nilai piksel di dalam jendela itu. Operasi ini dilakukan untuk semua piksel pada gambar untuk menghasilkan gambar keluaran yang difilter. Coba kode ini dan periksa hasilnya:
JANGAN LUPA SIAPKAN GAMBAR DENGAN NAMA OPENCV_LOGO.PNG
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('opencv_logo.png') kernel = np.ones((5,5),np.float32)/25 dst = cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title('Averaging') plt.xticks([]), plt.yticks([]) plt.show()
Image Blurring (Image Smoothing)
Pemburaman gambar dicapai dengan menggabungkan gambar dengan kernel filter lolos-rendah. Berguna untuk menghilangkan kebisingan. Ini benar-benar menghilangkan konten frekuensi tinggi (misalnya: noise, tepi) dari gambar yang mengakibatkan tepi menjadi kabur saat filter ini diterapkan. (Nah, ada teknik pengaburan yang tidak mengaburkan tepian). OpenCV menyediakan empat jenis teknik pengaburan.
1. Averaging¶
Ini dilakukan dengan membelit gambar dengan filter kotak yang dinormalisasi. Ini hanya mengambil rata-rata dari semua piksel di bawah area kernel dan menggantikan elemen pusat dengan rata-rata ini. Ini dilakukan oleh fungsi cv2.blur () atau cv2.boxFilter (). Periksa dokumen untuk detail lebih lanjut tentang kernel. Kita harus menentukan lebar dan tinggi kernel. Filter kotak normalisasi 3x3 akan terlihat seperti ini:
Jika Anda tidak ingin menggunakan filter kotak yang dinormalisasi, gunakan cv2.boxFilter () dan teruskan argumen normalize = False ke fungsi tersebut.
Periksa contoh demo di bawah ini dengan ukuran kernel 5x5:
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('opencv_logo.png') blur = cv2.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Blurred') plt.xticks([]), plt.yticks([]) plt.show()
2. Gaussian Filtering¶
Dalam pendekatan ini, alih-alih filter kotak yang terdiri dari koefisien filter yang sama, digunakan kernel Gaussian. Itu dilakukan dengan fungsi, cv2.GaussianBlur (). Kita harus menentukan lebar dan tinggi kernel yang harus bernilai positif dan ganjil. Kita juga harus menentukan deviasi standar dalam arah X dan Y, sigmaX dan sigmaY masing-masing. Jika hanya sigmaX yang ditentukan, sigmaY dianggap sama dengan sigmaX. Jika keduanya diberikan sebagai nol, keduanya dihitung dari ukuran kernel. Pemfilteran Gaussian sangat efektif dalam menghilangkan noise Gaussian dari gambar.
Jika mau, Anda dapat membuat kernel Gaussian dengan fungsi cv2.getGaussianKernel ().
Kode di atas dapat dimodifikasi untuk mengaburkan Gaussian:
blur = cv2.GaussianBlur(img,(5,5),0)
3. Median Filtering¶
Di sini, fungsi cv2.medianBlur () menghitung median dari semua piksel di bawah jendela kernel dan piksel pusat diganti dengan nilai median ini. Ini sangat efektif dalam menghilangkan kebisingan garam dan merica. Satu hal yang menarik untuk diperhatikan adalah, dalam filter Gaussian dan kotak, nilai yang difilter untuk elemen pusat dapat berupa nilai yang mungkin tidak ada pada gambar asli. Namun ini tidak terjadi pada pemfilteran median, karena elemen pusat selalu diganti dengan beberapa nilai piksel pada gambar. Ini mengurangi kebisingan secara efektif. Ukuran kernel harus berupa bilangan bulat ganjil positif.
Dalam demo ini, kami menambahkan 50% noise ke gambar asli kami dan menggunakan filter median. Periksa hasilnya:
median = cv2.medianBlur(img,5)
Tidak ada komentar:
Posting Komentar