目录
空间域处理
1.基于领域的卷积滤波变换
(1)、平滑均值滤波/卷积
破坏了图像的细节使图像变得模糊,同时不能很好的去除噪声
def blur_demo(image):
dst = cv.blur(image, (5, 5))
cv.imshow("blur_demo", dst)
(2)、平滑中值滤波/卷积
中值滤波对降噪能起到很好的作用,同时尽可能保留图像的细节
def median_blur_demo(image):
dst = cv.medianBlur(image, 5)
cv.imshow("median_blur_demo", dst)
(3)、自定义过滤器卷积
def custom_blur_demo(image):
#kernel = np.ones([5, 5], np.float32)/25
kernel = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]], np.float32)
dst = cv.filter2D(image, -1, kernel=kernel)
cv.imshow("custom_blur_demo", dst)
- (左)移位
- 锐化
(4)、平滑高斯滤波/卷积
- 模拟人眼(离关注中心越远,精度越模糊),关注中心区域。有效的去除高斯噪声
越小关注区域越集中
blur_1 = cv2.GaussianBlur(img,(5,5),0)#高斯滤波(5, 5)表示高斯矩阵的长与宽都是5,标准差取0
(5)、梯度Prewitt滤波/卷积
(6)、梯度Sobel滤波/卷积
一阶导数极值点的地方为图像中两个边缘变化最大的地方
import cv2 as cv
import numpy as np
def sobel_demo(image):
grad_x = cv.Sobel(image, cv.CV_32F, 1, 0)
grad_y = cv.Sobel(image, cv.CV_32F, 0, 1)
# grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)#比Sobel效果更明显,效果如第二幅图所示
# grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)
gradx = cv.convertScaleAbs(grad_x)
grady = cv.convertScaleAbs(grad_y)
cv.imshow("gradient-x", gradx)
cv.imshow("gradient-y", grady)
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
cv.imshow("gradient", gradxy)
![](https://i-blog.csdnimg.cn/blog_migrate/c24d188de478b34d19ebd37c44666b4f.png)
sobelx = cv.Sobel(img,cv.CV_64F,1,0,ksize=5)#Sobel算子为边沿检测中常用的算子之一,Sobel 算子计算一阶、二阶、三阶或混合图像差分
sobely = cv.Sobel(img,cv.CV_64F,0,1,ksize=5)
(7)、梯度Laplacian滤波/卷积
二阶导数为0的地方为边缘变化最大处
- 团块检测:周边高于(低于)中心点
- 边缘检测:像素值快速变化的区域
import cv2 as cv
import numpy as np
def lapalian_demo(image):
dst = cv.Laplacian(image, cv.CV_32F)#函数默认使用2D四领域的卷积核
lpls = cv.convertScaleAbs(dst)
# kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])#自定义一个2D八领域的卷积核
# dst = cv.filter2D(image, cv.CV_32F, kernel=kernel)
lpls = cv.convertScaleAbs(dst)
cv.imshow("lapalian_demo", lpls)
laplacian = cv.Laplacian(img,cv.CV_64F)#对图像求二阶导数,一般用于边缘突出,在边缘检测中应用为Laplacian滤波