四 OpenCV 图像处理-2 图像平滑
·低通滤波器对图像进行模糊化-去噪
·自定义滤波器对图像进行卷积
术语
低通滤波LPF:去除噪声,迷糊图像
高通滤波HPF:找到边缘
1.2D 卷积
将核K 放在图像的一个像素A上,求与核对应的图像25(5X5)个像素的和,在取平均数
用这个平均数代替A的值,重复如此操作到图像的每一个像素都更新一遍
import cv2 as cv import numpy as np import matplotlib.pyplot as plt
img = cv.imread('E:\\fruits.jpg',0)
kernel = np.ones((3,3),np.float32)/3#5x5像素 print(kernel)
dst = cv.filter2D(img,-1,kernel)
plt.subplot(321),plt.imshow(img),plt.title('Original') plt.subplot(322)#plt显示图像大小,2-行;8-列个数,3-图像位置 plt.imshow(dst)#数据 plt.title('Averaging')#标题
plt.show()
|
|
2.平均滤波器核操作原理
用卷积框覆盖的所有像素的平均值代替中心元素值
import cv2 as cv import numpy as np import matplotlib.pyplot as plt
img = cv.imread('E:\\fruits.jpg') dst = cv.blur(img,(5,5))
plt.subplot(321),plt.imshow(img),plt.title('Original') plt.subplot(322),plt.imshow(dst),plt.title('Blur')#标题
plt.show()
|
|
3.高斯模糊
将核换成具有高斯分布的核(中心值最大),原来的像素平均值,通过高斯分布,得到加权平均值,只考虑卷积框像素之间的空间关系
import cv2 as cv import numpy as np import matplotlib.pyplot as plt
img = cv.imread('E:\\fruits.jpg') #0 是指根据窗口大小(5,5)来计算高斯函数标准差 dst = cv.GaussianBlur(img,(5,5),0)
plt.subplot(321),plt.imshow(img),plt.title('Original') plt.subplot(322),plt.imshow(dst),plt.title('GaussianBlur')#标题
plt.show()
|
4.中值滤波
中值滤波是利用卷积框对应的中值来替换中心像素,常用去除椒盐噪声
import cv2 as cv import numpy as np import matplotlib.pyplot as plt
img = cv.imread('E:\\fruits.jpg')
dst = cv.medianBlur(img,5)
plt.subplot(321),plt.imshow(img),plt.title('Original') plt.subplot(322),plt.imshow(dst),plt.title('mediaBlur')#标题
plt.show() |
5.双边滤波
在保持边界清晰的情况下有效的去除噪声。高斯滤波,只求中心邻近点的像素高斯权值平均值,只是像素之间的空间关系,并不考虑像素之间的值关系(相似度),因此,高斯滤波会把边界给模糊化了。而双边滤波是同时使用空间高斯权值和灰度值的相似性高斯权重,空间高斯函数确保只有邻近像素对中心像素有影响,灰度值相似高斯函数确保对中心像素灰度值相近的才会被用来做模糊运算。
import cv2 as cv import numpy as np import matplotlib.pyplot as plt
img = cv.imread('E:\\fruits.jpg')
#9 邻域直径,两个 75 分别是空间高斯函数标准差,灰度值相似性高斯函数标准差 dst = cv.bilateralFilter(img,9,75,75)
plt.subplot(321),plt.imshow(img),plt.title('Original') plt.subplot(322),plt.imshow(dst),plt.title('bilateralFilter')#标题
plt.show()
|