Image MATLAB ConnectedComponentLabeler在for循环中不工作

Image MATLAB ConnectedComponentLabeler在for循环中不工作,image,matlab,image-processing,computer-vision,matlab-cvst,Image,Matlab,Image Processing,Computer Vision,Matlab Cvst,我正在尝试使用regionprops函数获取一组二进制图像的偏心率和稳健性值。我使用vision.ConnectedComponentLabeler函数获取标签矩阵 这是我目前掌握的代码: files = getFiles('images'); ecc = zeros(length(files)); %eccentricity values sol = zeros(length(files)); %solidity values ccl = vision.ConnectedComponentL

我正在尝试使用
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
但是,当我运行此命令时,会出现一个错误,指示标有*的行:

使用ConnectedComponentLabeler/step时出错

当OutputDataType属性设置为“自动”时,不支持可变大小的输入信号

我不明白MATLAB在说什么,也不知道如何摆脱它

编辑
我已经返回到
bwlabel
函数,现在没有问题。

错误有点难以理解,但我可以解释它的确切含义。当您使用CVST Connected Components Labeller时,它假定您将要使用函数的所有图像都是相同大小的。发生此错误的原因是图像看起来不是。。。因此产生了“可变大小输入信号”的概念

Automatic
”属性意味着图像的输出数据类型是自动的,这意味着您不必担心输出的数据类型是否为
uint8
uint16
,等等。如果要删除此错误,您需要手动设置此标签机生成的图像的输出数据类型,或者将
OutputDataType
属性设置为静态。希望您正在读取的目录中的图像都是相同的数据类型,因此重写此字段,使其成为此函数接受的数据类型。可用的类型有
uint8
uint16
uint32
。因此,例如,假设您的图像是
uint8
,请在运行循环之前执行以下操作:

ccl = vision.ConnectedComponentLabeler;
ccl.OutputDataType = 'uint8';
现在运行代码,它应该可以工作了。请记住,输入必须是
逻辑的
,才能有任何有意义的输出

次要评论
当图像处理工具箱
bwlabel
功能以完全相同的方式工作时,为什么要使用CVST连接组件标签机?当您使用
regionprops
时,您可以访问图像处理工具箱,因此应该可以使用该工具箱。它使用起来更简单,不需要设置:

另一个问题等待着您(: