在Python中实现任意图像算法时处理边界像素的有效方法

时间:2013-10-14 06:45:32

标签: python algorithm image-processing

图像处理算法通常需要在各个图像位置的邻域内的像素值。然而,边界点的邻域是不完整的,需要采用各种方法进行特殊处理,例如镜面反射,周期性等。

对于线性操作,一种有效的方法是将算法转换为内核并进行2D卷积。卷积程序通常具有内置的边界处理方法。

对于任意(非线性)算法,一种可能性是首先pad图像,一次收集所有邻域(例如,使用pad + neighbor),并执行以矢量化方式操作。但是,正如文档建议的那样,这可能会造成记忆沉重。

循环遍历像素并逐个处理边界是另一种方式。但是这在Python中可能很慢(虽然在C / C ++中可行),并且提供所有这些镜像/周期性的东西似乎很麻烦......

在Python中实现自己的算法时,如何有效地(也许是Pythonic)做到这一点?

是否有一些函数返回specified pixel的邻域,并使用指定的边界处理方法?

2 个答案:

答案 0 :(得分:2)

在图像处理过程中处理边界条件的最pythonic和有效方法是使用现有的库。在PIL和ImageMagick之上,我还建议OpenCV

Python本身并不提供任何图像处理功能,因此任何有关特定像素邻域的问题都是特定于库的。选择一个你喜欢的图书馆并玩弄它 - 如果你无法弄清楚图书馆如何处理边界条件,那就回来再问一遍。

答案 1 :(得分:1)

PIL是处理图像处理的最着名的库之一。您可能还想看一下ImageMagick,我认为它内置了许多很酷的图像转换功能。