使用scipy.weave.inline快速二维中值滤波

2024-05-13 04:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个瓶颈在一个2D中值滤波器(3x3窗口)我使用了一个非常大的图像集,我想尝试和优化它。我测试了scipy.ndimage中值滤波器,以及PILscipy.signal和{}。然而,在浏览中我了解到在C中有一个快速的O(n)中值过滤器(在恒定时间内的中值过滤请参见Rolling median algorithm in C),我想知道是否可以使用scipy.weave.inline? 有没有其他路线的建议?在


Tags: in图像过滤器signalpil时间inlinescipy
2条回答

我不知道底层的算法,但是scikits映像有一个rolling median filter。在

否则,我建议用Cython(C/Python-pidgin语言)编写它。请务必查看使用numpy数组的convolution example/tutorial。在

试试这个: Rolling median in C - Turlach implementation

http://ideone.com/8VVEa

用法:

Mediator* m = MediatorNew(9);
for (...)
{
      MediatorInsert(m, value);
      median = MediatorMedian(m);
}

我相信这和R算法是一样的,但更干净(事实上,令人惊讶的是)。在

你可以包装它,或者移植它并使用Numba(或Cython)。我想我会推荐Numba而不是Cython,因为它是一个普通的python代码。在

我建议将其添加到scikits中,如果它比scikits中的运行速度更快:)

如果你还感兴趣,我可以试试纽比的整形和中位数:

a= some big array
a.reshape(N,3,3) #N being specific to your array
[numpy.median(m) for m in a]

我不知道与你的testet方法相比,这是如何伸缩的,但是如果你想用C来优化,你可以在列表理解中固定for循环。。。在

相关问题 更多 >