模糊操作:基于离散卷积,定义好每个卷积核,不同卷积核得到不同的卷积效果,模糊是卷积的一种表现形式。
均值模糊
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。由于图像边框上的像素无法被模板覆盖,造成了图像边缘的缺失。
def blur_demo(image):
"""
均值模糊:去随机噪声
blur只能定义卷积核大小
"""
dst_y = cv.blur(image, (1, 10)) # Y方向模糊,1X10卷积核
dst_x = cv.blur(image, (10, 1)) # X方向模糊,10X1卷积核
dst_xy = cv.blur(image, (5, 5)) # 块模糊,5X5卷积核
cv.imshow("blurY demo", dst_y)
cv.imshow("blurX demo", dst_x)
cv.imshow("blurXY demo", dst_xy)
中值模糊
将数据从小到大排序后的中间值,用3×3大小模板进行中值滤波。对模板中的9个数进行从小到大排序:1,1,1,2,2,5,6,6,10。中间值为2所有,中值滤波后(2,2)位置的值变为2.同理对其他像素点。
def median_blur_demo(image):
"""中值模糊:去噪"""
dst_xy = cv.medianBlur(image, 5)
cv.imshow("median_blurXY demo", dst_xy)
椒盐噪声:
自定义模糊
(锐化)就是突出图像细节或者增强图像被模糊的地方。
def custom_blur_demo(image):
"""自定义模糊"""
kernel1 = np.ones([5, 5], np.float32)/25 # 5X5 值1卷积核,/25防止溢出
# 卷积锐化算子,增加对比度
kernel2 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 5X5卷积核
dst1 = cv.filter2D(image, -1, kernel1)
dst2 = cv.filter2D(image, -1, kernel2)
cv.imshow("custom_blur demo1", dst1)
cv.imshow("custom_blur demo2", dst2)
去噪
锐化
代码
# -*- coding: utf-8 -*-
# By:iloveluoluo
# 2019.3.24
import cv2 as cv
import numpy as np
# 模糊操作:基于离散卷积,定义好每个卷积核,不同卷积核得到不同的卷积效果,模糊是卷积的一种表现形式。
# 均值模糊:均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该
# 模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),
# 再用模板中的全体像素的平均值来代替原来像素值。由于图像边框上的像素无法被模板覆盖,造成了图像边缘的缺失。
# 中值模糊:将数据从小到大排序后的中间值,用3×3大小模板进行中值滤波。对模板中的9个数进行从小到大排序:1,1,1,2,2,5,6,6,10。
# 中间值为2所有,中值滤波后(2,2)位置的值变为2.同理对其他像素点。
# 自定义模糊:(锐化)就是突出图像细节或者增强图像被模糊的地方。
def blur_demo(image):
"""
均值模糊:去随机噪声
blur只能定义卷积核大小
"""
dst_y = cv.blur(image, (1, 10)) # Y方向模糊,1X10卷积核
dst_x = cv.blur(image, (10, 1)) # X方向模糊,10X1卷积核
dst_xy = cv.blur(image, (5, 5)) # 块模糊,5X5卷积核
cv.imshow("blurY demo", dst_y)
cv.imshow("blurX demo", dst_x)
cv.imshow("blurXY demo", dst_xy)
def median_blur_demo(image):
"""中值模糊:去噪"""
dst_xy = cv.medianBlur(image, 5) # 邻域X*X,X必须为基数
cv.imshow("median_blurXY demo", dst_xy)
def custom_blur_demo(image):
"""自定义模糊"""
kernel1 = np.ones([5, 5], np.float32)/25 # 5X5 值1卷积核,/25防止溢出
# 卷积锐化算子,增加对比度
kernel2 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 5X5卷积核
dst1 = cv.filter2D(image, -1, kernel1)
dst2 = cv.filter2D(image, -1, kernel2)
cv.imshow("custom_blur demo1", dst1)
cv.imshow("custom_blur demo2", dst2)
src = cv.imread('E:/MyFile/Picture/date/lenademo.png') # 读取椒盐噪声图片
# blur_demo(src)
# median_blur_demo(src)
custom_blur_demo(src)
cv.imshow("src demo", src)
cv.waitKey(0)
cv.destroyAllWindows()