图像处理算法通常需要在各个图像位置的邻域内的像素值。然而,边界点的邻域是不完整的,需要采用各种方法进行特殊处理,例如镜面反射,周期性等。
对于线性操作,一种有效的方法是将算法转换为内核并进行2D卷积。卷积程序通常具有内置的边界处理方法。
对于任意(非线性)算法,一种可能性是首先pad图像,一次收集所有邻域(例如,使用pad + neighbor),并执行以矢量化方式操作。但是,正如文档建议的那样,这可能会造成记忆沉重。
循环遍历像素并逐个处理边界是另一种方式。但是这在Python中可能很慢(虽然在C / C ++中可行),并且提供所有这些镜像/周期性的东西似乎很麻烦......
在Python中实现自己的算法时,如何有效地(也许是Pythonic)做到这一点?
是否有一些函数返回specified pixel的邻域,并使用指定的边界处理方法?
答案 0 :(得分:2)
在图像处理过程中处理边界条件的最pythonic和有效方法是使用现有的库。在PIL和ImageMagick之上,我还建议OpenCV。
Python本身并不提供任何图像处理功能,因此任何有关特定像素邻域的问题都是特定于库的。选择一个你喜欢的图书馆并玩弄它 - 如果你无法弄清楚图书馆如何处理边界条件,那就回来再问一遍。
答案 1 :(得分:1)
PIL是处理图像处理的最着名的库之一。您可能还想看一下ImageMagick,我认为它内置了许多很酷的图像转换功能。