图像降噪

老实讲,最近的心态不是特别好,有些焦虑和浮躁吧,但是怎么说呢,归根到底还是要慢慢努力,变强才是硬道理,机会你抓不住自然就会错过,但是只要我们一直努力,总还是能到下一个机会的。种一棵树,最好的是十年前,其次就是现在了,努力吧!

以上都是个人的废话,还是好好讲降噪的事情吧,因为在做电镜图像的内容,而电镜图像最突出的问题就在于:为了避免高能电子束对样品的辐照损伤,只能采用低剂量的电子束进行拍摄,而由此导致了极低的信噪比,而这极低的信噪比和目标的极高分辨率之间就是第一个矛盾,为此,可以通过大量的投影的进行复原,也就是单颗粒技术的核心思想。而如果我们能够进行高效的降噪,那么一切是不是就简单了很多呢?所以降噪还是蛮值得去探索的,这篇就是记录一些降噪有意思的内容和方向,因为是记录的个人思考过程,写的不是很专业,但是思路来源都记载了,推荐阅读原文。

降噪问题

本质上来讲就是 y(t)=x(t)+e(y),我们观测到的y,是真值x与噪声带来的e一起组成的,我们的目的就是如果从观测到的y中剥离e,从而恢复出x

噪声模型

高斯噪声

为了去除噪声,我们需要尽可能地挖掘出x的一些信息,帮助我们去恢复它,如形态信息等约束,另一方面,我们则要去找到噪声的信息,比如噪声的模型与分析,比如噪声呈现某种分布。

在很多降噪的探索中,一般会假设噪声是呈高斯分布的,这个在冷冻电镜图像的研究过程中也是,一直以来都是以观察图像去拟合高斯分布以找到噪声的分布,而后期逐渐引入了与频率相关的噪声,从而更好地描述实际受到CTF调制影响的噪声

高斯噪声,一般假设该噪声与x无关,也就是他是随机从高斯分布中采样的,那么为什么都采用高斯分布呢,有为什么是work的呢?

其实我最早的浅显想法是比较符合实际的设想,比如噪声符合一个标准正态分布,就是有可能这个点比真值亮一点或者暗一点,而如果整体的拍摄环境比较亮,那就是分布的均值往正值移一些(μ变大),而如果随机亮暗的程度波动比较大,那就是分布的方差变大一些(σ变大),与图像本身的真值无关且完全随机;而且还有一个好处是,其模型参数就μ和σ,还是比较好去找的,所以其简单比较靠谱的特性得到了广泛青睐。

比较有趣的解读还有,

为什么深度学习去噪都采用高斯白噪声? - Bihan Wen的回答 - 知乎 https://www.zhihu.com/question/67938028/answer/259014596
——总结一下:

  • 说明了对图像进行生成噪声污染的原因:对降噪问题的分析/算法的设计:降噪的本质是对数据本身的重建,以起到排除污染(corruption)的作用。这里面涉及到需要对(1)数据,(2)污染(噪音)的模型和分析。所以,也需要在降噪过程后,对效果进行评估,常见的metric有Peak Signal-to-Noise Ratio (PSNR),Mean Square Error(MSE),Structured Similarity(SSIM),(详情看下面一章),所以用合成噪声能够比较方便地分析处理完的噪声和我们添加的生成噪声。
  • 为什么用高斯呢?噪声来自多个情况,是多个独立随机变量的复合影响,根据中心极限定理,他们的normalized sum随着噪声源数量的提升趋近于一个高斯分布(中心极限定理说明,大量相互独立的随机变量,其均值的分布以正态分布为极限)
  • 能work吗,在实际情况中?这很好理解了,你要是有更合适的,肯定去找更fit的呀,但是高斯噪声还是比较符合情况的,而且deep learning在降噪的中特性,由于其模型本身是高度data-driven的,并不是rule-based的,深度学习算法的设计,或者说网络结构的设计,并不强烈依赖于噪音的概率分布。这对于降噪算法的generalization是很好的。

高斯噪声是最糟糕的噪声呢!

为什么深度学习去噪都采用高斯白噪声? - 李青云的回答 - 知乎 https://www.zhihu.com/question/67938028/answer/260490087

为什么深度学习去噪都采用高斯白噪声? - Hikaru的回答 - 知乎 https://www.zhihu.com/question/67938028/answer/260974112

香农信息论中用熵表示信息的不确定程度。根据限功率最大熵定理:如果平均功率受限,那么当信源符合高斯分布时,信源的熵最大(噪声的不确定性最大,对信源的干扰最大)。即如果假定功率受限,高斯白噪声是最干扰信息的噪声。

总之一句话,要有更好的,谁用高斯啊,但要是没有更好的,他都在那里等着你,不悲不喜,等着去fit你的data,妈耶,老实人高斯。

图像质量评价指标

MSE 均方误差

给定一个大小为 m×n 的干净图像 I 和噪声图像 K,均方误差 (MSE) 定义为:

PSNR(dB) 峰值信噪比

其中 MAX2IMAXI2 为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由 BB 位二进制来表示,那么 MAXI=2B−1MAXI=2B−1。

一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据,最大像素值为 1。

上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR

其中,第二和第三种方法比较常见。

1
2
3
4
5
6
7
8
9
# im1 和 im2 都为灰度图像,uint8 类型

# method 1
diff = im1 - im2
mse = np.mean(np.square(diff))
psnr = 10 * np.log10(255 * 255 / mse)

# method 2
psnr = skimage.measure.compare_psnr(im1, im2, 255)

compare_psnr(im_true, im_test, data_range=None) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指标称为 MPSNR。

SSIM (Structural SIMilarity) 结构相似性

SSIM 公式基于样本 x 和 y 之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。

一般取 c3=c2/2。

  • μx为 x 的均值

  • μy 为 y 的均值

  • σx2 为 x 的方差

  • σy2 为 y 的方差

  • σxy 为 x 和 y 的协方差

  • c1=(k1L)2,c2=(k2L)2 为两个常数,避免除零

  • L 为像素值的范围,2B−1

  • k1=0.01,k2=0.03为默认值

将 α,β,γ设为 1,可以得到

每次计算的时候都从图片上取一个 N×NN×N 的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。

1
2
# im1 和 im2 都为灰度图像,uint8 类型
ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)

compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。

参考blog:图像质量评价指标之 PSNR 和 SSIM

降噪方法

传统的肯定就是各类滤波,是通信/信号处理中的老大哥了,比如中值滤波、均值滤波等方式去平滑图像等

较新的就是类似自动编码器的深度学习方式,通过噪声图像与真实图像的图像对模型进行训练,学习如何去噪,而后进行降噪

而有一位老师总结的很好,不仅有上面我理解的两类,其实还有更多方法:可复现的图像降噪算法总结 - Bihan Wen的文章 - 知乎 https://zhuanlan.zhihu.com/p/32502816

  1. 滤波类:这个好理解,传统方法了,需要注意的是,很多卷积操作可以在傅里叶空间中做,同时在电镜图像中存在频率相关的噪声,在傅里叶空间中处理也具有优势,但是滤波,是人为设计的,不论是滤波的类型和参数,都需要自行定义
  2. 稀疏表达(Sparse representation):数据存在稀疏表达,查了半天,其实就是类似PCA、CA降维提取出eigen image然后进行线性组合
  3. 聚类低秩(Low-rankness):看起来和稀疏表达很像,但是“数学上,可稀疏表达的数据可以被认为是在Union of low-dimensional subspaces;而低秩数据则是直接存在于一个Low-dimensional subspace”,就一语道破区别了,其实聚类低秩应该就是流形学习的想法,不是找到eigen images去组合表示,而且直接找到低维流形去表征
  4. 外部先验(External prior):通过纯净图像去发掘图片的内在属性,这一类方法利用的外部图片来创造先验条件,然后用于约束需要预测的图片。最有代表性的工作,就是混合高斯模型(Gaussian Mixture Model)。严格来说,基于深度学习的算法也可以归于这个类。
  5. 深度学习(Deep Learning):上一方法的延伸,通过深度学习提取复杂特征的能力,更好地确定约束和提取

深度学习降噪:

有意思的工作

未完待续

0%