我正在尝试获取一组二进制图像'使用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
功能,现在没有问题。
答案 0 :(得分:2)
错误有点难以理解,但我可以解释它究竟意味着什么。当您使用CVST Connected Components Labeller时,它假定您将使用功能的所有图像都具有相同的大小。发生这种错误是因为看起来图像不是......因此关于"可变尺寸输入信号的概念"。
" buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
" property表示图像的输出数据类型是自动的,这意味着您不必担心输出的数据类型是Automatic
,uint8
等。如果您需要要删除此错误,您需要手动设置此标签生成的图像的输出数据类型,或uint16
属性为静态。希望您正在阅读的目录中的图像都是相同的数据类型,因此将此字段覆盖为此函数接受的数据类型。可用的类型包括OutputDataType
,uint8
和uint16
。因此,假设您的图像为uint32
,请在运行循环之前执行此操作:
uint8
现在运行你的代码,它应该工作。请记住,输入需要ccl = vision.ConnectedComponentLabeler;
ccl.OutputDataType = 'uint8';
才能获得有意义的输出。
当图像处理工具箱logical
功能完全相同时,为什么使用CVST Connected Component Labeller?当您使用bwlabel
时,您可以访问图像处理工具箱,因此您可以使用此工具箱。它使用起来更简单,无需设置:http://www.mathworks.com/help/images/ref/bwlabel.html