文章目录
- 1 图像噪声
- 1.1 椒盐噪声
- 1.2 高斯噪声
- 2 图像去噪/滤波/平滑
- 2.1 高斯滤波
- 2.2 均值滤波
- 2.3 中值滤波
1 图像噪声
噪声的产生: 图像中间某些像素发生突变,造成与周围像素之间不和谐
去噪: 用和谐的点替换掉不和谐的点。对灰度值的变化做均一化。
去噪的方法:
(1)基于卷积的方法:高斯滤波、均值滤波…
(2)基于形态学的运算:开、闭运算…
1.1 椒盐噪声
椒盐噪声:也称为脉冲噪声,是图像处理中常见的一种噪声,它是一种随机出现的白点或黑点。
1.2 高斯噪声
高斯噪声:是指噪声的(灰度值)密度函数服从高斯分布。
2 图像去噪/滤波/平滑
2.1 高斯滤波
高斯核:
越接近中心,取值越大,越远离中心,取值越小。计算高斯平滑结果时,只需要将中心点作为原点,其他点按照其在正态分布曲线上的位置,分配权重,就可以得到一个加权平均值。
高斯滤波的作用:
(1)高斯滤波对图像进行了平滑或模糊的操作,模糊的强度是由高斯的标准方差σ决定的,标准方差越大,对图像的平滑越大,方差越小,对图像的模糊程度越小。
(2)高斯滤波是一个平均操作,对高斯核覆盖的像素点的灰度值的平均,给中间的点给予更多的权重的平均。 使得中间的点具有更多的权重,周围点具有较低的权重。能够很好的保留原来图像的属性。
API: cv2.GaussianBlur(src,ksize,sigmax,sigmaY=None, borderType=None)
参数:
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.2 均值滤波
均值滤波核:
均值滤波核覆盖的每个像素点或得到了相同权重。采用均值滤波模板,对图像中的噪声进行去除——卷积框覆盖区域所有像素的平均值来代替中心元素。这种平均操作不能很好保持图像本来的属性,将图像变得异常模糊。
API: cv2.blur(src,ksize,anchor=None, borderType=None)
参数:
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.3 中值滤波
中值滤波核: 对核覆盖的像素灰度值做排序,取中值作为最终结果。中值滤波是一种典型的非线性滤波技术,基本思想是 用像素点邻域灰度值的中值来替代该像素点的灰度值。
emsp; 特点: 对椒盐噪声尤其有用,因为他不依赖邻域内那些典型值差别很大的值
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)
中值滤波的效果不如高斯滤波核均值滤波,但是运算速度快。