雾看OpenCV(7)——图像平滑

在这里插入图片描述

前言

目标是:
1、学习使用不同的低通滤波器对图像进行模糊
2、使用自定义的滤波器对图像进行卷积(2D 卷积)
首先,明确低通滤波(LPF)帮助我们去除噪音,模糊图像。HPF(高通滤波) 帮助我们找到图像的边缘。

正文

2D卷积

效果图
在这里插入图片描述
code

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

src = cv.imread("../../images/lena.jpg")

kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(src,-1,kernel)
cv.imshow("src",src)
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

ddepth:图像深度是指存储每个像素所用的位数,它也是用来度量图像的色彩分辨率的。它确定了彩色图像的每个像素可能有的色彩数,或者确定灰度图像的每个像素可能有的灰度级数。它决定了色彩图像中可能出现的最多的色彩数,或者灰度图像中的最大灰度等级。

低通滤波模糊

作为是去除高频部分,比如噪音,边界等。

平均

使用的函数是cv.blur ()或是cv.boxFilter()。
效果图
在这里插入图片描述

高斯模糊

现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是 相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据 距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求 加权平均数,全就是方框里的值)。最大作用是去除高斯噪声
实现的函数是:cv.GaussianBlur()。
注意,参数中,我们要指定的高斯核的宽和高都要是奇数,并且还要指定x方向和y方向的标准差。

效果图
在这里插入图片描述

中值模糊

用与卷积框对应像素的中值来替代中心像素的值。这个滤波 器经常用来去除椒盐噪声。前面的滤波器都是用计算得到的一个新值来取代中 心像素的值,而中值滤波是用中心像素周围(也可以使他本身)的值来取代他。 他能有效的去除噪声。卷积核的大小也应该是一个奇数。
效果图
在这里插入图片描述
看来,中值滤波还是很适合椒盐噪声的过滤的。

双边滤波

效果图
在这里插入图片描述

函数 cv2.bilateralFilter()在保持边界清晰的情况下有效的去除噪 音。但是这种操作与其他滤波器相比会比较慢。我们已经知道高斯滤波器是求 中心点邻近区域像素的高斯加权平均值。这种高斯滤波器只考虑像素之间的空 间关系,而不会考虑像素值之间的关系(像素的相似度)。所以这种方法不会考 虑一个像素是否位于边界。因此边界也会别模糊掉,而这正不是我们想要。 双边滤波在同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函 数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有 与中心像素灰度值相近的才会被用来做模糊运算。所以这种方法会确保边界不 会被模糊掉,因为边界处的灰度值变化比较大。

cv.bilateralFilter

在这里插入图片描述

code

code

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

src = cv.imread("../../images/lena.jpg")
sp_lena = cv.imread("../../images/sp_lena.jpg")
gasuss_lena = cv.imread("../../images/gasuss_lena.jpg")
bilateraPicture = cv.imread("../../images/bilateralPicture.jpg")
kernel = np.ones((5,5),np.float32)/25
filter2D = cv.filter2D(src,-1,kernel)
blurImage = cv.blur(src,(5,5))
gaussionImage = cv.GaussianBlur(gasuss_lena,(5,5),0)
mediaBlur = cv.medianBlur(sp_lena,5)
bilateraBlur = cv.bilateralFilter(bilateraPicture,9,75,75)

cv.imshow("Filter2D_dst",filter2D)
cv.imshow("src",src)
cv.imshow("sp_lena",sp_lena)
cv.imshow("gasuss_lena",gasuss_lena)
cv.imshow("bilateraPicture",bilateraPicture)

cv.imshow("medianBlur",mediaBlur)
cv.imshow("blurImage",blurImage)
cv.imshow("gaussionImage",gaussionImage)
cv.imshow("bilateraBlur",bilateraBlur)
cv.waitKey(0)
cv.destroyAllWindows()

参考

  1. 给图像添加各种噪声
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值