Upload
diego-cg
View
50
Download
1
Embed Size (px)
Citation preview
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]
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)