martes, 29 de junio de 2010

Delimitar Un Objeto

En la presente práctica delimitaremos un objeto. (Monedas)

Para obtener los limites de área de un objeto lo primero hay que tomar en cuenta su tamaño par poder tomar el valor de área de cada posición.




Debido a que cada moneda tiene diferente posición se pude obtener el área y determinar un rango de medidas



Declararemos variables en la cual podremos almacenar en rango de valores del área para cada moneda
cantidad=0;

Monedas1=find (areas>5202&areas<5252&excentricidad<0.5);

Utilizamos el operador find que calcula las componentes que lo verifican

Como bien podemos observar área de cada moneda.



Monedas1=find(areas>5202&areas<5252&excentricidad<0.5);
statsMonedas4=stats(Monedas4)
figure;imshow(I_moneda)

%Permite mantener abierta para seguir modificando la imagen

hold on;

%StatsMonedas tiene almacenado 5 objetos

cantidad=cantidad+length(statsMonedas4)*0.10

for idx=1:length(statsMonedas4);
h=rectangle('Position',statsMonedas4(idx).BoundingBox,'Curvature',
[0.4,0.4],'LineWidth',2,'LineStyle','-.');
set(h,'EdgeColor',[0.5 0 0]);
hold on
end

La variable cantidad es en donde almacenamos el valor de cada una de las monedas que en nuestro caso son 5 a continuación presentaremos cada una de las monedas delimitadas.

Delimitamos la moneda de 1 peso


cantidad=length(statsMonedas1)*0.01+cantidad;
--------------------------------------------------------

Delimitamos la moneda de 5 peso


cantidad=cantidad+length(statsMonedas2)*0.05
---------------------------------------------------------

Delimitamos la moneda de 50 pesos

cantidad=cantidad+length(statsMonedas3)*0.50
---------------------------------------------------------


Delimitamos la moneda de 10 peso

cantidad=cantidad+length(statsMonedas4)*0.10
---------------------------------------------------------

Delimitamos la moneda de 25 peso

cantidad=cantidad+length(statsMonedas5)*0.25
---------------------------------------------------------



En la variable cantiad almacenamos el valor de cada moneda.

jueves, 17 de junio de 2010

Segmentación de Imagenes

Para la realización de esta práctica hemos escogido imágenes redondas (Monedas del Ecuador) y los identificaremos a estos objetos mediante sus propiedades










I_moneda=imread('MonedasEcuador.jpg');
figure; imshow(I_moneda);










Ahora obtendremos la imagen en escala de grises, utilizando la función rgb2gray
Esta función permite convertir una imagen de tipo RGB en escala de Grises









I=rgb2gray(I_moneda);
figure; imshow(I)






Nos interesa preservar la naturaleza del objeto que en este caso es circular, por lo que utilizaremos un radio de 88 pixeles

background=imclose(I,strel('disk',88));

Identificacion de objetos







I2=imsubtract(background,I);
figure; imshow(I2)








Mediante la función graythresh se podrá hallar el umbral de binarización utilizando la función im2bw.

El parámetro thresh indica el umbral de binarización




lavel=graythresh(I2);
intensidad=lavel*255
BW=im2bw(I2,lavel);
figure; imshow(BW)













Relleno de objetos


fill=imfiLl(BW,'holes');
figure; imshow(fill)



A continuación identificaremos los objetos
[niveles, numObjects]=bwlabel(BW,8);
numObjects
stats=regionprops(niveles,'Eccentricity','Area','BoundingBox');
areas=[stats.Area]
excentricidad=[stats.Eccentricity]


Para una mejor comprensión del tema obtendremos algunos conceptos:
Stats: podríamos decir que es una matriz que posee la loguitud que la de los objetos en este caso las monedas

Workspace




'Eccentricity'
realiza cálculos de eccentricidad, área y encierres para los objetos.












































viernes, 4 de junio de 2010

HISTOGRAMA DE IMAGENES

Con un histograma es posible ver la distribución de intensidades en una imagen basta con
utilizar la función imhist. Si nos interesa ecualizar el histograma de una imagen (para extender
los valores de intensidad) bastaría con utilizar la función histeq.
El código matlab para visualizar en una misma pantalla una imagen y su histograma podría ser:

>>LN=imread('lena.jpg');
>>LN1=rgb2g(LN);
>>subplot(2,1,1),subimage(LN1),title('Imagen original');
>>subplot(2,1,2),imhist(LN1),title('Histograma');