仅在独立应用程序中的Matlab矩阵dimagree错误

时间:2012-09-12 13:52:20

标签: matlab matrix matlab-compiler

我必须将我的Matlab函数转换为独立的应用程序。我使用Matlab构建工具构建它,该部分是可以的。 但是,在运行我的独立程序时,我遇到了一个dimagree错误,即使它在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

谢谢!

1 个答案:

答案 0 :(得分:1)

错误消息指出问题出现在此行的lt(小于比较)中:

idx = all_areas > minArea & all_areas < maxArea;

因为minAreamaxArea的维度all_areas不同。它们要么必须是size(all_areas),要么是标量,而它们不是。{/ p>

在您的支票中,minAreamaxArea[50 48 48],即相当于“200”的ASCII。它们从命令行作为字符串接收,您应该使用str2num将它们转换为数字,然后再处理它们的值。
但是,我不明白为什么它们不等于你的输入字符串“2”和“20000”。你是如何解析输入参数的?这将是一个开始寻找问题的好地方,但如果没有其他信息,我将无法为您提供进一步的帮助。

另外,您在评论中提到disPart来电statPart。什么是disPart,它与statPart的关系是什么?