我必须将我的 Matlab 函数转换为独立的应用程序。我使用 Matlab 构建工具构建它,那部分没问题。但是,我在运行我的独立程序时遇到了一个可怕的错误,即使它在 Matlab 中工作得很好;这里的代码似乎是错误的:
% INITIALISATIONS
% find connected components
cc = bwconncomp(bw);
% find areas and centroids
stats = regionprops(cc, 'Area','Centroid');
% keep only the particles in the right dimensions
all_areas = cat(1, stats(:).Area);
idx = zeros(size(all_areas));
fprintf('\nSize all_areas : %d %d \n',size(all_areas,1), size(all_areas,2));
fprintf('\nSize idx : %d %d \n',size(idx,1), size(idx,2));
fprintf('\nProgram paused. Press enter to continue.\n');
pause;
idx = all_areas > minArea & all_areas < maxArea;
错误显示在上述代码的最后一行。我得到:
??? Error using lt
Matrix dimensions must agree.
Error in ==> stats at 46
Error in ==> statPart at 83
MATLAB:dimagree
如您所见,我尝试用 zeros() 初始化 idx,并输出 idx 和 all_areas 的大小,运行程序时它们是相同的。所以我现在不知道,我真的需要帮助......
[编辑]
这是我用来处理 statPart 函数输入的代码:
function [BW2,stat] = statPart(varargin)
i = 1;
while i<=length(varargin),
argok = 1;
if ischar(varargin{i}),
switch varargin{i},
% argument IDs
case 'minArea', i = i+1; minArea = varargin{i};
case 'maxArea', i = i+1; maxArea = varargin{i};
case 'subImgSize', i = i+1; subImgSize = varargin{i};
case 'image', i = i+1; Igray = varargin{i};
otherwise argok = 0;
end
else
argok = 0;
end
if ~argok,
disp(['(statPart) Argument invalide ignore #' num2str(i+1)]);
end
i = i+1;
end
谢谢!