帮助我了解 BM3D 算法的聚合方案

信息处理 图像处理 小波
2022-02-12 07:11:48

BM3D 在图像去噪中被认为是最先进的。我正在尝试在 Matlab 中实现该算法。现在,我已经完成了第一步中的 3D 小波变换,准确地说,是上述论文中的方程 3。我现在要做的是在 3D 域中对我的去噪补丁执行等式 5。有人可以稍微解释一下等式5,聚合方案吗?

1个回答

BM3D 直觉

BM3D 背后的直觉与其他非局部算法相同:图像是由许多称为补丁的、自我重复的小图像元素并置而成的。因此,当查看足够小的块时,有可能找到足够多的相似块,这些块可以组合在一起并去噪。

不同的非局部算法在用于组合这些相似补丁的方式上是不同的。BM3D 依赖于稀疏性这个原理现在已经被广泛接受,并且基本上表明对于许多有用的信号(包括图像),至少存在一个帧,该信号可以被分解为少量有意义的分量。

对于图像,DCT 和小波基是稀疏帧的明显候选者:JPEG/JPEG2k 压缩依赖于将输入图像转换为 8×8 块,然后保留最强的系数,这确实是一种稀疏变换。

当噪声添加到信号中时,其频率会混合或添加到无噪声信号的频率中。例如,白噪声将非零值添加到整个频谱。因此,找到噪声信号的稀疏近似(当然是在良好的基础上)通常会产生良好的去噪性能。

BM3D 力学

BM3D的3D变换实际上是2D+1变换。

从算法上讲,这就是发生的事情(我将在之后描述数学直觉):

  1. 制作一堆类似的补丁。堆栈的所有补丁都应该是相同理想(无噪声)补丁的小变体。变体术语很重要,稍后您会看到原因;
  2. 沿水平轴之一进行一维变换(DCT / 小波);
  3. 沿另一个进行一维变换(DCT / 小波)。你现在拥有的是一堆转换的补丁;
  4. 现在,沿垂直轴进行选择变换(DCT/小波/维纳滤波)。您在这里所做的是对垂直列中的每个点进行变换(DCT / 小波)或直接计算去噪值(维纳滤波);
  5. (可选)如果您使用 DCT / 小波变换,应用稀疏变换,通常是硬阈值。
  6. 然后,通过反转不同的变换(以相反的顺序)计算去噪块;
  7. 现在,将结果反向投影到原始补丁位置。当您对整个图像进行降噪时,补丁可以(并且将会)重叠。这提出了一个重要的实际问题:您如何融合重叠区域的结果?哪个去噪补丁最可靠?BM3D 使用方程式。5通过加权平均来融合结果:反投影补丁的权重与补丁堆栈中的方差成反比。当堆栈的方差很高时,这意味着补丁并不是真正来自同一个理想的,因此结果被标记为不太可靠。

在数学上,直觉是大多数补丁应该在一些好的域中是稀疏的(通常是 DCT 域8×8补丁)。BM3D 还假设堆栈中的补丁是同一补丁的变体,因此这些转换补丁与理想补丁(在转换域中)之间的变化也应该是稀疏的。该假设由第三次变换和硬阈值步骤强制执行。