学习目标:
了解图像中的噪声类型
了解均值滤波、高斯滤波、中值滤波等内容
能够使用滤波器进行图像处理
1 图像噪声
由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理,常见的噪声有高斯噪声、椒盐噪声等。
1.1 椒盐噪声
椒盐噪声:也称为脉冲噪声,是图像处理中常见的一种噪声,它是一种随机出现的白点或黑点。
1.2 高斯噪声
高斯噪声:是指噪声的(灰度值)密度函数服从高斯分布。
2 图像平滑
图像平滑从信号处理的角度看,就是去除其中的高频信息,保留低频信息。因此可以对图像实施低通滤波,低通滤波可以去除图像中的噪声,对图像进行平滑。
2.1 均值滤波
定义: 采用均值滤波模板,对图像中的噪声进行去除——卷积框覆盖区域所有像素的平均值来代替中心元素。
特点: 均值滤波的算法优点是算法简单,计算速度快,缺点是去噪的时候会去掉很多细节细腻,将图像变得模糊。
API: cv2.blur(src,ksize,anchor,borderType)
参数:
src:输入图像
ksize:卷积核大小
anchor:默认值(-1,-1)表示核中心
borderType:边界类型
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img1=cv2.imread('blur_sp.png')#椒盐噪声的图像
img2=cv2.imread('blur_gs.png')#高斯噪声的图像
#2.均值滤波
img_blur1=cv2.blur(img1,(5,5))
#3.显示图像
cv2.imshow('origin',img1)
cv2.imshow('blur_jiaoyan',img_blur1)
cv2.waitKey(0)
2.2 高斯滤波
二维高斯: 概率分布,在xy方向都是高斯分布
G(x,y)的分布式一个凸起的帽子的形状
正态分布是一种钟型曲线,越接近中心,取值越大,越远离中心,取值越小。计算高斯平滑结果时,只需要将中心点作为原点,其他点按照其在正态分布曲线上的位置,分配权重,就可以得到一个加权平均值。 (高斯平滑/滤波,在去除高斯噪声方面非常有效)
高斯平滑/滤波的流程:
(1)确定权重矩阵
需要设定方差,确定高斯滤波的权重矩阵。因为该矩阵权重的总和为x,因此权重矩阵还要除以x,得到最终的权重矩阵。
(2)计算高斯模糊
利用权重矩阵计算高斯模糊(权重矩阵和图像元素值进行相乘,并求和,求和的结果为高斯模糊的结果)
API: cv2.GaussianBlur(src,sigmax,sigmay,borderType)
参数:
src:输入图像
ksize:高斯卷积核大小,注意卷积核的宽度和高度都应该为奇数,且可以不同
sigmax:水平方向的标准差
sigmay:垂直方向的标准差,默认为0,表示与sigmax相同
borderType:填充边界类型
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img1=cv2.imread('blur_sp.png')#椒盐噪声的图像
img2=cv2.imread('blur_gs.png')#高斯噪声的图像
#2.高斯滤波
img_blur1=cv2.GaussianBlur(img2,(3,3),sigmaX=1)
#3.显示图像
cv2.imshow('origin',img2)
cv2.imshow('blur_jiaoyan',img_blur1)
cv2.waitKey(0)
2.3 中值滤波
定义: 中值滤波是一种典型的非线性滤波技术,基本思想是 用像素点邻域灰度值的中值来替代该像素点的灰度值。
特点: 对椒盐噪声尤其有用,因为他不依赖邻域内那些典型值差别很大的值
API: cv2.medianBlur(src,ksize)
src:输入图像
ksize:卷积核大小
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img1=cv2.imread('blur_sp.png')#椒盐噪声的图像
img2=cv2.imread('blur_gs.png')#高斯噪声的图像
#2.均值滤波
img_blur1=cv2.medianBlur(img1,3)
#3.显示图像
cv2.imshow('origin',img1)
cv2.imshow('blur_jiaoyan',img_blur1)
cv2.waitKey(0)