Blockwise Non Local的伪代码表示降噪算法

Ter*_*mos 8 algorithm image-processing

我已经实现了一个很好的算法(" 非局部均值 ")来减少图像中的噪声.它基于它的Matlab实现.

NLMeans的问题是原始算法即使在像c/c ++这样的编译语言上也很慢,我试图使用脚本语言来运行它.

最好的解决方案之一是使用改进的Blockwise NLMeans算法,其速度提高约60-80倍.问题在于描述它的论文是用复杂的数学语言编写的,我很难理解一个想法并对其进行编程(是的,我没有在大学学习数学).

这就是为什么我拼命寻找这种算法的伪代码.

(原始Matlab实现的修改将是完美的)

sts*_*vik 7

我承认,直到我看到结果 - 双核心上260秒以上,并没有假设脚本语言的开销,并且这是针对优化块非局部均值过滤器的时候,我很感兴趣.

让我为你分解数学 - 我对伪代码的想法是用Ruby写的.

非本地方式过滤

假设一个200 x 100像素(总共20000像素)的图像,这是一个非常小的图像.我们将不得不经历20,000个像素并在其他19,999像素的加权平均值上评估每个像素:[对不起间距,但方程式被解释为没有它的链接]

NL [v](i)=Σw(i,j)v(j)[j∈I]

其中0≤W(I,J)≤1和Σ Ĵ瓦特(I,J)= 1

可以理解的是,这最后一部分可能有点令人困惑,但这实际上只不过是一个卷积滤波器,应用于每个像素的整个图像的大小.

逐块非本地方式过滤

块状实现采用重叠的体素集(体积像素 - 您指向我们的实现是针对3D空间).据推测,采用类似的方法,您可以将其应用于2D空间,采用多组重叠像素.让我们看看我们是否可以描述这个......

NL [v](i j k)= 1/| A i |Σw(i j k,i)v(i)

其中A是要估计的像素的矢量,并且应用了与上述类似的情况.

[注意:我可能会稍微离开; 我做了大量的图像处理已经有几年了]

算法

很有可能,我们正在谈论以最低成本降低算法的复杂性以降低质量.样本矢量越大,质量越高,复杂性越高.通过重叠然后对来自图像的样本矢量进行平均,然后将该加权平均值应用于每个像素,我们在图像中循环的次数要少得多.

  • 循环通过图像以收集样本向量并将其加权平均值存储到数组中.
  • 将每个加权平均值(0到1之间的数字)应用于每个像素乘以像素值.

非常简单,但处理时间会因较大的图像而变得可怕.

最后的想法

你将不得不做出一些艰难的决定.如果您要使用脚本语言,那么您已经在处理重要的解释开销.使用脚本语言进行重型图像处理远非最佳.如果您没有处理医学图像,那么很可能会有更好的算法用于较小的O.

希望这是有帮助的...我不是非常擅长清楚简洁地说明一点,所以如果我能澄清任何事情,请告诉我.