[英]Using scipy.weave.inline for fast 2D median filtering
我在用于大量图像的2D中值滤镜(3x3窗口)中有一个瓶颈,我想尝试对其进行优化。 我已经测试了scipy.ndimage
过滤器以及PIL
, scipy.signal
和scikits-image
。 但是,在SO中浏览时,我了解到C中有一个快速的O(n)中值过滤器(恒定时间中值过滤,请参阅C中的滚动中值算法 ),我想知道是否可以使用scipy在Python中实现它。 weave.inline吗? 关于替代路线有什么建议吗?
试试这个: 在C中滚动中位数-Turlach实现
用法:
Mediator* m = MediatorNew(9);
for (...)
{
MediatorInsert(m, value);
median = MediatorMedian(m);
}
我相信这与R算法相同,但更加简洁(实际上令人惊奇的是)。
您可以将其包装或移植并使用Numba(或Cython)。 我想我推荐Numba胜过Cython,如果没有别的,因为它是纯朴的python代码。
我建议将其添加到scikits中,如果它比scikits中的运行速度快:)
如果您仍然感兴趣,我会尝试numpy的重塑和中位数:
a= some big array
a.reshape(N,3,3) #N being specific to your array
[numpy.median(m) for m in a]
我不知道它与您的睾丸方法相比如何扩展,但是如果您想使用C进行优化,则可以在列表理解中固定for循环...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.