cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换

均值滤波

这种滤波方法就是取一个像素的邻域内各像素的平均值作为滤波结果

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('1.jpg')
plt.imshow(img)

cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第1张图片

img_mean = cv2.blur(img, (11,11))
plt.imshow(img_mean)

cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第2张图片

高斯滤波

高斯滤波采取邻域内越靠近的值提供越大的权重的方式计算平均值。权重的选取采用高斯函数的形式。高斯函数有个非常好的特点,就是无论在时域还是频域都是钟形的。

img_guass = cv2.GaussianBlur(img, (11,11), 2, 1) # 
plt.imshow(img_guass)

cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第3张图片

中值滤波

中值滤波是一种非线性滤波器。它是取邻域内各点的统计中值作为输出。这种滤波器可以有效的去除椒盐噪声。还能保持图像中各物体的边界不被模糊掉。是一种最常用的非线性滤波器。这种滤波器只能使用正方形的邻域。

img_mid = cv2.medianBlur(img, 11)
plt.imshow(img_mid)

cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第4张图片

高通滤波/低通滤波

高通和低通滤波器都有一个半径属性,确定了多大面积的邻近像素参与滤波运算

高通锐化,低通模糊

这里使用filter2D来和自定义的滤波器核来实现。

  • 另外,还有可分离滤波器 sepFilter2D,用于实现对x,y方向上的分别滤波
# 高通滤波核
import numpy as np
kernel_3x3 = np.array([[-1/9, -1/9, -1/9],
                       [-1/9, 8/2, -1/9],
                       [-1/9, -1/9, -1/9]])

kernel_5x5 = np.array([[-1, -1, -1, -1, -1],
                       [-1, 1, 2, 2, -1],
                       [-1, 2, 4, 2, -1],
                       [-1, 1, 2, 1, -1],
                       [-1, -1, -1, -1, -1]])

img_high = cv2.filter2D(img, 3, kernel_3x3) # 
plt.imshow(img_high)
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).






cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第5张图片

  • 效果不好可以改变滤波核就可以
# 低通滤波核
kernel_3x3 = np.array([[2, 2, 2],
                       [2, 0, 2],
                       [2, 2, 2]])
img_low = cv2.filter2D(img, 3, kernel_3x3) # 
plt.imshow(img_low)
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).






cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第6张图片

傅里叶变换

img_gray = cv2.imread("1.jpg", 0)
dft = cv2.dft(np.float32(img_gray), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
def magnitude(x, y):
    x_m = x * x
    y_m = y * y
    z_m = x_m + y_m
    return np.sqrt(z_m)
magnitude_spectrum2 = 20 * np.log10(magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))
plt.imshow(magnitude_spectrum2, cmap="gray")

cv2中的滤波,均值,高斯,中值,高通,低通,傅里叶变换_第7张图片


你可能感兴趣的:(Opencv,计算机视觉,学习,opencv,计算机视觉,cv,filter)