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

Quickly calculating centroid of binary numpy array

我有一个 0 和 1 的 numpy 数组 (512 x 512)。我想计算 1 形状的 centroid(它们都连接在数组中间的一个圆形斑点中)。

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 函数可以并行执行此操作?

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

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

您也可以使用 scipy.ndimage.measurements.center_of_mass.

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()

的二值图像的质心