我有一张看起来像下面的图像:
我试图找到圆的半径(或直径)。我尝试使用圆形Hough变换(通过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,row(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);
替代方法将不胜感激...
霍夫变换寻找一个圆,而不是一个填充的光盘。您首先需要进行边缘检测,以将填充的光盘转换为一个空圆。您圈子的属性是什么?大小恒定吗?他们可以是椭圆吗?点可以不同地分布吗?
—
endlith 2012年
我试过了(请参见编辑后的示例),它是否太嘈杂或不够循环?此外,尺寸是恒定的,由于相机角度误差,它可能具有微小的椭圆度(尽管实际上它是一个完美的圆形窗口)。
—
bla 2012年
如果大小和形状恒定,则可以尝试将填充的圆盘模板与原始点图像进行互相关处理
—
endolith 2012年
除了我的回答,我认为您可能正在图像处理管道的较晚阶段尝试这样做。您能否告诉我们更多有关该问题的信息,并说明一些先前的步骤?
—
Andrey Rubshtein 2012年