图像处理算法的学习笔记
一、常见噪声简介
1. 高斯噪声
最普遍,最难用肉眼精确判断。图像整体看起来"颗粒感"很强,像蒙了一层半透明的"薄纱"或"雪花点"(就像老式电视的雪花屏),覆盖整个画面。噪声点是细小的、连续分布的,各个像素点都有独立的随机强度变化。亮度变化通常是连续渐变的。
通常在模拟到数字转换过程中引入。例如,使用数码相机或手机拍照时,特别是在光线不足的情况下提高ISO值拍摄的照片中最为常见。这种噪声是由于传感器和电子电路中的热能随机波动造成的。
2. 椒盐噪声
椒盐噪声也称为脉冲噪声。是非常明显且容易肉眼判断的,图像上散布着明亮的白点或/和黑色的点,就像撒了盐粒(白)和胡椒粒(黑)一样。噪声点是孤立的、单个像素或极小簇状。点状噪声在亮区域是黑的,在暗区域是白的(因为是与原始像素值无关的极值)。椒盐噪声可能出现在数据采集过程中短暂的强干扰(如电磁干扰)、扫描文档时的小污点、损坏的传输通道。
3. 泊松噪声
又叫散粒噪声。亮度越高(光子越多)的区域,噪声越不明显(信噪比越高);亮度越低(光子越少)的区域,噪声越明显,颗粒感越大(信噪比越低)。在低光照条件下拍摄的照片(如天文成像、显微成像、夜间摄影)非常常见。视觉上可能与高斯噪声相似(颗粒感),但它不是均匀的,而是随信号强弱变化的。
4. 量化噪声
通常发生在颜色过渡(特别是渐变区域)或暗区。表现为带状色块或伪轮廓,原本平滑的渐变区域出现了阶梯状或分层的颜色过渡。一般与图像保存的位深度(如用8位保存原本更高精度的图像)或压缩伪影有关。
5. 条纹噪声
又叫固定模式噪声、条带噪声。是非常明显且具有周期性的垂直条纹噪声和水平条纹噪声。通常是由图像传感器的非均匀响应造成的。这种噪点在一些低质量或过热作业的摄像头中比较明显,尤其是在黑暗环境中拍摄时,可以观察到连续的垂直或水平条纹。
6. 周期性噪声
由电子设备中的交流电源干扰等引起的,会在频域中表现为特定频率的峰值。周期性噪声通常由电力供应系统的交流电干扰引起,比如在某些老式监控摄像头或电视机上可以看到水平条纹或滚屏现象。
二、如何辨别噪声
- 肉眼看。仔细观察图像,特别是不同区域(纯色背景、平滑渐变、细节丰富区、明亮区、暗区)放大后的像素细节。椒盐、条纹、周期性噪声相对容易通过肉眼识别。
- 均匀区域分析。选择一个视觉上均匀的区域(如蓝天、白墙、阴影下的桌面),利用图像处理软件(Photoshop,GIMP,ImageJ,OpenCV等)显示图像选定区域的直方图。
- 椒盐噪声:直方图两端出现尖峰(分别对应纯黑和纯白)
- 高斯噪声:直方图在主体信号峰值周围对称地"扩散"变宽
- 泊松噪声:分布近似高斯,但在低强度区域会更宽(峰值不对称)
- 了解图像来源。图像是用什么设备拍的?是白天还是晚上拍?ISO高不高?有没有压缩过?这些都是了解图像噪声的总要信息。如果图像是在暗光下拍的或者使用了高ISO值,那么泊松噪声(可能混合高斯噪声)是极大概率存在的。
- 现实世界的噪声往往是混合的。比如一张暗处拍的照片,泊松噪声可能是主要问题,同时伴随一些高斯噪声,也许还有压缩伪影。
- 利用免费图像处理工具自带的去噪功能直接查看去噪效果,像ImageJ、GIMP或Photoshop都有过滤器和直方图功能,可以直观观察到噪点去除效果。
三、去噪算法简介
1. 空间域滤波 (直接在像素点进行处理)
1)线性滤波 (邻域加权平均)
- 核心思想: 用一个固定内核(窗口/kernel)在图像上滑动,计算每个位置内核覆盖像素的加权平均值替换中心像素。
- 常用方法:
- 均值滤波:
- 内核内所有像素权重相同(平均),例如 3x3 内核每个位置权重 1/9。
- **作用:**快速平滑噪声。
- **缺点:**严重模糊边缘和细节。
- **适用噪声:**非常轻微的高斯噪声。
- 高斯滤波:
- 内核权重根据高斯函数分布(中心最高,向边缘递减),得到高斯核后做卷积相加。
- 作用: 高效平滑高频噪声,边缘模糊小于均值滤波。
- 缺点: 仍会造成一定模糊,无法处理椒盐噪声。
- 适用噪声: 高斯噪声(最常见的加性噪声)。
- 均值滤波:
- 优点: 计算简单、速度快。
- 缺点: 模糊边缘细节,对椒盐噪声效果差。
2)非线性滤波 (非简单平均,依赖排序或特定规则)
- 核心思想: 利用邻域像素的非线性关系,更好地保护边缘。
- 常用方法:
- 中值滤波:
- 取内核内所有像素值的中位数替换中心像素。
- 作用: 对椒盐噪声效果极其显著,同时较好地保护边缘。
- 缺点: 对均匀高斯噪声效果不如高斯滤波,可能会丢失小细节或使细线断裂。
- 适用噪声: 椒盐噪声。
- 最小值滤波:
- 用内核内最小值替换中心像素。
- 作用: 去除白色高亮点(白盐点)。
- 适用噪声: 椒盐噪声 (盐点)。
- 最大值滤波:
- 用内核内最大值替换中心像素。
- 作用: 去除黑色暗点(黑胡椒点)。
- 适用噪声: 椒盐噪声 (椒点)。
- 双边滤波:
- 加权平均,但权重结合空间邻近性和像素值相似性(灰度相似性或颜色相似性)。
- 作用: 有效平滑平坦区域噪声,同时较好保护强边缘。
- 缺点: 计算复杂(比线性滤波慢),可能对弱纹理或渐变边缘处理不理想,参数调整(空间σ、值域σ)较敏感。
- 适用噪声: 高斯噪声(尤其重视保留边缘的场景)。
- 中值滤波:
- 优点: 在去除特定噪声的同时,比线性滤波更好地保护细节和边缘。
- 缺点: 计算复杂度通常高于线性滤波。
2. 频率域滤波 (转换到频率空间处理)
- 核心思想: 将图像通过傅里叶变换(FT)或离散余弦变换(DCT)转换到频率域,噪声通常表现为高频成分,衰减或抑制这些高频成分,再通过逆变换回到空间域。
- 常用方法:
- 理想低通滤波:
- 完全阻断高于某频率的所有频率成分。
- 缺点: 会产生严重的"振铃效应"(边缘附近的伪影)。
- 巴特沃斯低通滤波:
- 以更平缓的方式衰减高频成分,减少振铃效应。
- 高斯低通滤波:
- 在频率域使用高斯衰减函数,效果类似于空间域的高斯滤波。
- 理想低通滤波:
- 适用噪声:
- 特定范围的周期性噪声(频谱图上表现为集中的亮条纹或点)。
- 处理全局高频噪声。
- 优点: 对于处理特定频率的噪声(尤其是周期噪声)非常有效且直观。
- 缺点: 算法较复杂,会同时模糊图像中的所有高频细节(边缘、纹理),可能导致图像整体清晰度下降。对椒盐噪声效果差。
3. 非局部方法 (基于图像自相似性)
- 核心思想: 不仅仅利用中心像素周围的小邻域,而是在图像中搜索整个范围内结构相似的图块(patch),利用这些相似图块的信息对当前像素进行平均或加权平均。
- 代表方法:
- 非局部均值滤波:
- 在图像全局搜索与当前处理块相似的多个块,计算权重(相似度越高权重越大),然后进行加权平均。
- 作用: 能显著去除均匀区域的噪声同时尽量保留纹理信息,效果好于大多数局部滤波方法。
- 缺点: 计算量非常大(时间复杂度高),对大噪声或结构重复性差的图像效果受影响。参数(搜索窗口、相似块大小、衰减因子)调节复杂。
- 适用噪声: 高斯噪声、泊松噪声。
- 非局部均值滤波:
- 优点: 去噪能力强,保护纹理好。
- 缺点: 计算复杂度非常高。
4. 基于块的处理方法 (变分法、稀疏表示等)
- 核心思想: 认为自然图像在某种变换域(如小波域、DCT域、DCT变换、特定字典下)是稀疏的(大部分系数接近零),而噪声是稠密分布的。通过施加稀疏约束来恢复干净图像。
- 代表方法:
- BM3D (Block-Matching and 3D Filtering):
- 当前最流行的去噪算法之一(非深度学习领域)。
- 找到相似图块组成3D数组 → 对该3D组进行可逆线性变换(如3D DCT或小波)→ 对变换系数进行收缩(阈值衰减小系数,保留大系数)→ 逆变换得到处理后的图块 → 加权平均放回原位。
- 作用: 在高斯噪声去除上达到接近SOTA的性能(媲美很多深度学习方法)。
- 缺点: 计算量极大。
- 适用噪声: 高斯噪声。
- K-SVD 基于字典学习的方法:
- 通过学习自适应的字典来表示图像块,并通过稀疏编码去噪。
- 计算也很复杂。
- BM3D (Block-Matching and 3D Filtering):
- 优点: 去噪效果通常远优于传统空间域滤波(尤其是高斯噪声),能更好保留细节。
- 缺点: 算法复杂,计算成本高(尤其BM3D),参数调节复杂。
5.深度学习方法 (数据驱动)
- 核心思想: 利用大量带噪声/无噪声的成对图像训练深度神经网络(通常是CNN),网络自动学习从噪声图像到干净图像的映射。
- 代表方法 (架构):
- DnCNN: 简单有效的基于CNN的去噪网络。
- U-Net: 编解码结构,广泛用于图像处理任务。
- GAN-based: 生成对抗网络,可能产生更自然的结果。
- Transformer-based: 利用全局注意力机制,最近表现优异。
- 自监督方法: 如 Noise2Noise (不需干净图像)。
- 优点:
- 通常能达到当前最先进的去噪效果。
- 可以学习复杂的噪声模型(包括相机内处理的综合噪声)。
- 速度可能快于BM3D/非局部均值等方法(尤其是使用GPU时)。
- 缺点:
- 需要大量训练数据。
- 模型训练复杂,需要专业技能(调参、GPU资源)。
- 模型泛化能力可能是问题(在未见过的噪声类型或强度上效果可能不佳)。
- 作为"黑盒",对内部过程和去噪原理的解释性较弱。
- 适用噪声: 几乎所有类型(取决于训练数据),现代方法主要针对相机成像过程的综合真实噪声。
四、如何去噪?实践!试错!
- 通过对噪声的辨别来匹配最有效的算法
- 利用免费图像处理工具的自带去噪功能进行基础尝试
- 高斯噪声是最常见的默认类型。从处理高斯噪声的算法(如NLM, BM3D, 带适当参数的Bilateral)开始尝试
- 对噪声类型不太确定的话,可以从一些对噪声类型不那么敏感、且能处理多种噪声的算法开始尝试:
- 试试中值滤波:如果噪声(特别是孤立点)基本消失 -> 强暗示椒盐噪声。
- 试试高斯/NLM/双边:如果颗粒感明显减轻但模糊增加 -> 强暗示高斯/泊松噪声。
方法类别 | 经典代表 | 适用噪声 | 主要优点 | 主要缺点 |
---|---|---|---|---|
线性空间域 | 高斯滤波 | 高斯噪声 | 简单、快速 | 模糊边缘/细节 |
非线性空间域 | 中值滤波 | 椒盐噪声 | 对椒盐噪声效果极佳 | 可能损失细线结构 |
双边滤波 | 高斯噪声 | 较好保护强边缘 | 参数敏感,计算稍慢 | |
频率域滤波 | 巴特沃斯低通 | 周期性噪声 | 处理周期噪声最佳方法 | 模糊所有高频成分 |
非局部方法 | 非局部均值 (NLM) | 高斯、泊松噪声 | 效果优于局部滤波 | 计算量巨大 |
块处理 (传统SOTA) | BM3D | 高斯噪声 | 极高去噪质量(近深度学习) | 计算量极大 |
深度学习 | DnCNN, U-Net | 混合复杂真实噪声 | 当前最佳去噪能力 | 需训练数据,黑盒 |