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);
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;
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);
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.
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);
%%%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
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