You are on page 1of 21

Reporte de Practicas

Alumno: Cruz Garca Diego Alejandro


Diseo Mecatronico
Profesor: Ing. Gonzalo Ceja Medina





14 de Abril del 2014


Ejercicio 1.- Conversion de una imagen RGB a grises, binaria
Objetivo: Conversin de una imagen en escala de grises a una imagen lgica
(0=negro, 1=blanco).
Tambin se puede usar el siguiente comando cuando se requiere binarizar una imagen
RGB directamente.
Imagen_bin=im2bw(Imagen,level)
Dnde: level es el nivel de umbral entre 0 y 1.
Codigo:
clear all;clc;clear all
koala_RGB=imread('koala.jpg');
im_bin=im2bw(koala_RGB,.5);
subplot(2,2,1),imshow(koala_RGB),title('Koala Original');
subplot(2,2,2),imshow(im_bin),title('Koala Blanco/Negro');

Imagen:








Ejercicio 2.- Filtro de mediana (Filtraje de una imagen con ruido)
Objetivo: El filtrado por mediana, los pxeles de la nueva imagen se generan calculando
la mediana del conjunto de pxeles del entorno de vecindad del pxel correspondiente
a la imagen origen, de esta forma se homogeneizan los pxeles de intensidad muy
diferente con respecto a la de los vecinos. Este tipo de filtro es bastante indicado
cuando se tiene ruido aleatorio.
Se puede utilizar el comando: imagen2=filter2(filter,Imagen);
Se agrega ruido a una imagen con el comando imnoise.
Codigo:
clc;clear all;close all;
im=imread('yo.jpg');
yo_bw=im2bw(im,.5);
ruidosa=imnoise(im,'salt & pepper',0.05);
im_fil=medfilt1(double(ruidosa),40);
im_fil=uint8(im_fil);

subplot(1,4,1),imshow(im),title('Original');
subplot(1,4,2),imshow(yo_bw),title('Blanco/Negro');
subplot(2,4,3),imshow(ruidosa),title('Ruidosa');
subplot(2,4,4),imshow(im_fil),title('Filtrada');

Imagen:

Ejercicio 3.- Erosin y Dilatacin
Objetivo:
Son las operaciones morfolgicas ms utilizadas.
DILATACIN: Adiciona pixeles en las fronteras de la imagen.
EROSIN: Remueve pixeles de las fronteras de la imagen.
Ambas operaciones se aplican a imgenes binarizadas y consiste en la eliminacin o incremento
de pixeles a un objeto.

Codigo:
clear all; clc; close all
im_RGB= imread('Fig0914(a)(licoln from penny).tif');
imbw= im2bw(im_RGB,0.5);
ee=ones(6,6);
erosionada= imerode(imbw,ee);
contorno=imbw-erosionada;


subplot(1,3,1),imshow(im_RGB),title('original');
subplot(1,3,2),imshow(erosionada),title('Erosionada');
subplot(1,3,3),imshow(contorno),title('Dilatada');



Ejercicio 4.- Apertura y Cierre
Objetivo:
Apertura.- generalmente suaviza el contorno de un elemento, rompe uniones angostas
(istmos) y elimina salientes finas.
Cierre.- tambin tiende a suavizar contornos, pero a diferencia de la anterior, une cortes
en partes angostas y golfos largos y finos, elimina pequeos huecos y llena baches en los
contornos
Codigo:
clc;close all,clear all
im=imread('Fig0911(a)(noisy_fingerprint).tif')
figure,imshow(im);
ee=strel('disk',1);
imA=imopen(im,ee);
imC=imclose(im,ee);
subplot(2,3,1),imshow(im),title('Original');
subplot(2,3,2),imshow(imA),title('Apertura');
subplot(2,3,3),imshow(imC),title('Cierre');

%Generamos una apertura mediante erosion y dilatacion
imaa=imerode(im,ee);
ima=imdilate(imaa,ee);
%Generamos una apertura mediante dilatacion y erosion
imcc=imdilate(im,ee);
imc=imerode(imcc,ee);

subplot(2,3,5),imshow(ima),title('Apertura: ED');
subplot(2,3,6),imshow(imc),title('Dilatacion: DE');

Imagen:


Ejercicio 5.- Redimension de una Imagen

Objetivo: modificar mediante Matlab el tamao de una imagen seleccionada, utilizando la
funcin imresize, y en la lista de argumentos de esta funcin se encontraran la imagen y
la escala a la que se modificara.
Codigo:
clear all; clc; clear all
A=imread('polenC.tif');
A_bw=im2bw(A,0.5);
size(A_bw)
imshow(A_bw);
B=imresize(A_bw,0.5);
figure,imshow(B),size(B)
C=imresize(A,[100,200]);
figure,imshow(C),size(C);

Imagen:











Recortar una Imagen
Objetivo: Realizar un recorte a una imagen, utilizando la funcin imcrop, indicndole en
la lista de argumentos la numeracin de pixeles hasta donde se recortara la imagen.

Codigo:

clear all;clc;close all;
I = imread('moneda8.jpg');
I2 = imcrop(I,[75 68 130 112]);
imshow(I), figure, imshow(I2)

Imagen:










6.- Seleccion de Etiquetas (Matriz de Etiquetado)
Objetivo:
Para seleccionar manualmente un objeto y aislarlo se realiza el procedimiento:
1. Mostrar la imagen binarizada con el comando imshow.
2. ejecutar el comando: [L N]=bwlabel(im,8);

Dnde: C=4 u 8 (Conexin)
3. Clic en el objeto y Enter.
4. Si se desea, desplegar el objeto seleccionado en L.
Codigo:
clear all;clc;close all;
im=imread(figurillas.png);
figure
imshow(im)
im=im2bw(im,0.3);
[L N] = bwlabel(im,8);
N
figure
subplot(2,3,1);imshow(im)
subplot(2,3,2);imshow(L==1)
subplot(2,3,3);imshow(L==2)
subplot(2,3,4);imshow(L==3)
subplot(2,3,5);imshow(L==4)
subplot(2,3,6);imshow(L==5)

Imagen:



Ejercicio 7- Trazado de bordes
Objetivo: Trazar los bordes de las figuras que se encuentren en la imagen seleccionada,
para esto, se utilizara la funcin bwboundaries.
Cdigo:
clc;clear all;close all;
imrgb=imread('moneda.jpg');
imbw=im2bw(imrgb,0.5);
imbw=imfill(imbw,'holes');
figure
imshow(imrgb);
hold on
[B L]=bwboundaries(imbw);
[cant x]=size(B);
for k=1;cant
b=B{k};
plot(b(:,2),b(:,1),'r','LineWidth',3);
end
hold off

Imagen:








Ejercicio 8- Deteccin de monedas chicas y grandes con conteo
Objetivo:
Realizar un programa en MATLAB que cuente cuantas monedas y diferenciar
cuantas monedas grandes y cuantas pequeas

Codigo:
clear all;clc;clear all
i=0; x=0;
im=imread('coins.jpg');
im2=rgb2gray(im);

%%%binarizacion
umb=graythresh(im2);
bw1=im2bw(im2);
bw=imfill(bw1,'holes');
imshow (im)

%%%etiquetar los elementos conectados
[L Ne]=bwlabel(bw);

%%%calcular propiedades de los objetos de la imagen
propiedad=regionprops(L);
hold on

%%graficar las cajas de fronteras de los objetos
for n=1:size(propiedad,1)
rectangle('position',propiedad(n).BoundingBox,'Curvature',[1,1],'EdgeColo
r','g','LineWidth',2)
end
pause(3)


%%% buscar las areas que son menores o mayores a 2800 segun sea el caso
s=find([propiedad.Area]>2850);
%s=find([propiedad.Area]<2850);

%%% marca las areas que son menores o mayores a 2800 segun sea el caso
for n=1:size(s,2)
rectangle('position',
propiedad(s(n)).BoundingBox,'Curvature',[1,1],'EdgeColor','r','LineWidth'
,2)
i=i+1;
x=Ne-i;

end
title([' Monedas: ',num2str(i),' grandes y ',num2str(x),' chicas'])
pause(2)

%%% elimina las areas que son menores o mayores a 2800 segun sea el caso
for n=1:size(s,2)
d=round(propiedad(s(n)).BoundingBox);
bw(d(2):d(2)+d(4),d(1):d(1)+d(3))=0;
end

figure, imshow(bw)
%>
%<
















Ejercicio 9.- Calculo de Distancias entre Regiones (Distancias entre
Monedas)
Objetivo: Obtener el centroide de las monedas y con eso obtener la distancia entre ellas
marcndola con una linea
clear all;clc;close all;
I=imread('coins.png');
figure,imshow(I)
bw=im2bw(I,graythresh(getimage)); %Convertida a grises
bw2=imfill(bw,'holes');%Imagen rellenada maquillada
%Obtener centros
s=regionprops(bw2,'centroid');
centroids=cat(1,s.Centroid);%Concatena el arreglo
%Muesntra las coordenadas en el commandwindow
centroids
%Obtener la cantidad de monedas
cantidad=size(centroids);
m=cantidad(1,1);

str=[num2str(m),' monedas detectadas.'];
disp(str);
for i=1:m
x(i)=centroids(i,1);
y(i)=centroids(i,2);
end
disp('Determinar la distancia de la monedaA a la monedaB')
A=1;
B=2;
distancia=sqrt((x(B)-x(A))^2+(y(B)-y(A))^2);
str=['La distancia es: ' ,num2str(distancia),'unidades']
disp(str);

figure;
imshow(I)
hold on;
Imagen_filled=imfill(bw,'holes');
boundaries=bwboundaries(Imagen_filled);

for k=1:10
b=boundaries{k};
plot(b(:,2),b(:,1),'b','LineWidth',3);%Dibuja contornos
plot(imgca,centroids(:,1),centroids(:,2),'r*')
plot([x(A) x(B)],[y(A) y(B)],'m','Linewidth',2);
end
xlabel(str)
hold off;

Ejercicio 10- Aplicacin de la regionprop :Boundingbox

clear all;clc;close all;
im=imread('coras.jpg');
%binarizacion
im_bin=im2bw(im,graythresh(im));
im_fill=imfill(im_bin, 'holes');
figure,imshow(im_fill);
[L N] = bwlabel(im_fill);
propiedad = regionprops((L));
hold on
imshow(im);
%graficamos las cajas de fronteras de objetos
for n=1:N
rectangle('Position', propiedad(n).BoundingBox, 'EdgeColor',
'g','LineWidth',2)
end
hold off;


Ejercicio 11- Aplicacin de la regionprop: ConvexHull

Codigo:
clear all;clc;close all;
im=imread('Pinzas.jpg');
%binarizacion
im_bin=im2bw(im,graythresh(im));
im_bin=not(im_bin);
figure,imshow(im_bin);
im_fill=imfill(im_bin, 'holes');
figure,imshow(im_fill);
[L N] = bwlabel(im_fill);

propiedad = regionprops(L,'ConvexHull');
hold on
imshow(im);
%graficamos las cajas de fronteras de objetos
for n=1:N
x=propiedad(n).ConvexHull(:,1);
y=propiedad(n).ConvexHull(:,2);
plot(x,y, '--r','Linewidth',2)
end
hold off;








Ejercicio 12- Aplicacin de la regionprop: ConvexArea

Objetivo: Determinar el rea dentro de un permetro con la propiedad convexarea, que
es precedida por el uso de la propiedad convexhull, para delimitar la zona que se
registrara.

CODIGO

clc;clear all;close all;
im=imread(pinzas.jpg);
im_bin=im2bw(im,graythresh(im));
[m n ] = size (im_bin);
im_bin=1-im_bin;
figure
imshow(im_bin)
im_fill = imfill(im_bin, holes);
figure
imshow(im_fill);
[ L N ] = bwlabel (im_fill);
propiedad = regionprops(L, ConvexHull, ConvexArea, Centroid);
centroids = cat(1,propiedad.Centroid);
hold on
imshow (im);
for n=1:N
x=propiedad(n).ConvexHull(:,1);
y=propiedad(n).ConvexHull(:,2);
areaConvex=propiedad (n).ConvexArea;
plot(x,y,centroids(:,1),centroids(:,2), r*)
text( centroids (:,1),centroids(:,2),[num2str(areaConvex), Unidades^2]
FontSize,10,?FontWeight,bold)
end
hold off

Imagen





Ejercicio 13- Aplicacin de la regionprop: orientation
Objetivo: Mostrar la orientacin de los objetos con respecto al eje de las axisas y
respecto a algn otro eje, el ngulo (en grados que varan desde -90 hasta 90 grados),
se utiliz la propiedad orientation.

CODIGO
clc;clear all;close all
im=imread (cotonetes.jpg );
im_bin=im2bw(im,graythresh(im));
im_bin=imclose(im_bin,strel( disk,4));
figure,imshow(im_bin)
im_fill=imfill(im_bin, noholes);
[B,LL] = bwboundaries (im_fill, noholes);
[ L N ] = bwlabel (im_fill);
propiedad = regionprops (L, orientation );
figure,imshow(im);
hold on
for k= 1:length(B)
boundary = B{k};
plot(boundary(:,2),boundary(:,1),y,LineWidth2);
end
for k=1:lenth(B)
boundary = B{k};
inclinacin = propiedad(k).orientation;
text(boundary (1,2) + 60, boundary(1,1)+3,[
num2str(inclinacin),],Color,g,FontSize,10,FontWeight,bold);
end
hold off










Ejercicio 14- Aplicacin de la regionprop: MajorAxisLength y
MinorAxisLength

Codigo
clc;clear all; close all
im=imread (capacitores.png);
im_bin=im2bw(im,graythresh(im));
im_bin=imclose (im_bin,strel (disk,8));
im_bin=1-im_bin;
figure,imshow(im_bin)
[B,LL] = bwboundaries(im_bin);
propiedad = regionprops(L, MajorAxisLength, MinorAxisLength);
figure,imshow(im);
hold on
for k= 1:length(B)
boundary = B{k};
plot(boundary(:,2),(boundary(:,1),b,LineWidth,2);
end
for k= 1:length(propiedad)
oundary = B{k};
mayoreje = propiedad (k). MajorAxisLength;
menoreje = propiedad (k). MinorAxisLength;
text(boundary(1,2)+10,boundary(1,1)*10,[num2str(mayoreje),,,num2str(may
oreje),,numstr(menoreje)],Color,g,FontSize,10,FontWeigth,bold)
;
end
hold off
















Ejercicio 15- Aplicacin de la regionprop: EulerNumber

CODIGO
clc;clear all;close all
im=imread(dado.jpg);
im_bin=im2bw(im,graythresh(im));
im_bin=imclose(im_bin,strel(disk17));
figure,imshow(im_bin)
[B ,LL] = bwboundaries (im_bin,holes);
[L N] = bwlabel (im_bin);
propiedad = regionprops(L,EulerNumber);
figure,imshow(im);
hold on
for k= 1;length(propiedad)
boundary = B{k};
numeuler = propiedad(k).EulerNumer;
valordado=(-1*numeuler)+1;

text(boundary(1,2)+60,boundary(1,1)+40,[num2str(valordado),], Color,
r,FontSize,40,FontWeight,bold);
title([Cayo un : , num2str(valordado)])
end
hold off

Imagen:














Ejercicio 16- Remueve objetos menores a una cierta rea

Objetivo: Eliminar reas menores de una imagen, tomndose como referencia
determinada cantidad de pixeles, se usara la funcin bwareaopen.


CODIGO
clear all;clc;clear all
im=imread(objetos.png);
im = im2bw(im,graythresh (im));
im2 = bwareaopen (im,5000);

figure
imshow(im);
figure
imshow(im2);

Imagen



















Ejercicio 17- Deteccin de objetos : crculos, rectngulos y
tringulos

Objetivo: Deteccin de figuras bsicas

CODIGO
clear all;clc;close all;
vid = videoinput(winvideo,2, RGB24_640X480);
scr= getselectedsource(vid);
vid.FramePerTrigger =1;
vid.ReturnedColorspace = rgb ;
preview(vid);
while(1)
im = getsnapshot(vid);
imshow(im);

bw=im2bw(im,graythresh(im));
bw=bwareaopen(bw,30);
bw=imfill(bw,noholes);
[B,L]=bwboundaries(bw, noholes);
hold on

for k=1:length(B)
boundary = B{k};
plot(boundary(:,2),boundary(:1), w,Linewidth,2);
end
stats = regionprops(L, Area,Centroid,perimeter);
for k=1:length(B)
boundary = B{k};
permeter=stats{k}.Perimeter ;
rea = stats(k).Area;
metric = 4*pi*rea/perimeter^2;
metric_string = sprintf( %2.2f,metric);
text(boundary(1,2)-
35,boundary(1,1)+13,metric_string,Color,y,FontSize,14,FontWeight,
bold);
if metric >0.8
text(boundary(1,2)-
35,boundary(1,1)+40,metric_string,CIRCULO,Color,K,FontSize,14,Fo
ntWeight,bold);
elseif metric >0.65
text(boundary(1,2)-
35,boundary(1,1)+40,metric_string,RECTANGULO,Color,k,FontSize,14,
FontWeight,bold);
elseif metric>0.45
text(boundary(1,2)-
35,boundary(1,1)+40,metric_string,TRIANGULO,Color,k,FontSize,14,
FontWeight,bold);
else
text(boundary(1,2)-
35,boundary(1,1)+40,indefinited,Color,y,FontSize,14,FontWeight,
bold);
end
end
title([Metrica normalizada del redondeo de las figuras]);
if max (im)<10
stoppreview(vid);
break;
end
pause (0.1)
end


Imagen

You might also like