我是MATLAB的新手,我正在尝试将圆拟合技术应用于下图。
图片
预期产出
我使用以下代码没有运气:
[centers, radii] = imfindcircles(W,[30 65],'ObjectPolarity','bright');
figure,imshow(W);% title('Sobel gradient');
viscircles(centers,radii,'Color','b');
请注意,圆圈大小可能会因图片而异
有什么建议。
尽管不是一位优秀的数字图像分析师,但我试图用这张图片稍微玩一下。我发现以下方法更加灵活:
img = imread('1GBtO.png');
img = im2bw(img);
rp = regionprops('table',img,'Centroid','Eccentricity','EquivDiameter','MajorAxisLength','MinorAxisLength');
rp.Radii = mean([rp.MajorAxisLength rp.MinorAxisLength],2) / 2;
rp([rp.Eccentricity] > 0.75,:) = [];
rp(rp.EquivDiameter < 10 | rp.EquivDiameter > 30,:) = [];
imshow(img);
hold on;
viscircles(rp.Centroid,rp.Radii);
hold off;
输出远远不是理想的输出,但我觉得它比你的第一次试用有所改进:
但我认为您可以通过找到正确的算法来调整半径并通过调整标准来排除不需要的区域来获得所需的结果。