我有1797个Mnist图像,需要为其提取两个特征(FilledArea,EulerNumber)。我知道如何在Matlab中做到这一点。我的特征矩阵在Matlab中具有(并且是正确的)1797 * 2的大小(每个维度为1797)
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
我想用Skimage regionprops在python中做同样的事情,但是对于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中也需要一个for循环来执行相同的操作。当前,您正在计算形状为(1797、8、8)的单个3D图像的属性,而不是形状为(8、8)的1797 2D图像的属性。这是您所需要的等效的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))