Eu tenho uma imagem que se parece com a abaixo:
Estou tentando encontrar o raio (ou diâmetro) do círculo. Eu tentei usar a transformação circular de Hough (via matlab's imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
) e ajustando-me a um círculo ou elipse (função caseira que funciona muito bem para dados menos ruidosos, veja abaixo).
Eu também tentei algum processamento de imagem para obter um círculo mais claro, por exemplo, veja abaixo:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
No entanto, quando eu alimento a imagem processada para qualquer uma das técnicas (ajuste de Hough e circle \ elipse), nenhuma delas consegue detectar o círculo de maneira decente.
Aqui está um trecho de código do localizador de círculos que eu escrevi (matlab) [row col] = find (bw); contorno = bwtraceboundary (bw, linha (1), col (1)], 'N', conectividade, 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);
Abordagens alternativas serão apreciadas ...