jueves, 15 de julio de 2010

Delimitación de monedas

Después de la segmentación de monedas agregándoles sus respectivas características, se procederá a delimitar cada moneda para lograr simular un contador de monedas dependiendo del valor de cada una de ellas.

La imagen a analizar será la siguiente:

Para delimitar cada moneda es necesario conocer el área de cada objeto, valor obtenido con anterioridad en la segmentación de objetos circulares. Las áreas halladas en este caso son las siguientes:
6414, 5254, 2192, 3959, 2552, 12456, 6543, 4243, 3360, 1, 1, 4291, 10179, 3389.
El área es muy importante ya que mediante estos valores se va a encontrar a cada una de las monedas y se las va a delimitar, logrando así identificar el valor de cada una.
Utilizando el primer valor de las áreas delimitamos a la moneda.
La excentricidad usada en este caso es de 0.5 ya que se trata de objetos redondos, en caso de ser objetos que no tengan aspecto circular, la excentricidad debe ser mayor.
En stats se almacena las propiedades de cada objeto de la imagen binaria.
statsMonedas=stats(Monedas)
Se presenta la imagen original, sobre la cual se va a realizar las delimitaciones.
figure; imshow(I_original)
Mantenemos a la misma imagen original activa mientras se realiza cualquier tipo de cambios.
hold on;
En la variable cnatidad se almacenará el valor de cada moneda según se las vaya encontrando, inicializándola en un principio con el valor de 0.
cantidad=0;
En este caso, el área seleccionada nos llevó a encontrar una de las monedas de 50 centavos, por lo que a la variable cantidad se la multiplicará por 0.50.
cantidad=length(statsMonedas)*0.50+cantidad;
for(idx=1:length(statsMonedas);
Para delimitar cada moneda, se las bordeará mediante un rectángulo, con la función rectangle().
h=rectangle('Position',statsMonedas(idx).BoundingBox, 'Curvature',[0.4,0.4],'LineWidth',2,'LineStyle','.-');
Position: ubicación del rectángulo dentro de la figura.
Curvature: forma la curvatura de las esquinas del rectángulo dependiendo de los parámetros.
LineWidth: grosor de la línea del rectángulo.
LineStyle: estilo de la línea que rodea al objeto.
Para colocar el color de las líneas se juega con los 3 parámetros que recibe EdgeColor.
set(h,'EdgeColor',[0.5 0 0]);
hold on;
end

Se realiza el mismo proceso con el resto de áreas descritas anteriormente, obteniendo el siguiente resultado:




Como se puede ver con el área 12456 resultó ser de dos monedas, debido a que la sombra expuesta representa como un solo objeto, esto se puede notar al momento de umbralizar la imagen.

Para esta imágen fue necesario colocar una excentricidad <>

Al finalizar se puede ver el valor final que resultó al sumar todas las monedas:





Delimitación de Frutas

La imagen con la que se trabajara para realizar la delimitación de futas sera la siguiente:













Para realizar la delimitación de las frutas debemos primero realizar la segmentación de la imagen y lo mas importante es la identificación de los objetos en la imagen para esto coloc
amos el siguiente código.

[niveles, numObjects]=bwlabel(BW,8); numObjects stats=regionprops(niveles,'Eccentricity','Area','BoundingBox'); areas=[stats.Area]; excentricidad=[stats.Eccentricity]


Este código nos permite encontrar en numero de objetos y las aéreas de los mismos, estas aéreas nos
ayudaran a para realizar la delimitación de las imágenes















Con estas escogemos las que están en un rango alto por ejemplo escogemos las áreas que estén entre los rangos 2000 a 8000 y colocamos el siguiente código.

platano=find(areas>7520 & areas <> 0.5);

statsplatano=stats(platano)

figure
imshow(I_original)
hold on;
for idx = 1:length(statsplatano);
h = rectangle ('Position',statsplatano(idx).BoundingBox,...
'Curvature', [1,0.8],'LineWidth',5,'LineStyle','-.');
set (h,'EdgeColor',[0 0 1]);
hold on

end

manzana=find(areas > 2750 & areas < 2990 > 0.5);
statsmanzana=stats(manzana)
for idx = 1:length(statsmanzana);
h = rectangle ('Position',statsmanzana(idx).BoundingBox,...
'Curvature',
[1,0.8],'LineWidth',5,'LineStyle','-.');
set (h,'EdgeColor',[0 1 1]);
hold on

end

hold off


La parte importante es la excentricidad ya que esta depende del tipo de objetos que se vaya a delimitar si los objetos de la imagen son cerrados se colocara excentricidad <> 0.5.

Rectangle.- permite encerrar a los objetos de la imagen en un rectangulo y modificar su color y su forma.

Hold on – hold of.- permite que la imagen este activa y realizar la delimitación en la misma imagen