目录
图像平滑处理
图像噪声:图像中不希望存在的随机干扰或失真,它通常是由于摄像机传感器、环境条件、传输过程等因素引起的。噪声会使图像变得模糊、失真或者产生其他不良效果,常见噪声有
高斯噪声(Gaussian Noise)、椒盐噪声(Salt-and-Pepper Noise)、周期性噪声(Periodic Noise)、量化噪声(Quantization Noise)、散斑噪声(Speckle Noise)
效果:减少图像中的噪声并使其更加平滑
如何添加噪声
高斯噪声:一种服从正态分布的噪声,可以通过生成具有正态分布的随机值与输入图像的像素值相加。(之后补充解释)
import numpy as np
import cv2
def add_gaussian_noise(image, mean=0, std_dev=25):
"""
添加高斯噪声到图像中
"""
row, col, ch = image.shape
gauss = np.random.normal(mean, std_dev, (row, col, ch))
gauss = gauss.reshape(row, col, ch)
noisy = image + gauss
return noisy.astype(np.uint8)
# 读取图像
image = cv2.imread('input_image.jpg')
# 添加高斯噪声
noisy_image = add_gaussian_noise(image)
# 显示原始图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
均值滤波
原理:以一个图像像素值为例(临近的像素值大小应该是差不多大的,根据这点,对图像3*3的中心像素值做改变)
#均值滤波
import cv2
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img=cv2.imread('zaodian.jpg')
cv_show('zaodian',img)
blur=cv2.blur(img,(3,3))#要表明核的大小一般为奇数
cv_show('blur',blur)
![](https://i-blog.csdnimg.cn/blog_migrate/04de63638ef07fc96168d7e8c9e99c2f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/19e896153b2e7c1dcb6991f0aa7e5c3e.png)
方框滤波
基本和均值滤波一样,3x3的盒子核将应用于输入图像,并且输出图像中的每个像素值将是其周围9个像素值的平均值。(基本和均值滤波原理一样)
#前面读取图像代码都是一样的
box=cv2.boxFilter(img,-1,(3,3),normalize=True)
cv_show('box',box)
解释一下第九行代码:
-1
:表示输出图像的深度,设置为-1表示输出图像与输入图像具有相同的深度(每个像素的颜色值的位数或者字节数)。(3,3)
:表示滤波核的大小,这里是一个3x3的核。normalize=True
:表示在滤波操作时是否进行归一化处理。不做归一化处理,就相当于把九个像素值加到一起,没有除以9。设置为True表示进行归一化处理(False不进行)。
图像归一化处理:将图像的像素值缩放到特定范围内(如果像素值>255,直接默认>255的像素值为255,为白色,因此归一化可以防止越界)
![](https://i-blog.csdnimg.cn/blog_migrate/d3901592507fa325590dfcd534d2f197.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9ff4e42abfa1b47037c42f311f9fd92f.png)
高斯滤波
相对于均值滤波,高斯滤波对于离中心点越接近的像素值赋予更高的权重,更加‘‘公正’’
比如对于3*3图像,我可以设置这样一个核,中间权重最大
#前面代码相同
aussian=cv2.GaussianBlur(img,(5,5),1)
cv_show('aussian',aussian)
中值滤波
取3*3图像的9个像素值,从大到小排列,取中值(中位数),再赋给中间像素点的值
median=cv2.medianBlur(img,5)
cv_show('median',median)
![](https://i-blog.csdnimg.cn/blog_migrate/32e1e3479b9e52c69e723fab569162f3.png)
对比效果
import numpy as np
res=np.hstack((blur,box,aussian,median))
cv_show('res',res)