Tengo una imagen que se parece a la siguiente:
Estoy tratando de encontrar el radio (o diámetro) del círculo. Intenté usar la transformación circular de Hough (a través de Matlab imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
), y al ajustarla a un círculo o una elipse (función hecha en casa que funciona bastante bien para datos menos ruidosos, ver más abajo).
También probé un procesamiento de imágenes para obtener un círculo más claro, por ejemplo, vea a continuación:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
Sin embargo, cuando introduzco la imagen procesada en cualquiera de las técnicas (ajuste de Hough y circle \ ellipse), ninguna de ellas logra detectar el círculo de manera decente.
Aquí hay un fragmento de código del buscador de círculos que escribí (matlab) [row col] = find (bw); contour = bwtraceboundary (bw, fila (1), col (1)], 'N', conectividad, 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);
Se apreciarán enfoques alternativos ...
Respuestas:
Aquí está mi solución, está cerca de la idea de @ Yoda, pero cambié algunos pasos.
Aquí está el código relevante de Matlab. Estoy usando Hough transform para el archivo círculos .m en mi código.
fuente
Es bastante sencillo hacerlo usando el procesamiento de imágenes. La siguiente es una prueba de concepto en Mathematica . Tendrás que traducirlo a MATLAB.
img
.Binariza la imagen y dilata, seguido de una transformación de relleno. También elimino componentes pequeños perdidos que no están conectados al blob principal. Debería darte algo como lo siguiente:
Luego, encuentre el centroide de este blob y el radio de disco equivalente del blob (openCV, MATLAB tienen comandos equivalentes para hacer esto)
¡Eso es! Ahora dibuje la imagen original y un círculo con el centro y el radio anteriores para ver cómo encaja:
fuente