我有一张如下图所示的图片:
我试图找到圆的半径(或直径)。我尝试过使用圆形霍夫变换(通过 matlab 的imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
),并通过拟合圆或椭圆(自制函数对于噪声较小的数据非常有效,见下文)。
我还尝试了一些图像处理以获得更清晰的圆圈,例如,见下文:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
但是,当我将处理后的图像提供给任何一种技术(霍夫和圆\椭圆拟合)时,它们都无法以体面的方式检测到圆。
这是我写的圆查找器的代码片段 (matlab) [row col]=find(bw); 轮廓= bwtraceboundary(bw,行(1),col(1)],'N',连通性,num_points);
x = contour(:,2);
y = contour(:,1);
% solve for parameters a, b, and c in the least-squares sense by
% using the backslash operator
abc = [x y ones(length(x),1)] \ -(x.^2+y.^2);
a = abc(1); b = abc(2); c = abc(3);
% calculate the location of the center and the radius
xc = -a/2;
yc = -b/2;
radius = sqrt((xc^2+yc^2)-c);
替代方法将不胜感激......