我尝试用Python中的PIL和Numpy实现一些图像处理(查找颜色相似的区域)。不知道如何加速这段代码。你能帮忙吗?在
def findRegions(self, data):
#data is numpy.array
ret = [[False for _ in range(self.width)] for _ in range(self.heigth)]
for i in range(self.heigth):
for j in range(self.width):
k = 0
acc = 0
for x,y in [(-1,0),(0,-1),(0,1),(1,0)]:
if (self.heigth>i+x>=0 and self.width>j+y>=0):
k = k+1
acc += math.sqrt(sum((data[i][j][c]-data[i+x][j+y][c])**2 for c in range(3)))
if (acc/k<self.threshold):
ret[i][j]= True
return ret
PIL和其他图像库有很多过滤和处理功能,非常快速。但是实现自己的图像处理功能的最佳方法是什么?在
http://scikits-image.org中包含了更好的分割算法,但是如果您想构建自己的算法,可以看看这个基于集群的示例,称为ICM分段。指定N=4以标识四个区域。在
不必在每一行和每列上循环,您可以左、右、上、下移动数组以获得适当数量的元素。每次移位时,您都将值累积到基数组中。在移动和累积之后,你计算你的平均值并应用你的阈值返回一个掩码。请看这个post,它对这个主题进行了一般性的讨论。这个想法是利用numpy的广播功能,它将一个函数或运算符应用于C语言中数组的所有元素,而不是Python。在
我已经修改了链接帖子中的代码,以适应我相信你正在努力实现的目标。在任何情况下,总的模式应该会加快速度。你必须弄清楚如何处理返回遮罩中的边。这里我简单地将返回掩码设置为False,但是您也可以通过在每个方向上扩展输入数据一个像素并填充最近的像素、零、灰色等来消除边缘
相关问题 更多 >
编程相关推荐