Smoothing Images

จาก Morange Wiki

วัตถุประสงค์

  • เบลอภาพที่มีฟิลเตอร์ต่างๆ
  • ใช้ตัวกรองที่กำหนดเองทำกับภาพ (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)
Selection 026.jpg