【问题标题】:MATLAB ConnectedComponentLabeler does not work in for loopMATLAB ConnectedComponentLabeler 在 for 循环中不起作用
【发布时间】:2015-06-13 22:59:39
【问题描述】:

我正在尝试使用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函数,现在没有问题了。

【问题讨论】:

    标签: image matlab image-processing computer-vision matlab-cvst


    【解决方案1】:

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

    Automatic”属性表示图像的输出数据类型是自动的,也就是说你不必担心输出的数据类型是uint8uint16等。如果要消除此错误,则需要手动设置此贴标机生成的图像的输出数据类型,或者将OutputDataType 属性设置为静态。希望您正在阅读的目录中的图像都是相同的数据类型,因此请将此字段覆盖为该函数接受的数据类型。可用类型为uint8uint16uint32。因此,假设您的图像是 uint8,例如,在运行循环之前执行此操作:

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

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

    小评论

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2013-12-31
    • 2017-01-14
    • 2011-07-21
    相关资源
    最近更新 更多