
function C = circularidad(BW)
%CIRCULARIDAD Calcula la circularidad del objeto en la imagen binaria BW
%   Solo debe haber un objeto en blanco en la imagen. 
%   Calcula el perímetro P llamando a funcion contornoBW (algoritmo square 
%   tracing y el area A llamando a función area.
%   Calcula circularidad como C=(4*pi*A)/(P*P).
%   La circularidad será proxima a 1 en objtos redondeados y practicamente
%   nula en objetos muy alargados.

%_________________________________________________________________________%                                                                     %
% NOMBRE DEL FICHERO:   circularidad.m                                    %
% RECIBE: Imagen binaria BW.                                              %
%         Objeto en negro, fondo en blanco. La imagen ha de contener      %
%         unicamante un objeto.                                           %
% DEVUELVE: La circularidad del objeto.                                   %
% ALGORITMO EMPLEADO: Se basa en la siguiente formula                     %
%         circularidad=(4*pi*area)/(perimetro*perimetro)                  %
%         Llama a las funciones perimetro y area                          %
% VARIABLES:   BW = imagen binaria de entrada                             %
%              C = circularidad hallada                                   %
%              filas = num. de filas de la imagen binaria BW              %
%              columnas = num. de columnas de la imagen binaria BW        %
%              P = perímetro del objeto. Num de pix. en el contorno       % 
%              A = area del objeto de la imagen introducida               %
% BUGS:La circularidad de objetos muy pequeños disminuye por su represent %
%    digital (un circulo de 4 pix es realmente un cuadrado en la imagen)  %
%    Además el perímetro se calcula simplemente contabilizando el núm de  %
%    pix en el contorno.                                                  %
% SUPOSICIONES : La imagen BW contiene unicamente un objeto en blanco     %
% LIBRO: VISION ARTIFICIAL INDUSTRIAL. UNIVERSIDAD DE VALLADOLID 2012     %
% TEMA 4 IMAGENES BINARIAS página 88  
% AUTORES: Eusebio de la Fuente y Félix Miguel Trespaderne
%_________________________________________________________________________%
%  Ejemplo de ejecucion:                                                  %
% >> I = imread('llavefija3.bmp');                                        %
% >> B = binauto(I);        %binariza con nuestra funcion binauto         %
% >> B = ~B;                %pone objeto en blanco                        %
% >> C = circularidad(BW);                                                %
%_________________________________________________________________________%
% Con funciones de MATLAB image processing toolbox                        %
% I = imread('llavefija3.bmp');                                           %  
% umbralOpt = graythresh(I);                                              %
% >> BW = im2bw(I,umbralOpt);      %tambien BW = I>umbralOpt;             %
% >> BW = ~BW; %invertimos en esta imagen para que objetos esten en blanco%
% >> s  = regionprops(BW, 'area','perimeter');                            %
% >> C = (4*pi*s(1).area)/(s(1).perimeter*s(1).perimeter);
%_________________________________________________________________________%
[x, y] = contornoBW(BW); %Llama a nuestra función para el seguim del cont
A = area(BW);  %Llamamos a nuestra función para el cálculo de áreas
P = length(x); %Considermos como perímetro el número de pix. del contorno
C = (4*pi*A)/(P*P); %Devuelve la circularidad
end





