Ter*_*mos 8 algorithm image-processing
我已经实现了一个很好的算法(" 非局部均值 ")来减少图像中的噪声.它基于它的Matlab实现.
NLMeans的问题是原始算法即使在像c/c ++这样的编译语言上也很慢,我试图使用脚本语言来运行它.
最好的解决方案之一是使用改进的Blockwise NLMeans算法,其速度提高约60-80倍.问题在于描述它的论文是用复杂的数学语言编写的,我很难理解一个想法并对其进行编程(是的,我没有在大学学习数学).
这就是为什么我拼命寻找这种算法的伪代码.
(原始Matlab实现的修改将是完美的)
我承认,直到我看到结果 - 双核心上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是要估计的像素的矢量,并且应用了与上述类似的情况.
[注意:我可能会稍微离开; 我做了大量的图像处理已经有几年了]
很有可能,我们正在谈论以最低成本降低算法的复杂性以降低质量.样本矢量越大,质量越高,复杂性越高.通过重叠然后对来自图像的样本矢量进行平均,然后将该加权平均值应用于每个像素,我们在图像中循环的次数要少得多.
非常简单,但处理时间会因较大的图像而变得可怕.
你将不得不做出一些艰难的决定.如果您要使用脚本语言,那么您已经在处理重要的解释开销.使用脚本语言进行重型图像处理远非最佳.如果您没有处理医学图像,那么很可能会有更好的算法用于较小的O.
希望这是有帮助的...我不是非常擅长清楚简洁地说明一点,所以如果我能澄清任何事情,请告诉我.