BM3D 图像去噪算法实现所需的帮助

信息处理 图像处理
2022-02-14 09:25:14

这就是我正在做的事情,并将感谢任何帮助。

  1. 我从搜索块中选择了 16 个与参考块相似的块,将它们放入 3D 数组中,对它们进行小波阈值化,进行逆变换。

  2. 这 16 个相似块属于一个 32 * 32 的搜索块,如上所述。

  3. 现在我应该将这些块中的每一个与它们的权重相乘,然后将它们全部相加,从 3D 数组创建一个 2D 数组。

  4. 然后,这个新块替换了我之前为硬阈值选择的所有 16 个原始块。

我在这里正确吗?我将非常感谢您的回复。

1个回答

步骤 3 不正确。第一部分是可以的(每个去噪结果都由正确的可能性加权,这是先前从数据的方差中获得的),但您不必将它们相加。3D 阵列中的每个切片都是一个 2D 补丁,它被反向投影到结果图像。

当最终图像域中有 2 个反向投影的补丁重叠时,就会发生总和。

关于反投影

反投影是从去噪堆栈中取出 2D 切片并将其放回图像空间的过程。这是必需的,因为与 NL-means 的大多数变体不同,BM3D 对补丁进行降噪,而不是对补丁的中心像素进行降噪。

因此,在实现 BM3D 时,您有 2 个图像:

  • 原始(嘈杂)的一个;
  • 结果(去噪)图像。

去噪过程中不能改变patch的空间位置,否则会破坏图像内容。因此,去噪补丁堆栈中的每个切片都会回到其原始位置。

现在,一个问题仍然存在:当反向投影的补丁重叠时该怎么办?我们应该为单个像素保留什么值?BM3D 选择的解决方案是每个像素包含在每个像素中重叠的块的加权平均值。

为了实现这一点,您可以简单地将去噪堆栈的每个切片与其权重相乘,添加第三张图像以存储每个像素内的权重总和,将每个像素的值与包含它的所有去噪块的值相加,并在最后一步(一旦处理完所有补丁堆栈)将结果图像除以权重图像。

图像处理主循环(大纲)

最终结果中没有“未留下”的像素。主循环的概要如下:

  1. 对于图像的每个像素,形成一个参考补丁;
  2. 对于给定的参考补丁,找到与参考补丁的距离小于某个阈值的 n <= N(在您的情况下为 B=16)补丁并制作堆栈;
  3. 去噪堆栈;
  4. 反向投影去噪堆栈中的补丁;
  5. 回到 1) 下一个像素)。

因此,对于给定的补丁,您总是有一个堆栈(退化的情况:堆栈中只有 1 个补丁),并且一个像素始终涉及多个补丁。