Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab imfindcircles:当找不到圆时如何处理_Matlab_Image Processing_Simulink - Fatal编程技术网

matlab imfindcircles:当找不到圆时如何处理

matlab imfindcircles:当找不到圆时如何处理,matlab,image-processing,simulink,Matlab,Image Processing,Simulink,我希望在Simulink模型中使用imfindcircles通过网络摄像头跟踪圆圈。图片中有时可能没有圆圈在图像上可见 我在MATLAB功能块中使用以下代码: function centreOutput = fcn(image) coder.extrinsic('imfindcircles'); coder.extrinsic('find'); coder.extrinsic('max'); temp = 0; rayonMax = 0;

我希望在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) 执行时:操作期间的状态


据我所知,
中心的尺寸在没有找到圆的情况下并不像声明的那样:当没有找到圆的情况下,我该如何处理这个问题(就像一个测试是“如果找到一个圆…”)

我不能尝试这个方法,但是如果发生这种情况,如何检测呢?差不多

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,但它们可能不是

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

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

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

我知道了:我只是在分配结果之前测试了函数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
...

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

另外,您为什么要初始化
人造丝
中心
?您不会得到更快的结果(因为它们是1x1或1x2)。嗨,谢谢你的建议,只要没有检测到圆,我就会一直遇到同样的问题,因为问题来自于线“[中心,人造丝]=imfindcircles(图像,[20 60],“灵敏度”,0.9,'EdgeThreshold',0.5,'ObjectPolarity','bright');”与本例一样,imfindcircle为“centers”返回0x0,并抛出错误。。在影响到“中心”之前,我应该想办法检查imgfindcircles是否发送了一个积极的结果,但我错过了语法…@raphael,即使你按照我告诉你的方式声明
人造丝
中心
?我很高兴你得到了它。请接受你或我的答案,因为它是有效的,这样将来迷路的人就会知道该怎么办;)