我正在尝试使用 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
"属性意味着图像的输出数据类型是自动的,这意味着你不必担心输出的数据类型是否为uint8
、uint16
等。 如果要删除此错误,则需要手动设置此标记器生成的图像的输出数据类型,或将OutputDataType
属性设置为静态。 希望您正在读取的目录中的图像都是相同的数据类型,因此请将此字段覆盖为此函数接受的数据类型。 可用的类型是 uint8
、 uint16
和 uint32
。 因此,假设您的图像是uint8
例如,请在运行循环之前执行此操作:
ccl = vision.ConnectedComponentLabeler;
ccl.OutputDataType = 'uint8';
现在运行你的代码,它应该可以工作了。 请记住,需要logical
输入才能使其具有任何有意义的输出。
次要评论
当图像处理工具箱bwlabel
功能的工作方式完全相同时,为什么使用 CVST 连接的组件贴标机? 当您使用 regionprops
时,您可以访问图像处理工具箱,因此您应该可以使用它。 它使用起来要简单得多,不需要设置:http://www.mathworks.com/help/images/ref/bwlabel.html