均值滤波:典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
1.均值模糊函数blur():定义:blur(src,ksize,dst=None, anchor=None, borderType=None)
定义是有5个参数,但最后三个均为none,所以也就2个参数
src:要处理的原图像
ksize: 周围关联的像素的范围:代码中(5,5)就是9*5的大小,就是计算这些范围内的均值来确定中心位置的大小
2.中值模糊函数medianBlur(): 定义:medianBlur(src, ksize, dst=None)
ksize与blur()函数不同,不是矩阵,而是一个数字,例如为5,就表示了5*5的方阵
代码
import cv2 as cv
import numpy
def blur_demo(image):
"""
均值模糊 : 去随机噪声有很好的去噪效果
(1, 15)是垂直方向模糊,(15, 1)是水平方向模糊
"""
dst = cv.blur(image, (15, 1)) # 均值模糊
cv.imshow("blur_demo", dst)
def median_blur_demo(image):
# 第二个参数是孔径的尺寸,一个大于1的奇数。
# 比如这里是5,中值滤波器就会使用5×5的范围来计算。
# 即对像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉
dst = cv.medianBlur(image, 5) # 中值模糊 适合椒盐噪声去噪
cv.imshow("median_blur_demo",dst)
def custom_blur_demo(image):
# 定义5 * 5卷积核---均值模糊的效果
# kernel = numpy.ones([5, 5], numpy.float32) / 25
# 定义卷积核---锐化 总和0:做边缘梯度 总和1:做增强
# 用户自定义模糊
# 下面除以25是防止数值溢出
kernel = numpy.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], numpy.float32)
dst = cv.filter2D(image, -1, kernel=kernel)
cv.imshow("custom_blur_demo", dst)
src = cv.imread("./data/lena.jpg", cv.IMREAD_COLOR)
cv.namedWindow("lena", cv.WINDOW_AUTOSIZE)
cv.imshow("lena", src)
blur_demo(src)
median_blur_demo(src)
custom_blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
网友评论