使用numpy对二值化图像进行迭代很慢

时间:2012-12-08 13:31:02

标签: python image-processing numpy

我需要迭代二值化图像中的所有像素来查找形状。但是以这种方式迭代每个图像像素需要很长时间。有没有其他方法可以更快的方式迭代图像像素?

dimension = im.shape
rows = dimension[0]
cols = dimension[1]
for i in range(0,rows):
    for j in range(0,cols):
        doSomeOperation(im[i,j])

2 个答案:

答案 0 :(得分:1)

一般来说,doSomeOperation所做的事情定义了它可以加速的程度。

如果提到寻找形状的兴趣实际上意味着找到连接的组件,那么加速解决方案的一种简单方法是使用ndimage.label后面的ndimage.find_objects {{3}}包。

答案 1 :(得分:1)

正如rubik的评论所说,与矢量化函数的工作速度相比,python循环速度较慢。使用矢量化函数,您可以定义一个适用于单个元素的函数(如果您进入更复杂的矢量函数,有时会更多)并返回单个值。常见的矢量化函数已经定义为加法和乘法。

例如

arr = numpy.arange(10)
arr = arr * numpy.arange(10, 20) 
# times all elements arr by the respective element in other array 
arr = arr + 1 
# add 1 to all elements

@numpy.vectorize
def threshold(element):
    if element < 20:
        return 0
    else:
        return element

# @ notation is the same as 
# threshold = numpy.vectorize(threshold)

arr = threshold(arr)
# sets all elements less than 20 to 0

但是,因为您正在尝试寻找形状,所以您可能需要说明您正在查看的像素区域。因此,可能有更好的方法来尝试找到您正在寻找的东西。