Skimage regionprops功能';s(面积,欧拉数)尺寸在Python中不正确
我有1797张Mnist图像,我需要提取两个特征(FilledArea、EulerNumber)。我知道如何在Matlab中实现它。我的特征矩阵在Matlab中的大小为1797*2(每个维度为1797),并且是正确的 matlab代码(工作正常) 我想在python中使用Skimage regionprops做同样的事情,但是对于1797个图像,我得到了29350*2个特性(每个特性有29350个道具),根据我的理解应该是1797*2 python代码(工作不正常)Skimage regionprops功能';s(面积,欧拉数)尺寸在Python中不正确,python,matlab,image-processing,computer-vision,scikit-image,Python,Matlab,Image Processing,Computer Vision,Scikit Image,我有1797张Mnist图像,我需要提取两个特征(FilledArea、EulerNumber)。我知道如何在Matlab中实现它。我的特征矩阵在Matlab中的大小为1797*2(每个维度为1797),并且是正确的 matlab代码(工作正常) 我想在python中使用Skimage regionprops做同样的事情,但是对于1797个图像,我得到了29350*2个特性(每个特性有29350个道具),根据我的理解应该是1797*2 python代码(工作不正常) 我的方法可能有什么问题?为什
我的方法可能有什么问题?为什么每个特性都有29350个元素而不是1797个元素?就像在Matlab中需要一个for循环来计算每个图像的属性一样,在Python中也需要一个for循环。目前,您正在计算单个形状的三维图像(1797,8,8)的属性,而不是1797个形状的二维图像(8,8)。以下是与您所追求的内容相当的Python代码:
features=[]
对于数字图像。图像:
labels=(图像>0).astype(int)#图像中只有一个对象
道具=区域道具(标签、图像)[0]#仅一个对象
特征.附加((props.euler\u编号,props.filled\u区域))
就像在Matlab中需要一个for循环来计算每个图像的属性一样,在Python中也需要一个for循环。目前,您正在计算单个形状的三维图像(1797,8,8)的属性,而不是1797个形状的二维图像(8,8)。以下是与您所追求的内容相当的Python代码:
features=[]
对于数字图像。图像:
labels=(图像>0).astype(int)#图像中只有一个对象
道具=区域道具(标签、图像)[0]#仅一个对象
特征.附加((props.euler\u编号,props.filled\u区域))
是数字。图像是二进制图像吗?如果它们是整数值,regionprops
可能会为每个不同的强度级别(它解释为标签)生成一个输出。@CrisLuengo,我是图像处理新手,我从这里加载了数据集“”我如何检查此项?链接提到“功能:整数0-16”,所以不是二进制的问题吗?你应该显示你的数据并查看它。这是图像处理的一个优点,它完全是可视化的!:)@CrisLuengo我现在加载了二进制图像,但1000个图像中有91856个是数字。图像二进制图像?如果它们是整数值,regionprops
可能会为每个不同的强度级别(它解释为标签)生成一个输出。@CrisLuengo,我是图像处理新手,我从这里加载了数据集“”我如何检查此项?链接提到“功能:整数0-16”,所以不是二进制的问题吗?你应该显示你的数据并查看它。这是图像处理的一个优点,它完全是可视化的!:)@CrisLuengo i现在加载了二进制图像,但1000张图像得到了91856张
for i = 1:2*N
img = regionprops(BW(:,:,i),'FilledArea', 'Solidity');
features(i, 1) = img.EulerNumber;
features(i, 2) = img.FilledArea;
clear img;
end
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