MATLAB ConnectedComponentLabeler 在 for 循环中不起作用
MATLAB ConnectedComponentLabeler does not work in for loop
我正在尝试使用 regionprops
函数获取一组二进制图像的偏心率和坚固性值。我使用 vision.ConnectedComponentLabeler
函数获得标签矩阵。
这是我目前的代码:
files = getFiles('images');
ecc = zeros(length(files)); %eccentricity values
sol = zeros(length(files)); %solidity values
ccl = vision.ConnectedComponentLabeler;
for i=1:length(files)
I = imread(files{i});
[L NUM] = step(ccl, I);
for j=1:NUM
L = changem(L==j, 1, j); %*
end
stats = regionprops(L, 'all');
ecc(i) = stats.Eccentricity;
sol(i) = stats.Solidity;
end
但是,当我 运行 这样做时,我收到一条错误消息,指出标有 *:
的行
Error using ConnectedComponentLabeler/step
Variable-size input signals are not supported when the OutputDataType property is set to 'Automatic'.'
我不明白 MATLAB 在说什么,也不知道如何摆脱它。
编辑
我已经返回 bwlabel
功能,现在没有问题了。
这个错误有点难以理解,但我可以解释它的确切含义。当您使用 CVST Connected Components Labeller 时,它假定您将要与函数 一起使用的所有图像都具有相同的大小 。发生该错误是因为看起来图像不是......因此关于 "Variable-size input signals".
的概念
“Automatic
” 属性表示图片输出的数据类型是自动的,也就是说你不用担心输出的数据类型是不是uint8
, uint16
, etc. 如果你想去掉这个错误,你需要手动设置这个labeller产生的图像的输出数据类型,或者OutputDataType
属性 到是静态的。希望您正在阅读的目录中的图像都是相同的数据类型,因此将此字段覆盖为此函数接受的数据类型。可用类型为 uint8
、uint16
和 uint32
。因此,假设您的图像是 uint8
,例如,在您 运行 循环之前执行此操作:
ccl = vision.ConnectedComponentLabeler;
ccl.OutputDataType = 'uint8';
现在 运行 您的代码,它应该可以工作了。请记住,输入 需要 logical
才能产生任何有意义的输出。
小评论
当图像处理工具箱 bwlabel
功能以完全相同的方式工作时,为什么要使用 CVST Connected Component Labeller?当您使用 regionprops
时,您可以访问图像处理工具箱,因此您应该可以使用它。它使用起来更简单,不需要设置:http://www.mathworks.com/help/images/ref/bwlabel.html
我正在尝试使用 regionprops
函数获取一组二进制图像的偏心率和坚固性值。我使用 vision.ConnectedComponentLabeler
函数获得标签矩阵。
这是我目前的代码:
files = getFiles('images');
ecc = zeros(length(files)); %eccentricity values
sol = zeros(length(files)); %solidity values
ccl = vision.ConnectedComponentLabeler;
for i=1:length(files)
I = imread(files{i});
[L NUM] = step(ccl, I);
for j=1:NUM
L = changem(L==j, 1, j); %*
end
stats = regionprops(L, 'all');
ecc(i) = stats.Eccentricity;
sol(i) = stats.Solidity;
end
但是,当我 运行 这样做时,我收到一条错误消息,指出标有 *:
的行Error using ConnectedComponentLabeler/step
Variable-size input signals are not supported when the OutputDataType property is set to 'Automatic'.'
我不明白 MATLAB 在说什么,也不知道如何摆脱它。
编辑
我已经返回 bwlabel
功能,现在没有问题了。
这个错误有点难以理解,但我可以解释它的确切含义。当您使用 CVST Connected Components Labeller 时,它假定您将要与函数 一起使用的所有图像都具有相同的大小 。发生该错误是因为看起来图像不是......因此关于 "Variable-size input signals".
的概念“Automatic
” 属性表示图片输出的数据类型是自动的,也就是说你不用担心输出的数据类型是不是uint8
, uint16
, etc. 如果你想去掉这个错误,你需要手动设置这个labeller产生的图像的输出数据类型,或者OutputDataType
属性 到是静态的。希望您正在阅读的目录中的图像都是相同的数据类型,因此将此字段覆盖为此函数接受的数据类型。可用类型为 uint8
、uint16
和 uint32
。因此,假设您的图像是 uint8
,例如,在您 运行 循环之前执行此操作:
ccl = vision.ConnectedComponentLabeler;
ccl.OutputDataType = 'uint8';
现在 运行 您的代码,它应该可以工作了。请记住,输入 需要 logical
才能产生任何有意义的输出。
小评论
当图像处理工具箱 bwlabel
功能以完全相同的方式工作时,为什么要使用 CVST Connected Component Labeller?当您使用 regionprops
时,您可以访问图像处理工具箱,因此您应该可以使用它。它使用起来更简单,不需要设置:http://www.mathworks.com/help/images/ref/bwlabel.html