在Python中Skimage regionprops特性的(面积、eulerï数)尺寸不正确

2024-06-07 09:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有1797个Mnist图像,为此我需要提取两个特征(filledrea,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

我想在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?你知道吗


Tags: 代码图像imgfor特征特性labelfeatures
1条回答
网友
1楼 · 发布于 2024-06-07 09:18:43

就像在Matlab中需要一个for循环来计算每个图像的属性一样,在Python中也需要一个for循环。目前,您正在计算单个3D形状图像(1797,8,8)的属性,而不是1797个2D形状图像(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))

相关问题 更多 >

    热门问题