You are on page 1of 18

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA

CARRERA ICE PROCESAMIENTO DIGITAL DE SEALES PROFESOR: MIRA GONZALES CARLOS


INTEGRANTES:
MERIDA MENDOZA ISAAC MISAEL SANDOVAL ACEVES GERMAN CAMARGO MUOZ FRANCISCO

REPORTE ACERCA DEL PROYECTO DE FILTRADO DE IMGENES MEDIANTE MATLAB

INTRODUCCION:

El procesamiento digital de imgenes es el conjunto de tcnicas que se aplican a las imgenes digitales con el objetivo de mejorar la calidad o facilitar la bsqueda de informacin. Es el conjunto de tcnicas englobadas dentro del preprocesamiento de imgenes cuyo objetivo fundamental es obtener, a partir de una imagen origen, otra final cuyo resultado sea ms adecuado para una aplicacin especfica mejorando ciertas caractersticas de la misma que posibilite efectuar operaciones del procesado sobre ella. Los principales objetivos que se persiguen con la aplicacin de filtros son:

Suavizar la imagen: reducir la cantidad de variaciones de intensidad entre pxeles vecinos. Eliminar ruido: eliminar aquellos pxeles cuyo nivel de intensidad es muy diferente al de sus vecinos y cuyo origen puede estar tanto en el proceso de adquisicin de la imagen como en el de transmisin. Realzar bordes: destacar los bordes que se localizan en una imagen. Detectar bordes: detectar los pxeles donde se produce un cambio brusco en la funcin intensidad.

Por tanto, se consideran los filtros como operaciones que se aplican a los pxeles de una imagen digital para optimizarla, enfatizar cierta informacin o conseguir un efecto especial en ella.

Resumen: El programa para este proyecto se realizo en matlab con la ayuda de una interfaz de usuario propia del mismo programa la cual tiene programados los eventos propios de cada botn o pop-up men que son los menus que se despliegan. El primer botn es el encargado de abrir la imagen desde nuestros archivos personales que se desea abrir para su posterior manipulacin. El primer pop-up men nos da la opcin de seleccionar entre 9 diferentes filtros cada uno con cualidades distintas que se detallaran mas adelante en el reporte. El segundo pop-up men nos da la opcin de elegir un filtro gaussiano de imgenes variando la varianza del mismo para obtener resultados diferentes en cada unoa de las opciones. Para terminar se tiene el botn de guardar el cual guardara en la carpeta de imgenes una copia de la imagen modificada, las imgenes pueden ser adems refiltradas mediante esta opcin.

Codigo: Este proyecto esta hecho mediante la interfaz de usuario(GUI)de matlab, para su posterior apertura se tendr que teclear guide en la pantalla de inicio de matlab, luego una ventana nos preguntara si queremos hacer un nuevo proyecto o queremos abrir uno para lo cual le damos la opcin de abrir, buscamos el archivo en la localidad que se encuentre y presionamos abrir Como lo muestra la siguiente figura:

A continuacin nos despliega un men para correr el programa, o para la modificacin del programa, como se muestra en la siguiente imagen

La siguiente parte del codigo esta predeterminada al abrir la interfaz y es indispensable no modificarla, adems de que crea todos los los handles con los cuales desplegaremos todo posteriormente en cada menu: function varargout = untitled(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @untitled_OpeningFcn, ... 'gui_OutputFcn', @untitled_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end

% --- Executes just before untitled is made visible. function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to untitled (see VARARGIN)

% Choose default command line output for untitled handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes untitled wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = untitled_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; }

Ahora para la parte de la programacin del primer botn que es de de abrir imagen, tenemos la funcin uigetfile la cual cmo podemos ver en sus parmetros nos habr cualquier archiv jpg que tengamos en nuestras bibliotecas. Mediante la funcin imread leemos la imagen ya especificada anteriormente y mediante el uso del handles podemos desplegarla en el axes numero 1 axes(handles.axes1) como lo muestra la figura:

% --- Executes on button press in abrir. function abrir_Callback(hObject, eventdata, handles) [nombre dire]=uigetfile('*.jpg','Abrir'); if nombre==0 return end imagen=imread(fullfile(dire,nombre)); axes(handles.axes1) image(imagen) handles.img=imagen; guidata(hObject,handles)

Para la siguiente parte del programa se utilizara un pop men el cual es una especie de selector el cual funciona muy semejante a una instruccin switch en c o c++ , ya que se declaran casos con un valor R con el cual a cada posicin del selector el filtro cambie. Una ves abiera la imagen procedemos a pasarla por el primer filtro que es el de escala de grises el cual mediante el comando rgb2gray ,y procedemos mediante el handles a presentarlo en el axes numero 2, como se muestra en la figura:

% --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, eventdata, handles) switch get(handles.popupmenu1,'Value') case 1 return case 2 im=handles.img; gr=rgb2gray(im); axes(handles.axes2) image(gr) colormap gray Para es siguiente filtro que es uno de tipo box o comnmente suavizado se tubo que hacer un promedio de las componentes rojas , verdez y azules de la seal , mediante la funcin fspecial, se hizo un promedio de las componentes y filtradas con la funcin imfilter, la cual es echa especialmente ara el fitrado de imgenes en matlab case 3 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); w=fspecial('average',5); frfil=imfilter(rojo,w); fgfil=imfilter(verde,w); fbfil=imfilter(azul,w); fcfil=cat(3,frfil,fgfil,fbfil); axes(handles.axes2) image(fcfil)

Para este filtro se utilizan los commandos unsharp el cual hace un promedio entre 2 putos de la imagen para asi aadir muestras y se pueda dar una mayor resolucin, y a su vez la funcin replicate hace un filtrado de la imagen y atenua un poco los colores para realzar e valor de las nuevas muestras case 4 im=handles.img; i=im; h=fspecial('unsharp'); realce=imfilter(i,h,'replicate'); axes(handles.axes2) image(realce)

Para la parte del negativo se utilizaron la funcin imadjust que mediante sus parmetros se pueden dar los efectos de negativo u otro tipo de filtro el cual es parecido al laplaciano pero con espectros de color gris case 5 im=handles.img; neg=imadjust(im,[],[1,0]); axes(handles.axes2) image(neg)

Para los prximos tres filtros solo se hizo el filtrado de las tres componentes de la imagen y se igualaron a cero las que se deseaban eliminar case 6 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); im(:,:,2)=0; im(:,:,3)=0; axes(handles.axes2) image(im)

case 7 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); im(:,:,1)=0; im(:,:,3)=0; axes(handles.axes2) image(im)

case 8 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); im(:,:,1)=0; im(:,:,2)=0; axes(handles.axes2) image(im)

Para los siguientes 2 filtros la estructura es similar, ya que se basan en un filtro laplacioano solo que para el ultimo filtro se tiene que hacer un flitrado del promedio de la imagen y su inversa, para asi poder la funcin imadjust para detectar los bordes mas pronunciados de la imagen case 9 im=handles.img; sf=fspecial('prewitt') sc=sf'; foto=rgb2gray(im); b1=imfilter(foto,sf); b2=imfilter(foto,sc); relieve=imadd(b1,b2); axes(handles.axes2) image(relieve)

case 10 im=handles.img; sf=fspecial('prewitt') sc=sf'; foto=rgb2gray(im); b1=imfilter(foto,sf); b2=imfilter(foto,sc); relieve=imadd(b1,b2); dibujo=imadjust(relieve,[],[1 0]); axes(handles.axes2) image(dibujo) otherwise

end function popupmenu1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

Para la segunda parte del programa que es del filtrado gausiano de una imagen con diferente grado de varianza, este filtro suaviza o nubla la imagen proporcionalmente al numero de varianza que tenga, como a continuacin se vera % --- Executes on selection change in popupmenu2. function popupmenu2_Callback(hObject, eventdata, handles) switch get(handles.popupmenu2,'Value') case 1 Filtro con varianza de 0.5 case 2 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); [m n]=size(im); w=fspecial('gaussian',[m n],0.5); frfil=imfilter(rojo,w); fgfil=imfilter(verde,w); fbfil=imfilter(azul,w); fcfil=cat(3,frfil,fgfil,fbfil); axes(handles.axes2) image(fcfil)

Filtro con varianza de 1.5

case 3 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); [m n]=size(im); w=fspecial('gaussian',[m n],1.5); frfil=imfilter(rojo,w); fgfil=imfilter(verde,w); fbfil=imfilter(azul,w); fcfil=cat(3,frfil,fgfil,fbfil); axes(handles.axes2) image(fcfil)

Filtro con varianza de 2.5 case 4 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); [m n]=size(im); w=fspecial('gaussian',[m n],2.5); frfil=imfilter(rojo,w); fgfil=imfilter(verde,w); fbfil=imfilter(azul,w); fcfil=cat(3,frfil,fgfil,fbfil); axes(handles.axes2) image(fcfil)

Filtro con varianza de 3.0 case 5 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); [m n]=size(im); w=fspecial('gaussian',[m n],3.0); frfil=imfilter(rojo,w); fgfil=imfilter(verde,w); fbfil=imfilter(azul,w); fcfil=cat(3,frfil,fgfil,fbfil); axes(handles.axes2) image(fcfil)

Filtro con varianza de 4.0 case 6 im=handles.img; rojo=im(:,:,1); verde=im(:,:,2); azul=im(:,:,3); [m n]=size(im); w=fspecial('gaussian',[m n],4.0); frfil=imfilter(rojo,w); fgfil=imfilter(verde,w); fbfil=imfilter(azul,w); fcfil=cat(3,frfil,fgfil,fbfil); axes(handles.axes2) image(fcfil) otherwise

end function popupmenu2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end Por ultimo solo queda guardar la imagen , mediante la programacin del botn guardar el cual mediante la funcin uiputfile guardaremos la imagen modifixada en formato jpg, pero solo se podr guardar en la carpeta de imgenes de tu computadora. % --- Executes on button press in guardar. function guardar_Callback(hObject, eventdata, handles) axes(handles.axes2) save=getimage(handles.axes2) formatos=('*.jpg'); [nomb,ruta]=uiputfile(formatos,'GUARDAR IMAGEN'); if nomb==0,return,end fName=fullfile(ruta,nomb); imwrite(save,fName);

You might also like