次のような画像があります。
円の半径(または直径)を見つけようとしています。(matlab'sを介して)円形のハフ変換を使用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); contour = 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);
代替アプローチが高く評価されます...