matlab imfindcircles:当找不到圆时如何处理
我希望在Simulink模型中使用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;
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,即使你按照我告诉你的方式声明人造丝
和中心
?我很高兴你得到了它。请接受你或我的答案,因为它是有效的,这样将来迷路的人就会知道该怎么办;)