MATLAB ConnectedComponentLabeler不适用于for循环

时间:2015-06-13 22:59:39

标签: 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.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属性设置为' Automatic'时不支持可变大小的输入信号。'

我不明白MATLAB在谈论什么,我不知道如何摆脱它。

修改

我已返回bwlabel功能,现在没有问题。

1 个答案:

答案 0 :(得分:2)

错误有点难以理解,但我可以解释它究竟意味着什么。当您使用CVST Connected Components Labeller时,它假定您将使用功能的所有图像都具有相同的大小。发生这种错误是因为看起来图像不是......因此关于"可变尺寸输入信号的概念"。

" buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } " property表示图像的输出数据类型是自动的,这意味着您不必担心输出的数据类型是Automaticuint8等。如果您需要要删除此错误,您需要手动设置此标签生成的图像的输出数据类型,或uint16属性为静态。希望您正在阅读的目录中的图像都是相同的数据类型,因此将此字段覆盖为此函数接受的数据类型。可用的类型包括OutputDataTypeuint8uint16。因此,假设您的图像为uint32,请在运行循环之前执行此操作:

uint8

现在运行你的代码,它应该工作。请记住,输入需要ccl = vision.ConnectedComponentLabeler; ccl.OutputDataType = 'uint8'; 才能获得有意义的输出。

次要评论

当图像处理工具箱logical功能完全相同时,为什么使用CVST Connected Component Labeller?当您使用bwlabel时,您可以访问图像处理工具箱,因此您可以使用此工具箱。它使用起来更简单,无需设置:http://www.mathworks.com/help/images/ref/bwlabel.html