jueves, 8 de julio de 2010

DELIMITACION - CONTEO DE MONEDAS


El código anterior de Conteo de monedas he tomado como referencia para cambiar parte del codigo, a continuación:


%% Primero convertimos la imagen a BW
coin1 = im2bw (imread ('coins.png'));
%% Llenamos las regiones de la imagen y los agujeros
coin2 = imfill (coin1, 'agujeros');
%% Etiquetamos y contarmos con los componentes conectados
[L Ne] = bwlabel (doble (coin2));
%% Determinamos la medina de las regiones de la imagen
prop = regionprops (L, 'Espacio', 'Centroide');
%% Inicializamos el contador a cero
total = 0;
%% Mostramos la imagen
imshow (imread ('coins.png')); conservar
Dinero% count% en base al área de la moneda
para n = 1: el tamaño (por la Proposición 1)% De 1 a número total de monedas
ciento = helice (n). Centroide;
X = centavo(1); Y = centavo (2);
2000" uc="Si la Prop (n). Área> 2000 ">If Prop (n). Area> 2000
texto (X-10, Y, '5 C ')
total = 5;
else
total = 10;
texto (X-10, Y, '10 C ')
end

end
hold on
título ([Total de monedas: num2str(total,'Cents'])


Nota: Este codigo y el anterior expuesto se lo puede complementar con una camara web par que capte la imagen y puede contar el dinero en esa imagen.

Delimitacion de Frutas (Ejemplo)


Este ejercicio es una reforzamiento acerca de la delimitacion de objetos se basa en el mismo codigo de las monedas pero hora con una variable la cual es que los objetos ya no son redondos o de la misma forma estos poseen formas distintas. Al realizar este ejercio se sucitaron varios problemas uno de ellos es que el codigo no distinguia las imagenes al estar pegadas o juntas lo que provoco una gran confusion al ejecutarlo por ello se concreto el codigo en esta imagen la cual demostrara como el programa puede distinguir entre objetos de distinta forma.

%% Adquirir imagenes
I_original=imread('frutas.jpg');

%% Cambiar la imagen a escala de grises
I=rgb2gray(I_original);

%% Obtener el fondo de la imagen
background=imclose(I,strel('disk',58));

%% Identificacion de objetos
I2=imsubtract(background,I);

%% Binarizar imagen
lavel=graythresh(I2);
intensidad=lavel*255
BW=im2bw(I2,lavel);

%% Relleno de objetos (filtro de la media)
fill=imfill(BW,'holes');

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

%% Delimitar manzana
cantidad=0;
manzana=find(areas>80 & areas < style="">
statsmanzana=stats(manzana)
axes(handles.axes1)
imshow(I_original)
hold on;
cantidad =length(statsmanzana)*1+ cantidad ;
for idx = 1:length(statsmanzana);
h = rectangle ('Position',statsmanzana(idx).BoundingBox,...
'Curvature',[1,0.8],'LineWidth',5,'LineStyle','-.');
set (h,'EdgeColor',[0 0 1]);
hold on

end
hold off
disp([cantidad,'manzana'])
set(handles.valor,'string',cantidad)



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');


jueves, 13 de mayo de 2010

Captura y manejo de imagenes

%% adquirir imagen1
I1 = imread('imagen1.jpg');
imshow(I1)
%% adquirir imagen2
I2 = imread('imagen2.jpg');
figure
imshow(I2)
%% capturar las matrices de coleres
I1r = I1(:,:,1);
I2r = I2(:,:,1);
I1g = I1(:,:,2);
I2g = I2(:,:,2);
I1b = I1(:,:,3);
I2b = I2(:,:,3);

Inewr = I1r-I2r;
figure
imshow(Inewr)

Inewg = I1g-I2g;
figure
imshow(Inewg)

Inewb = I1b-I2b;
figure
imshow(Inewb)

Inew(:,:,1) = Inewr;
Inew(:,:,2) = Inewg;
Inew(:,:,3) = Inewb;
figure
imshow(Inew)
%% Filtro mediana
[n,m]=size(I2r);
imshow('imagen2.jpg')
for k =1:3
for i = 2:n-1
for j = 2:m-1
v=uint8((I2(i-1,j-1,k)+ I2(i-1,j,k)+ I2(i-1,j+1,k)+ I2(i,j-1,k)+ I2(i,j,k)+ I2(i,j+1,k)+...
I2(i+1,j-1,k)+ I2(i+1,j,k)+ I2(i+1,j+1,k))/9);

I2(i,j,k) = (v);
end
end
end
figure
imshow(I2)
%% omparar imagen
for k = 1:3
Inew(:,:,k) = I1(:,:,k)-I2(:,:,k);
end
figure
imshow(Inew)
imshow(Inew)

viernes, 23 de abril de 2010

Clasisifcacion de Imagenes por bits segun su profundidad

Una forma muy importante de clasificar las imágenes de mapa de bits es según la cantidad y tipo de información que se asigne a cada píxel (aunque en algunos aspectos es una clasificación un poco "mixta" y puede parecer un poco desordenada, se hace así por claridad explicativa)

  1. Imágenes de 1 bit por píxel

    En este tipo de imágenes cada celdilla (píxel) sólo puede tener uno de dos valores: Uno o cero. Como basta 1 bit para definir esa alternativa, se les llama "imágenes de 1 bit" (también se les llama "imágenes de mapa de bits, de alto contraste, o imágenes de línea").

    Una imagen de 20 × 20 píxeles (400). Podría medir 2 cm. o un campo de futbol. Los píxeles son sólo una división de la información que contiene. Una imagen de 200 × 200 píxeles en este modo. La información es muy escasa para reproducir bien este tipo de imagen.

    Para más información sobre este tipo de imágenes, sigue leyendo imágenes de línea.

  2. Imágenes de escala de grises (8 bits por píxel)

    Cada píxel puede tener 256 valores diferentes (las 256 posibilidades combinatorias de un byte u octeto). Este es el modo de las imágenes digitales de blanco y negro "normales". Aunque te pueda parecer increíble, en ellas sólo se distinguen hasta 256 tonos diferentes de gris (y no suelen aparecer todos a la vez, por cierto).

    Una imagen de 20 × 20 píxeles (400) con 1 byte (8 bits) por píxel. Pesará 400 × 8 bits, es decir: 3.200 bits. La imagen de 200 × 200 píxeles en escala de grises. La información es suficiente para reproducir fotografías en blanco y negro.

  1. Imágenes RGB o Lab (24 bits por píxel)

    Si tomamos un píxel y le asignamos tres bytes, dispondremos de 24 bits en tres grupos de ocho, podemos "colorearlo" siguiendo el sistema de color de los monitores de televisión, que se basan en tres "canales" de luz de color (Rojo, Azul y Verde). De este modo podemos distinguir hasta 16.777.216 millones de tonos de color ( 256 Rojo× 256 Azul × 256 Verde). En realidad, lo que estamos hciendo es superponer tres canales de luz, uno rojo, otro verde y otro azul, cada uno con 256 posibilidades de tono.

    Una imagen de 20 × 20 píxeles (400) con 3 bytes (8 bits) por cada píxel. Pesará 400 × 8 × 3 bits, es decir: 9.600 bits. La imagen de 200 × 200 píxeles en modo RGB, el tipo de color de las televisiones.

    Los ficheros Lab son internamente similares a los RGB (también son de 24 bits por píxel), pero se basan en un modelo de representación del color distinto.

Imagen Digital

Representación bidimensional de una imagen utilizando bits (unos y ceros). Dependiendo de si la resolución de la imagen es estática o dinámica, puede tratarse de un (1)gráfico rasterizado o de un gráfico vectorial. A menos que se indique lo contrario en general por imagen digital se entiende gráfico rasterizado.

(1)Fuente: Wikipedia