我想在二维数组上应用 3x3 或更大的图像过滤器(高斯或中值)。
尽管有几种方法可以做到这一点,例如scipy.ndimage.gaussian_filter
或应用循环,但我想知道是否有一种方法可以mxn
同时在阵列的每个像素上应用 3x3 或更大的过滤器,因为它可以节省大量绕过循环的时间。可以为此目的使用函数式编程吗?
有一个模块叫scipy.ndimage.filters.convolve
,请告诉它是否能够执行同时操作。
您可能想了解 Python 中的并行处理:
http ://wiki.python.org/moin/ParallelProcessing
或multiprocessing
特别是包:http:
//docs.python.org/library/multiprocessing.html
在多处理器上使用 Python Imaging Library (PIL) 进行检查。 将多处理与 PIL 和类似问题一起使用。
您可以创建四个工人,将您的图像分成四个,并将每个象限分配给一个工人。但是,您可能会因为开销而浪费时间。另一方面,如果您有多个图像要处理,那么这种方法可能会起作用(让每个工作人员打开自己的图像)。
即使python确实提供了将操作应用于NxM数组而不循环它的功能,该操作仍然不会在后台同时执行,因为CPU每个周期可以处理的指令量是有限的,因此无法节省时间. 对于您的用例,这甚至可能会适得其反,因为您的数组中的字段可能具有依赖关系,如果您不知道访问它们的顺序,这很可能会一团糟。
Hugues 提供了一些有关 Python 中并行处理的有用链接,但在访问相同的数据结构(例如同时具有多个线程的数组)时要小心。如果您不同步线程,它们可能会同时访问数组的同一部分并将事情搞砸。
请注意,可以有效并行运行的线程数量受到处理器内核数量的限制。