Teniendo una imagen con un cuadrado y fondo oscuro devuelve el centro en X,Y de dicho bloque
%Ejemplo que usa la "Image Processing Toolbox" de Matlab para buscar
%el centro de un objeto y devuelve las coordenadas X Y del mismo.
%Editar el fichero formas12.jpg moviendo el cuadrado y observar que las X e Y cambian
close all
image=imread('c:\formas12.jpg'); % Lee el fichero y lo carga en la variable image
img=im2bw(image);
imshow(img);
[label num] = bwlabel(img,8); %Etiqueta grupos de pixeles conectados en la imagen binaria encontrados en la variable ...
%...img con área > de 8 pixeles.
% [label num] = bwlabel(img, n) Genera una matriz donde los valores a 0 son el fondo y
% los valores con mismo número son zonas de pixeles conectadas.
% El número num se cambia según qué grupo de píxeles conectados sea.
% Si se observa la matriz resultante (quitar el ; de la línea bwlabel(img,8);), el valor de cada
% celda de dicha matriz indica, si es cero (fondo) y los otros valores zonas de píxeles vecinos.
% El número mayor será el mismo que el total de grupos depíxeles que se han encontrado.
pause (1) %pausa de n sgs.
imshow(label2rgb(label)); %Muestra la imagen coloreando las zonas de distinto color para identificar cada grupo u objeto
pause(1)
graindata=regionprops(label,'all');
for i=1:num
if graindata(i).Eccentricity >0 %Excentricidad > 0 implica que la forma se aleja de ser redonda.
found=i;
area=graindata(found).Area;
radius=sqrt(area/pi);
radius=1.2*radius;
centroid=graindata(found).Centroid;
centro=num2str(centroid)
text(centroid(1)-22,centroid(2), centro)
text(centroid(1), centroid(2),'·')
t=0:pi/20:2*pi;
x=centroid(1)+radius*cos(t);
y=centroid(2)+radius*sin(t);
hold on;
plot(x,y);
end
end
Editar el jpg y mover el cuadrado y ejecutar el código

No hay comentarios:
Publicar un comentario