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 ...
Respostas:
Aqui está a minha solução, é próxima da idéia do @ Yoda, mas eu mudei alguns passos.
Aqui está o código Matlab relevante. Estou usando a transformação Hough para o arquivo .m de círculos no meu código.
fonte
É bastante simples fazê-lo usando o processamento de imagens. A seguir, uma prova de conceito no Mathematica . Você terá que traduzi-lo para o MATLAB.
img
.Binarize a imagem e dilate-a, seguida por uma transformação de preenchimento. Também removo pequenos componentes perdidos que não estão conectados ao blob principal. Deve fornecer algo como o seguinte:
Em seguida, encontre o centróide desse blob e o raio de disco equivalente do blob (openCV, MATLAB todos têm comandos equivalentes para fazer isso)
É isso aí! Agora plote a imagem original e um círculo com o centro e o raio acima para ver como ela se encaixa:
fonte