快速计算二进制numpy数组的质心

5
我有一个由0和1组成的numpy数组(512 x 512)。 我想计算1的形状(它们都连接在数组中间的一个圆形斑点)的质心
for i in xrange(len(array[:,0])):
    for j in xrange(len(array[0,:])):
        if array[i,j] == 1:
            x_center += i
            y_center += j

count = (aorta == 1).sum()
x_center /= count
y_center /= count

有没有一种方法可以加快上述计算速度?我能使用numpy.where()或其他什么吗?有没有用于并行处理的python函数?


你也可以使用 np.count_nonzero() 代替计数变量。 - Aelius
3个回答

11

您可以替换这两个嵌套循环以获取中心点的坐标,就像这样 -

x_center, y_center = np.argwhere(array==1).sum(0)/count

2
假设数组是一张图片,它的y_center和x_center相反。也可以使用np.argwhere(.).mean()。 - Yuri Feldman

2

0
import numpy as np 

x_c = 0
y_c = 0

area = array.sum()
it = np.nditer(array, flags=['multi_index'])

for i in it:
    x_c = i * it.multi_index[1] + x_c
    y_c = i * it.multi_index[0] + y_c

centroid = int(x_c/area), int(y_c/area)

使用numpy.nditer()应该是二进制图像的中心点


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接