A=double(imread('circ.bmp'));
A=double(imread('trian.bmp'));
A=double(imread('cuadrado.bmp'));
subplot(2,2,1);imshow(A,[]);

%BUSCA EL CENTRO      
[nf nc]=size(A);
maxf=0;
maxc=0;
minf=nf;
minc=nc;

for f=1:nf
	for c=1:nc
		if A(f,c)==1,
			if f>maxf, maxf=f;end;
			if c>maxc, maxc=c;end;
			if f<minf, minf=f;end;
			if c<minc, minc=c;end;
		end;
	end;
end;

f0=round((maxf+minf)/2);
c0=round((maxc+minc)/2);
A2=A;A2(f0,c0)=2;
subplot(2,2,2);imshow(A2,[]);

%OBTIENE EL BORDE DOBLE (evita cruces diagonales)
B=double(erode(A));
C=double(dilate(A));
A=(C-A)+(A-B);
subplot(2,2,3);imshow(A,[]);


%OBTIENE FIRMA
ancho=maxc-minc;
alto=maxf-minf;
if alto>ancho, w=alto; else w=ancho;end;
firm=zeros(360,1);
C=A;
for ang=0:359
	r=0;
	ang;
	while r<w
		x=round(r*cos(ang*pi/180));
		y=round(r*sin(ang*pi/180));
		C(f0+y,c0+x)=1;
		if A(f0+y,c0+x)==1, break;end;
		r=r+1;      
	end;
	firm(ang+1)=r;   
	subplot(2,2,4);imshow(C,[]);pause(0);   
end;

%Si la firma es una línea recta la varianza debería ser muy baja
v=var(firm);
umbral=mean(firm)*0.1;
if v<umbral, disp('Es un círculo'); else disp('No es un círculo');end;
subplot(2,2,4);plot(0:359,firm);axis([0 359 0 w]);
