matlab imfindcircles:没有找到圆圈时如何处理

时间:2015-11-06 10:39:24

标签: matlab image-processing simulink

我希望在Simulink模型中使用imfindcircles使用网络摄像头跟踪一个圆圈。图片中可能有时候图像上没有圆圈可见。

我在MATLAB功能块中使用以下代码:

    function centreOutput = fcn(image)
    coder.extrinsic('imfindcircles');
    coder.extrinsic('find');
    coder.extrinsic('max');
    temp = 0;
    rayonMax = 0;
    rayons = coder.nullcopy(zeros(1,1));
    centres = coder.nullcopy(zeros(1,2));
    %set the radius
    [centres, rayons] = imfindcircles(image,[20 60],'Sensitivity',0.9,'EdgeThreshold',0.5,'ObjectPolarity','bright');
    rayonMax = min(rayons);
    temp = find(rayons==rayonMax);
    centreOutput = centres(temp,:);
    end

我的问题是我收到以下错误消息:

  

MATLAB表达式'人造丝'的尺寸不匹配。预期= 1x1实际= 0x0   块MATLAB函数(#41)   执行时:执行期间的状态

根据我的理解,centres的维度不是在没​​有找到圆圈时声明的:如果没有找到圆圈,我怎么能处理这个问题(就像测试那样“找到一个圆圈......“)

2 个答案:

答案 0 :(得分:1)

我无法尝试这一点,但如何检测到这种情况呢?

之类的东西
function centreOutput = fcn(image)
    coder.extrinsic('imfindcircles');
    coder.extrinsic('find');
    coder.extrinsic('max');
    temp = 0;
    rayonMax = 0;

    %set the radius
    [centres, rayons] = imfindcircles(image,[20 60],'Sensitivity',0.9,'EdgeThreshold',0.5,'ObjectPolarity','bright');

    if (~isempty(centres))
        rayonMax = min(rayons);
        temp = find(rayons==rayonMax);
        centreOutput = centres(temp,:);
    else
        centreOutput=[]; %return empty (or something else, you choose)
    end
end

我相信您的错误可能来自于以奇怪的方式初始化变量,因为您告诉编码器您的变量是1x1和1x2但它们可能不是。

我不确定,但这可能是一个Simulink问题。如果是这种情况,并且您需要初始化变量,请将它们初始化为

rayons = 0;
centres = [0;0];

计算时间相同,可以避免错误。

答案 1 :(得分:1)

我明白了:我刚刚在分配结果之前测试了imfindcircles函数:

...
if (isempty(imfindcircles(image,[30 50],'Sensitivity',0.9)))
    centreOutput = [0 0];
else 
[centres, rayons] = imfindcircles(image,[30 50],'Sensitivity',0.9);
    rayonMax = min(rayons);
    temp = find(rayons==rayonMax);
    centreOutput = centres(temp,:);
end
...

您的回答帮助我找到了正确的语法,感谢您的帮助:)