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
时,您可以访问图像处理工具箱,因此应该可以使用该工具箱。它使用起来更简单,不需要设置:另一个问题等待着您(: