[图像平滑]——图像噪声、均值滤波、高斯滤波、中值滤波

本文介绍了图像噪声的两种主要类型——椒盐噪声和高斯噪声,详细阐述了高斯噪声的数学模型。接着,讨论了图像平滑的重要性和三种主要的平滑方法:均值滤波、高斯滤波和中值滤波,通过实例展示了它们在去除噪声和图像平滑方面的应用。
摘要由CSDN通过智能技术生成

一、图像噪声

由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。

1、椒盐噪声

2、高斯噪声

 高斯噪声是指噪声的密度服从高斯分布的一类噪声,由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。高斯噪声随机变量Z的概率密度函数由下式给出:

加入高斯噪声后的效果:

二、图像平滑

图像平滑从信号处理的角度看就是去除其中的高频信息,保留低频信息。因此我们可以对图像实施低通滤波。低通滤波可以去除图像中的噪声,对图像进行平滑

  • 根据滤波器的不同可以分为:均值滤波、高斯滤波、中值滤波、双边滤波
  • 我们认为高频信息就是噪声,低频信息就是有用的内容。

1、均值滤波

(1)API介绍

(2)实例分析

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
#字体设置
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")

#1、读取图像
img = cv.imread("./images/girl.jpg")

#2、均值滤波
blur = cv.blur(img, (5,5))

#3、图像显示
plt.figure(figsize=(10,8), dpi=100)

# subplot中的121代表[1,2,1],表示在本区域里显示1行2列个图像,最后的1表示本图像显示在第一个位置。
plt.subplot(121)
plt.imshow(img[:,:,::-1])
plt.title("原图", fontproperties=my_font)
plt.xticks([]), plt.yticks([])

plt.subplot(122)
plt.imshow(blur[:,:,::-1])
plt.title("均值滤波后的结果", fontproperties=my_font)
plt.xticks([]), plt.yticks([])
plt.show()

2、高斯滤波

图像是二维的,所以使用二维高斯分布。

 

(1)高斯平滑的流程

<1> 首先确定权重矩阵

 更远的点以此类推。为了计算权重矩阵,需要设定 σ 的值。假定 σ = 1.5,则模糊半径为1的权重矩阵如下:

9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让他们的权重之和等于1,因此上面9个值还要分别除以0.4787147(相当于做了一个归一化),得到最终的权重矩阵。

<2> 进行高斯模糊

每个点乘以对应的权重值: 

这9个值加起来,就是中心点的高斯模糊的值。对所有的点重复上述过程,就得到了高斯模糊后的图像,如果原图像是彩色图片,可以对RGB三个通道分别做高斯平滑

(2)API介绍

(3)简单案例

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from matplotlib import font_manager
#字体设置
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")

#1、读取图像
img = cv.imread("images/opencv-logo-white.png")

#2、高斯滤波
blur = cv.GaussianBlur(img, (3,3), 1)

#3、图像显示
plt.figure(figsize=(10, 8), dpi=100)
plt.subplot(121)
plt.imshow(img[:,:,::-1])
plt.title("原图", fontproperties=my_font)
plt.xticks([]), plt.yticks([])

plt.subplot(122)
plt.imshow(blur[:,:,::-1])
plt.title("高斯滤波后的结果", fontproperties=my_font)
plt.xticks([]), plt.yticks([])
plt.show()

3、中值滤波

中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值。

中值滤波对椒盐噪声(salt-and-pepper noise)来说尤其有用,因为他不依赖于邻域内那些与典型值差别很大的值。

(1)API介绍

顾名思义,函数 cv.medianBlur() 取卷积核区域下所有像素的中值,并用该中值替换中心元素。这对去除图像中的椒盐噪声非常有效。有趣的是,在上述滤波器中,中心元素是新计算的值,其可以是图像中的像素值或新值。但在中值模糊中,中心元素总是被图像中的某个像素值替换,它有效地降低了噪音。 其卷积核大小应为正整数。

(2)案例分析

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from matplotlib import font_manager
#字体设置
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")

#1、读取图片
img = cv.imread('images/board.tif')
img = cv.cvtColor(img, cv.COLOR_BGR2RGBA)

#中值滤波
median = cv.medianBlur(img,5)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(median),plt.title('Median')
plt.xticks([]), plt.yticks([])
plt.show()

三、简单总结

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值