圖像處理算法通常需要各個圖像位置的鄰域內的像素值。但是,邊界點的鄰域不完整,需要使用各種方法進行特殊處理,例如鏡像反射,週期性等。在Python中實現任意圖像算法時處理邊界像素的有效方法
對於線性運算,有效的方法是將算法轉換爲內核並進行二維卷積。卷積程序通常有內置的邊界處理方法。
任意(非線性)算法,一種可能性是pad圖像首先,收集所有的街區一次(例如,pad + neighbor),並做你的以矢量化的方式操作。但是,這可能會像文檔所建議的那樣令人記憶沉重。
循環遍歷像素和處理邊界的情況是另一種方式。但在Python中這可能會很慢(儘管在C/C++中是可行的),並且提供所有這些鏡像/週期性的東西似乎很麻煩......
如何在執行您自己的操作時有效地(也許是Pythonic)在Python中的算法?
是否有一些函數返回specified pixel的鄰域,並指定邊界處理方法?
我完全同意這一點。只需添加一個註釋 - 如果你真的想自己做一些事情,你可以使用[numpy](http://www.numpy.org/),這是OpenCV for python的基礎,也是它的先決條件。在進行數組操作和處理時,它幾乎和C一樣快。 – KobeJohn
我只是想知道當人們試圖在Python中實現基於像素的鄰域算法時,關於邊界處理的一般策略是什麼。該算法可能無法在現有庫中直接使用。我知道numpy,scipy,PIL,以及opencv和ImageMagick的Python綁定。但通常情況下,相關的實現不是用Python編寫的。我發現一個鼓舞人心的軟件包是在問題中鏈接的scikit-image。 – herrlich10
您已經有了正確的想法:常用策略是複製圖像的某些部分,或者包含條件邏輯來處理邊界條件。他們都有缺點(內存使用,效率),但如果你真的擔心這樣的事情,那麼你可能不應該首先在Python中實現它(即使用現有的圖像處理庫)。 – misha