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))
我有 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))