Skimage regionprops 特征的(面积,euler_number)尺寸在 Python 中不正确

Skimage regionprops feature's(area,euler_number) dimensions not correct in Python

我有 1797 张 Mnist 图像,为此我需要提取两个特征(FilledArea、EulerNumber)。我知道如何在 Matlab 中做到这一点。我的特征矩阵具有(并且是正确的)大小 1797*2(每个维度 1797)在 Matlab

matlab 代码(工作正常)

for i = 1:2*N
    img = regionprops(BW(:,:,i),'FilledArea', 'Solidity');
    features(i, 1) = img.EulerNumber;
    features(i, 2) = img.FilledArea;
    clear img;
end

我想在 python 中使用 Skimage regionprops 做同样的事情,但是对于 1797 张图像,我得到 29350*2 个特征(每个特征有 29350 个属性),根据我的理解应该是 1797* 2

python 的代码(无法正常工作)

digits = datasets.load_digits()
label_img = digits.images
rps = regionprops(label_img, cache=False)
print(len([r.area for r in rps]))  #29350
print(len([r.euler_number for r in rps]))  #29350

我的方法可能有什么问题?为什么每个功能都有 29350 个元素而不是 1797 个元素?

就像您在 Matlab 中需要一个 for 循环来计算每个图像的属性一样,您在 Python 中也需要一个循环来执行相同的操作。目前,您计算的是单个 3D 形状 (1797, 8, 8) 图像的属性,而不是 1797 个形状 (8, 8) 的二维图像。这是您所追求的有点等价的 Python 代码:

features = []
for image in digits.images:
    labels = (image > 0).astype(int)  # only one object in the image
    props = regionprops(labels, image)[0]  # only one object
    features.append((props.euler_number, props.filled_area))