系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、图像噪声
- 1.1 噪声定义
- 1.2 基本特征
- 二、按照噪声概率分布分类
- 1.高斯噪声
- 2.泊松噪声
- 三、去噪算法
- 3.1 线性滤波
- 3.1.1 高斯滤波
- 3.1.2 均值滤波
- 3.2 非线性滤波
- 3.2.1 中值滤波
- 3.2.2 双边滤波
- 四、深度学习
- 总结
前言
一、图像噪声
1.1 噪声定义
图像各像素点的值因为噪声的存在偏离真实数值,使得图像模糊,画质下降,甚至淹没图像特征。
1.2 基本特征
- 图像噪声和真实数据有可能叠加也有可能分离
- 绝大部分噪声在图像中大小和分布不均,具有随机性
- 大部分噪声服从一定的统计学规律
二、按照噪声概率分布分类
参考 图像噪声、去噪基本方法合集(Python实现)
1.高斯噪声
所有噪声使用最广泛的,根据高斯分布(正态分布)的形式描述。相机在拍摄时视场较暗且亮度不均匀造成的,同时相机长时间工作使得温度过高也会引起高斯噪声,另外电路元器件白身噪声和互相影响也是造成高斯噪声的重要原因之一。
给图片加噪声
import cv2
import random
import numpy as np
img = cv2.imread('tulip.jpg')
# 产生高斯随机数
noise = np.random.normal(0, 50, size=img.size).reshape(img.shape[0], img.shape[1], img.shape[2])
# 加上噪声
img_with_noise = np.clip(img + noise, 0, 255).astype(np.uint8)
# 保存带有高斯噪声的图像
cv2.imwrite('tulip_with_noise.jpg', img_with_noise)
2.泊松噪声
泊松噪声是一种常见的图像噪声,它主要出现在光子计数较低的成像条件下,例如在低光条件下拍摄的图像或者放射性成像中。泊松噪声的特点是在图像中的每个像素值上引入了随机变化,这种变化的强度与像素值本身呈正相关。泊松噪声在图像中表现为像素值的随机波动
三、去噪算法
空间域包括局部滤波和非局部滤波。局部滤波包括线性滤波和非线性滤波
3.1 线性滤波
3.1.1 高斯滤波
高斯滤波:具体来说,高斯滤波利用了高斯函数的特性,对图像中每个像素周围的邻域进行加权平均处理,使得图像中每个像素的值都受到其周围像素值的影响,从而实现平滑处理。这种平滑效果有助于去除噪声,并可以在一定程度上保留图像的边缘信息。
import cv2
import numpy as np
# 读取带有高斯噪声的图像
img_with_noise = cv2.imread('tulip_with_noise.jpg')
# 应用高斯滤波去噪
denoised_img = cv2.GaussianBlur(img_with_noise, (5, 5), 0)
# 保存去噪后的图像
cv2.imwrite('tulip_denoised.jpg', denoised_img)
3.1.2 均值滤波
对图像中的每个像素取周围像素的平均值,可以有效去除高斯噪声。用于减少图像中的噪声。在OpenCV中,可以使用 cv2.blur() 函数来应用均值滤波
3.2 非线性滤波
3.2.1 中值滤波
将每个像素的灰度值替换为其周围像素灰度值的中值
3.2.2 双边滤波
双边滤波(Bilateral Filtering)是一种常见的图像滤波技术,能够在减少噪声的同时保留图像的边缘信息。它结合了空间域和灰度值域的信息,在平滑图像的同时保持图像的细节。
-
对于输入图像中的每个像素,选择一个邻域窗口,包含该像素及其周围的像素。
-
对于窗口中的每个像素,计算它与中心像素之间的空间距离和灰度值差异。
-
根据空间距离和灰度值差异计算像素的权重。一般来说,空间距离越近且灰度值差异越小的像素权重越高。
-
使用权重对邻域内的像素进行加权平均。权重越高的像素对平均值的贡献越大。
四、深度学习
DnCNN/FFDNet
图像去噪包含 数据预处理,特征提取,去噪模型三部分
- 数据清洗
- 提取噪声块,对噪声水平高低做出初步估计
- 选择去噪模型,自主快速提取浅层像素级特征和深层语义特征
y = x+v
x:无噪声图像
y:噪声图像
x = y-R(y)
v = R(y)
R即为噪声模型