MATLAB ConnectedComponentLabeler 在 for 循环中不起作用



我正在尝试使用 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

但是,当我运行它时,我收到一个错误,指示标有 * 的行:

使用连接组件贴标器/步骤时出错

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

我不明白 MATLAB 在说什么,我对如何摆脱它一

无所知。

编辑

我已经回到bwlabel功能,现在没有任何问题。

这个错误有点难以理解,但我可以解释它到底是什么意思。 当您使用 CVST 连接组件标签器时,它假定您将与该功能一起使用的所有图像的大小都相同。 发生该错误是因为看起来图像不是...因此,关于"可变大小输入信号"的概念。

"Automatic"属性意味着图像的输出数据类型是自动的,这意味着你不必担心输出的数据类型是否为uint8uint16等。 如果要删除此错误,则需要手动设置此标记器生成的图像的输出数据类型,或将OutputDataType属性设置为静态。 希望您正在读取的目录中的图像都是相同的数据类型,因此请将此字段覆盖为此函数接受的数据类型。 可用的类型是 uint8uint16uint32 。 因此,假设您的图像是uint8例如,请在运行循环之前执行此操作:

ccl = vision.ConnectedComponentLabeler;
ccl.OutputDataType = 'uint8';

现在运行你的代码,它应该可以工作了。 请记住,需要logical输入才能使其具有任何有意义的输出。

次要评论

当图像处理工具箱bwlabel功能的工作方式完全相同时,为什么使用 CVST 连接的组件贴标机? 当您使用 regionprops 时,您可以访问图像处理工具箱,因此您应该可以使用它。 它使用起来要简单得多,不需要设置:http://www.mathworks.com/help/images/ref/bwlabel.html

相关内容

  • 没有找到相关文章

最新更新