2012-10-19 70 views
0

我想在二維陣列上應用3x3或更大的圖像過濾器(高斯或中值)。Python:同時對二維陣列的每個像素執行操作

雖然有幾種方法可以做到這一點,例如scipy.ndimage.gaussian_filter或應用循環,但我想知道是否有辦法同時在一個mxn陣列的每個像素上應用3x3或更大的濾鏡,因爲它可以節省一個很多時間繞過循環。函數式編程可以用於這個目的嗎?

有一個叫做scipy.ndimage.filters.convolve的模塊,請告知它是否能夠執行同時操作。

+1

...您可以「同時」執行此操作的唯一方法是使用mxn獨立的處理器內核。你還建議如何在完全同一時間處理所有這些指令?也許我不理解你的問題。 –

回答

2

您可能想了解並行處理的Python:特別 http://wiki.python.org/moin/ParallelProcessingmultiprocessing包: http://docs.python.org/library/multiprocessing.html

退房多處理器上使用Python圖像庫(PIL)。 Using multiprocessing with the PIL 和類似的問題。

您可以創建四名工人,將圖像分成四份,並將每個象限分配給工人。但是,您可能會失去時間。另一方面,如果你有幾個圖像需要處理,那麼這種方法可能會有效(讓每個工人打開自己的圖像)。

1

即使python確實提供了將操作應用於NxM數組而不循環的功能,但操作仍不會在後臺同時執行,因爲CPU每週期可處理的指令數量是有限的,因此無時間可以節省。對於你的用例,這可能甚至會適得其反,因爲你的數組中的字段可能具有依賴性,如果你不知道它們按什麼順序訪問,這很可能最終會變成一團糟。

Hugues提供了一些有關Python中並行處理的有用鏈接,但在訪問同一數據結構(如同時具有多個線程的數組)時要小心。如果你不同步線程,他們可能會同時訪問數組的相同部分,並搞砸了。
並且請注意,可以並行有效運行的線程數量受處理器內核數量的限制。