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:





2 comentarios:

  1. La excentricidad es un aspecto importante para delimitar la imagen ya que si los objetos en la imágenes son circulares pondremos < a 0.5 y sabrá que los radios son iguales y que los objetos se cierran, y > a 0.5 cuando los objetos de la imagen se abren y sus radios no son iguales.

    ResponderEliminar
  2. para poder realizar esta practica se debe buscar una imagen en la que no se tenga ninguna sombra y la camara se debe encontrar en posicion vertical a la imagen,para que de este modo los objetos puesdan ser reconocidos y delimitados , de lo contrario por la luz o por la ausencia de la misma no se podran reconocer los objetos.

    ResponderEliminar