2024-05-13 04:05:27 发布
网友
我有一个瓶颈在一个2D中值滤波器(3x3窗口)我使用了一个非常大的图像集,我想尝试和优化它。我测试了scipy.ndimage中值滤波器,以及PIL,scipy.signal和{}。然而,在浏览中我了解到在C中有一个快速的O(n)中值过滤器(在恒定时间内的中值过滤请参见Rolling median algorithm in C),我想知道是否可以使用scipy.weave.inline? 有没有其他路线的建议?在
scipy.ndimage
PIL
scipy.signal
我不知道底层的算法,但是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循环。。。在
我不知道底层的算法,但是scikits映像有一个rolling median filter。在
否则,我建议用Cython(C/Python-pidgin语言)编写它。请务必查看使用numpy数组的convolution example/tutorial。在
试试这个: Rolling median in C - Turlach implementation
http://ideone.com/8VVEa
用法:
我相信这和R算法是一样的,但更干净(事实上,令人惊讶的是)。在
你可以包装它,或者移植它并使用Numba(或Cython)。我想我会推荐Numba而不是Cython,因为它是一个普通的python代码。在
我建议将其添加到scikits中,如果它比scikits中的运行速度更快:)
如果你还感兴趣,我可以试试纽比的整形和中位数:
我不知道与你的testet方法相比,这是如何伸缩的,但是如果你想用C来优化,你可以在列表理解中固定for循环。。。在
相关问题 更多 >
编程相关推荐