OpenCV--图像平滑(均值滤波、方框滤波、高斯滤波、中值滤波)

OpenCV–图像平滑(均值滤波、方框滤波、高斯滤波、中值滤波)

首先看以下图,图像平滑(模糊)只是滤波中的一种操作,并不是整个滤波部分。

一、均值滤波

函数:

dst = cv.blur( src, ksize[, dst[, anchor[, borderType]]] )

  • src:输入图像;
  • ksize: 卷积核大小;
  • anchor: 锚点位置设置,默认为卷积核的中心位置;
  • borderType: 边界填充方法。

  均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值。该算法有优点在于效率高,思路简单。同样,缺点也很明显,计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多特征。
  例如使用3*3卷积核如下所示:
k e r n e l = [ 1 1 1 1 1 1 1 1 1 ] kernel= \left[ \begin{matrix} 1 & 1 & 1\\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{matrix} \right] kernel=111111111

代码演示:

img_lena = cv.imread("./img/lenaNoise.png")
# 均值滤波blur(src, ksize[, dst[, anchor[, borderType]]])
# ksize : 卷积核大小, anchor:需要进行替换值的锚点, borderType: 边界填充方法

def img_show(name, img):
    cv.imshow(name, img)
    cv.waitKey(0)
    cv.destroyAllWindows()
    
blur = cv.blur(img_lena, (3,3))
#将原图像拼接进行比较
connect = np.hstack((img_lena, blur))
img_show("blur", connect)

在这里插入图片描述

二、方框滤波

方框滤波类似于均值滤波,不过在进行卷积核计算之后进行了归一化的操作。

例如使用3*3的卷积核:

k e r n e l = α [ 1 1 1 1 1 1 1 1 1 ] , α = { 1 k s i z e . w i d t h ∗ k s i z e . h e i g h t , n o r m a l i z e = t r u e 1 , n o r m a l i z e = f a l s e kernel=α \left[ \begin{matrix} 1 & 1 & 1\\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{matrix} \right] , α = \begin{cases} \frac{1}{ksize.width*ksize.height}& ,normalize=true\\ 1 & ,normalize=false\\ \end{cases} kernel=α111111111α={ksize.widthksize.height11,normalize=true,normalize=false

函数:

dst = cv.boxFilter( src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]] )

  • ddepth:图像深度(图像深度是指存储每个像素所用的位数),-1表示和原图像的颜色深度相同。

代码示例:

boxFilter1 = cv.boxFilter(img_lena, -1, (3,3), normalize=True)
boxFilter2 = cv.boxFilter(img_lena, -1, (3,3), normalize=False)

connect = np.hstack((img_lena, boxFilter1, boxFilter2))
img_show("boxFilter", connect)

在这里插入图片描述

三、高斯滤波

高斯卷积核使用高斯函数,具体步骤参考:https://www.jianshu.com/p/73e6ccbd8f3f

函数:

dst = cv.GaussianBlur( src, ksize, sigmaX[, dst[, sigmaY=0[, borderType]]] )

  • sigmaX:X轴方向上的标准差。
#高斯滤波又称为高斯模糊,其卷积核满足高斯分布,即越靠近中心点的权重越大

GaussianBlur = cv.GaussianBlur(img_lena, (5,5), 1)
connect = np.hstack((img_lena, GaussianBlur))
img_show("gaussian", connect)

在这里插入图片描述

四、中值滤波

  中值滤波是一种典型的非线性滤波,是基于排序统计理论的一种能够有效抑制噪声的非线性信号处理技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像素值接近真实的值从而消除孤立的噪声点。该方法在取出脉冲噪声、椒盐噪声的同时能保留图像的边缘细节。这些优良特性是线性滤波所不具备的。

函数:

dst = cv.medianBlur( src, ksize[, dst] )

Note:卷积核大小必须是奇数且大于1,例如:3,5,7...

代码示例:

medianblur = cv.medianBlur(img_lena, 5)
connect = np.hstack((img_lena, medianblur))
img_show("medianblur", connect)

在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值