Smoothing Images
วัตถุประสงค์
- เบลอภาพที่มีฟิลเตอร์ต่างๆ
- ใช้ตัวกรองที่กำหนดเองทำกับภาพ (2D convolution)
2D Convolution (ภาพกรอง) 2D Convolution (ภาพกรอง) สามารถกรองด้วยฟิลเตอร์ต่างๆ low-pass (LPF), high-pass filters (HPF) เป็นต้น LPF ช่วยในการลบ noises เบลอภาพ ฯลฯ ฟิลเตอร์ HPF ช่วยในการหาขอบภาพ
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('joy.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()
1. Averaging
OpenCV ให้ cv2.filter2D ฟังก์ชั่น () เพื่อ convolve เคอร์เนลที่มีภาพ ตัวอย่างเช่นเราจะพยายามช้กรองเฉลี่ยที่ภาพ เคอร์เนลกรอง 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 Blurring
ตัวกรองกล่องเคอร์เนล Gaussian เราจะใช้ฟังก์ชัน cv2.GaussianBlur () เราควรระบุความกว้างและความสูงของเคอร์เนล นอกจากนี้เรายังควรระบุค่าเบี่ยงเบนมาตรฐานในทิศทาง X และ Y, SIGMAX และ sigmaY ตามลำดับ ถ้าเพียง แต่ SIGMAX ระบุ sigmaY จะมาเป็นเช่นเดียวกับ SIGMAX หากทั้งสองเป็นศูนย์จะถูกคำนวณจากขนาดของเมล็ด เกาส์เบลอมีประสิทธิภาพสูงในการลบเสียง Gaussian จากภาพ
ถ้าคุณต้องการคุณสามารถสร้างเคอร์เนลแบบเกาส์ที่มีฟังก์ชั่น cv2.getGaussianKernel ()
blur = cv2.GaussianBlur(img,(5,5),0)
3. Median Blurring
cv2.medianBlur () ใช้เฉลี่ยของพิกเซลทั้งหมดภายใต้พื้นที่เคอร์เนลและองค์ประกอบหลักจะถูกแทนที่ด้วยค่ามัธยฐาน จะมีประสิทธิภาพสูง สิ่งที่น่าสนใจก็คือว่าในตัวกรองข้างต้นองค์ประกอบหลักเป็นค่าที่คำนวณใหม่ซึ่งอาจจะเป็นค่าพิกเซลในภาพหรือค่าใหม่ แต่เบลอองค์ประกอบหลักจะถูกแทนที่ด้วยค่าพิกเซลบางอย่างในภาพ มันช่วยลด noisesได้อย่างมีประสิทธิภาพ
ในการสาธิตนี้ผมเพิ่มเสียง 50% ถึงภาพเดิมของเราและนำไปใช้แบ่งเบลอ ตรวจสอบผลที่ได้
median = cv2.medianBlur(img,5)
4. Bilateral Filtering
cv2.bilateralFilter () เป็นฟังก์ชันประสิทธิภาพสูงในการกำจัด noises แต่การดำเนินการจะช้าลงเมื่อเทียบกับตัวกรองอื่น ๆ เราได้เห็นว่าตัวกรอง Gaussian เตะย่านรอบพิกเซลล์ ตัวกรองนี้ Gaussian เป็นฟังก์ชั่นเดียว มันไม่ได้พิจารณาว่าพิกเซลมีความเข้มเกือบเดียวกัน มันไม่ได้พิจารณาว่าเป็นพิกเซลพิกเซลขอบหรือไม่ ดังนั้นมันพร่าเลือนขอบด้วยซึ่งเราไม่ต้องการที่จะทำ
ด้านล่างนี้แสดงให้เห็นว่ากลุ่มตัวอย่างใช้ตัวกรองทวิภาคี (สำหรับรายละเอียดเกี่ยวกับข้อโต้แย้งการเยี่ยมชมเอกสาร
blur = cv2.bilateralFilter(img,9,75,75)