Anda di halaman 1dari 21

UD ABOL

UNIVERSIDAD DE AQUINO BOLIVIA

EXAMEN PDS

Carrera: Ingeniería Sistemas

Materia: Procesamiento Digital de Señales

Titulo del trabajo: Examen

Nombre(s): Gutiérrez Quisbert Willka Yann

Macias callisaya Alexis

Diciembre del 2010


1) OBJETIVO GENERAL

El objetivo principal del trabajo es crear un programa de manipulación de colores


de imágenes de tipo RGB en el programa de MAT LAB 7.8.
Para la realización del programa utilizare el GUIDE por que posee herramientas
muy útiles y ventajosas para la programación de la manipulación de colores y que
quieren beneficiarse de las ventajas de un programa.

2) OBJETIVO ESPECIFICO

Los siguientes son los pasos que realizare para una mejor comprensión para la
programación de CONVOLUCION utilizando el GUIDE en MATLAB 7.8 seran:

 Ingresar a un GUIDE
 Entender y utilizar sus herramientas
 Manejo de códigos del GUIDE
 Realizar el Botón 1
 Realizar el Botón 2
 Realizar el Botón 3
 Realizar el Botón 4
 Realizar el Botón 5
 Realizar el Botón 6
 Realizar el Botón 7
 Realizar el Botón 8
 Realizar el Botón 9
 Realizar el Botón 10
 Ingresar una imagen en formato .jpg de tamaño 320x426 pixeles
 Visualizar los resultados de las imágenes filtradas por cada uno de los
Botones

2) Aspectos teóricos

Leyendo imágenes de disco:

>> f = imread('chestxray.jpg')
>> f = imread('D:\imagenes\chestxray.jpg')
>> f = imread('/home/user/chestxray.jpg')
una imagen de color RGB (la mas usada para la visión computacional, además de
ser para matlab la opción default) es representada por una matriz tridimensional m
x n x p, donde m y n tienen la misma significación que para el caso de las
imágenes de escala de grises mientras p representa el plano, que para RGB que
puede ser 1 para el rojo, 2 para el verde y 3 para el azul. La figura 2.2muestra
detalles de estos conceptos

RGB). De tal forma que si se quisiera introducir la imagen contenida en el archivo


data.jpg a una variable para su procesamiento en matlab, entonces se tendría que
escribir en línea de comandos:

> >image=imread(’data.jpg’);

con ello la imagen contenida en el archivo data.jpg quedará contenida en la


variable image.
Una vez que la imagen esta contenida en una variable de matlab es posible utilizar
las funciones para procesar la imagen. Por ejemplo, una función que permite
encontrar el tamaño de la imagen es size(variable)

> >[m, n]=size(image);

en donde m y n contendrán los valores de las dimensiones de la imagen.

Para grabar el contenido de una imagen en un archivo se utiliza la función


imwrite(variable,’nombre del archivo’), en donde variable representa la variable
que contiene a la imagen y nombre del archivo el nombre del archivo con su
respectiva extensión de acuerdo a la tabla 2.1. Suponiendo que la variable image2
contiene la imagen que nos interesa grabar en el archivo dato2.jpg tendríamos que
escribir:

> >imwrite(image2, ’data2.jpg’) ;


Después que realizamos un procesamiento con la imagen, es necesario desplegar
el resultado obtenido, la función imshow(variable) permite desplegar la imagen en
una ventana en el ambiente de trabajo de matlab. Si la variable a desplegar por
ejemplo, es face al escribir en la línea de comandos:
> >imshow(face);

Acceso a píxel y planos en las imágenes

En el caso de imágenes RGB (tal como se explico arriba) estas cuentan con 3
planos uno para cada color que representa. Consideremos ahora que la imagen
RGB contenida en la variable image2 es la mostrada en la figura 2.3, y deseamos
obtener cada uno de los planos que la componen. Entonces escribiríamos:

> >planeR=image2( :, :,1) ;


> >planeG=image2( :, :,2) ;
> >planeB=image2( :, :,3) ;

Si se deseará manipular un píxel de una imagen a color RGB este tendrá un valor
para cada uno de sus planos correspondientes. Supongamos que tenemos la
imagen RGB contenida en la variable image2 y deseamos obtener el valor del
píxel m=100 y n=100 para cada uno de los diferentes planos R, G y B.

Tendríamos que escribir:

> >valueR=image2(100,100,1) ;
> >valueG=image2(100,100,2) ;
> >valueB=image2(100,100,3) ;
Como hacer un proyecto en GUIDE

La Barra de Herramienta: En ella se encuentran lo siguientes botones

Botón de ejecución (Run button ): Al presionarse de crea la figura de la


interfaz diseñada en el Layout Área.

Navegador de Objetos (Object Browser): Muestra todos los objetos que


se encuentra en la figura (en forma de árbol) y a través de Object Browser se
puede seleccionar los objetos.
Propiedades del Inspector (Property Inspector): con esta opción se
asignan y modifican las propiedades de cada objeto en forma personalizada.

Editor del documento .m (M-file Editor): con esta opción se podrá editar
las propiedades de los objetos.

Editor de la barra de herramientas (Toolbar editor): en esta opción


tenemos una variedad de opciones para el GUIDE.

Ficha editor (Tab order editor): editor de la ficha

Editor de Menús (Menú Editor): El redactor de Menú crea menús de


ventana y menús de contexto.

Alineación de Componentes (Align Objects): esta opción permite alinear


los componentes que se encuentra en el área de trabajo (Layout Área) de manera
personalizada.

Controles de la interfaz de guide.


Texto estático (static text).- puede exhibir símbolos, mensajes o incluso valores
numéricos de una GUI, y puede colocarse en lugar deseado. El texto estático no
tiene cadenas de invocación. A continuación mostramos un ejemplo de texto
estático.

El contenido de un texto exhibido puede modificarse si es necesario. Esto se hace


con el comando set. Por ejemplo, ejecute el comando que sigue desde la ventana
de comandos mientras está vigente el ejemplo anterior de orden uicontrol: set (k1,
´string´, ´Ahora aparece un texto modificado.´)

Menú desplegable (Popup Menu).- Los pop-up menús difieren de los menús de
interfaz con el usuario en que pueden aparecer en cualquier punto de la ventana
de figura, mientras que los menús de interfaz con el usuario solo se localizan en la
parte superior.

Presión botón (Push button).- generan una acción cuando das click con el
puntero del ratón sobre ellos. Cuando usted da click en un push button, aparece
presionado; Cuando sueltas el botón del ratón, el botón aparece levantado; y su
rutina de llamada se ejecuta.

Casilla de verificación (Checkbox).- Las casillas de verificación están diseñadas


para realizar operaciones de encendido/apagado. La casilla activa o desactiva la
aparición de los ejes. Las posiciones de encendido/apagado se registran en Value
que puede examinarse con get(handle, ´value´).
Los comandos axis on y axis off se escriben en la cadena de invocación.

Botón de radio (Radio Button).- Cuando solo se usa un botón de radio, no existe
diferencia funcional alguna con respecto a una casilla de verificación. Por otro
lado, los botones de radio en grupo son mutuamente exclusivos (es decir, si un
botón esta encendido, todos los demás botones se apagan), mientras que las
casillas de verificación son independientes entre sí. Sin embargo, esta
características exclusiva de los botones de radio sólo puede implementarse
mediante la programación del usuario en la cadena de invocación.

Barra deslizadora (Slider).- Los sliders aceptan datos de entrada numéricos con
un rango especifico. Los usuarios mueven la barra dejando presionado el botón
del mouse y arrastrándola, Dando click en el canal, en la flecha. La posición de la
barra indica un valor numerico.

Texto editable (Edit Text).- El dispositivo de texto editable permite al usuario


teclear una cadena de entrada. Se pueden escribir varios valores numéricos en
forma de vector o matriz como cadena mediante el mismo dispos itivo.

Marcos (Frame).- El estilo marcos puede servir para agrupar dispositivos como lo
botones de radio o las casillas de verificación.

Botón de palanca (Toogle Button).- El toggle button genera una acción que
indica un estado binario (on o off). Cuando das click en un toggle button , aparece
presionado y permanece así hasta que sueltes el boton de el mouse, y en ese
momento ejecuta la llamada. Un click del mouse subsecuente regresa al toggle
button a su estado original y vuelve a ejecutar la rutina de llamada.

Cajas de lista (Listbox). El componente List Box muestra una lista de artículos y
permite a usuarios seleccionar unos o más artículos.

Estos son todos los comandos que usaremos en la creación de este programa.
4) aspectos prácticos

Realizamos el programa con los siguientes pasos:

Paso 1.- hacemos Click en el icono MATLAB 7.8 y se abre el programa.

Paso 2.- En la barra toolbar de Matlab vemos el icono de GUIDE y le hacemos


click y nos saldrá una ventana y le damos OK.
Paso 3.- Aquí la ventana del Gui con todas sus propiedades

Paso 4.- Empezamos poniendo 10 Push Button, 1 axes y 1 Static Box


Paso 5.- Modificamos los Botones cambiando el color de fondo, color de letra y
tipo de letra.

Color de Fondo

Tipo Letra

Tamaño letra

Color Letra

Nombre del boton

Nombre del Comando


Paso 6.- una vez terminado aquí está el código para cada botó.
Las letras verdes son ayudas en ingles que te brinda el programa MATLAB
function varargout = codigo(varargin)
% CODIGO M-file for codigo.fig
% CODIGO, by itself, creates a new CODIGO or raises the existing
% singleton*.
%
% H = CODIGO returns the handle to a new CODIGO or the handle to
% the existing singleton*.
%
% CODIGO('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in CODIGO.M with the given input
arguments.
%
% CODIGO('Property','Value',...) creates a new CODIGO or raises the
% existing singleton*. Starting from the left, property value pairs
are
% applied to the GUI before codigo_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to codigo_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help codigo

% Last Modified by GUIDE v2.5 03-Dec-2010 11:11:10

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @codigo_OpeningFcn, ...
'gui_OutputFcn', @codigo_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
% End initialization code - DO NOT EDIT
% --- Executes just before codigo is made visible.
function codigo_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 codigo (see VARARGIN)

% Choose default command line output for codigo


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes codigo wait for user response (see UIRESUME)


% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = codigo_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;

% --- Executes on button press in pushbutton2.


function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global segmented_images
imshow(segmented_images(:,:,:,3)), title('objetos verdes');
rgb = getimage(handles.axes1);
%if isempty(rgb), return, end
%formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
%[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');
%if nomb==0, return, end
%fName = fullfile(ruta,nomb);
imwrite(rgb,'1.jpg');

% --- Executes on button press in pushbutton3.


function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global segmented_images
imshow(segmented_images(:,:,:,5)), title('objetos magenta');
rgb = getimage(handles.axes1);
%if isempty(rgb), return, end
%formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
%[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');
%if nomb==0, return, end
%fName = fullfile(ruta,nomb);
imwrite(rgb,'2.jpg');

% --- Executes on button press in pushbutton4.


function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global segmented_images
imshow(segmented_images(:,:,:,4)), title('objetos amarillos');
rgb = getimage(handles.axes1);
%if isempty(rgb), return, end
%formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
%[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');
%if nomb==0, return, end
%fName = fullfile(ruta,nomb);
imwrite(rgb,'3.jpg');

% --- Executes on button press in pushbutton5.


function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global segmented_images
imshow(segmented_images(:,:,:,2)), title('objetos blancos');
rgb = getimage(handles.axes1);
%if isempty(rgb), return, end
%formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
%[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');
%if nomb==0, return, end
%fName = fullfile(ruta,nomb);
imwrite(rgb,'4.jpg');

% --- Executes on button press in pushbutton6.


function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clc
global segmented_images
vidobj = videoinput('winvideo',1,'YUY2_320x240');
preview(vidobj);
pause(2);
snapshot = getsnapshot(vidobj);
RGB = ycbcr2rgb(snapshot);
imshow(RGB);
imwrite(RGB,'C:\foto.bmp','bmp');
imagenASegmentar =imread('c:\foto.bmp');
imshow(imagenASegmentar), title('EJEMPLO');
load regioncoordinates;
nColors = 6;
sample_regions = false([size(imagenASegmentar,1) size(imagenASegmentar,2)
nColors]);

for count = 1:nColors


sample_regions(:,:,count) =
roipoly(imagenASegmentar,region_coordinates(:,1,count),
region_coordinates(:,2,count));
end

%imshow(sample_regions(:,:,2)),title('sample region for red');

cform = makecform('srgb2lab');
lab_imagenASegmentar = applycform(imagenASegmentar,cform);

a = lab_imagenASegmentar(:,:,2);
b = lab_imagenASegmentar(:,:,3);
color_markers = repmat(0, [nColors, 2]);

for count = 1:nColors


color_markers(count,1) = mean2(a(sample_regions(:,:,count)));
color_markers(count,2) = mean2(b(sample_regions(:,:,count)));
end

disp(sprintf('[%0.3f,%0.3f]',color_markers(2,1),color_markers(2,2)));
color_labels = 0:nColors-1;

a = double(a);
b = double(b);
distance = repmat(0,[size(a), nColors]);

for count = 1:nColors


distance(:,:,count) = ( (a - color_markers(count,1)).^2 + ...
(b - color_markers(count,2)).^2 ).^0.5;
end

[value, label] = min(distance,[],3);


label = color_labels(label);
clear value distance;

rgb_label = repmat(label,[1 1 3]);


segmented_images = repmat(uint8(0),[size(imagenASegmentar), nColors]);

for count = 1:nColors


color = imagenASegmentar;
color(rgb_label ~= color_labels(count)) = 0;
segmented_images(:,:,:,count) = color;
end
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clc
global segmented_images
[nombre,ruta] = uigetfile('*.jpg','Imagen JPG');

imagenASegmentar =imresize(imread(strcat(ruta,nombre)),[320 426]);


imshow(imagenASegmentar), title('EJEMPLO');
load regioncoordinates;
nColors = 6;
sample_regions = false([size(imagenASegmentar,1) size(imagenASegmentar,2)
nColors]);

for count = 1:nColors


sample_regions(:,:,count) =
roipoly(imagenASegmentar,region_coordinates(:,1,count),
region_coordinates(:,2,count));
end

%imshow(sample_regions(:,:,2)),title('sample region for red');

cform = makecform('srgb2lab');
lab_imagenASegmentar = applycform(imagenASegmentar,cform);

a = lab_imagenASegmentar(:,:,2);
b = lab_imagenASegmentar(:,:,3);
color_markers = repmat(0, [nColors, 2]);

for count = 1:nColors


color_markers(count,1) = mean2(a(sample_regions(:,:,count)));
color_markers(count,2) = mean2(b(sample_regions(:,:,count)));
end

disp(sprintf('[%0.3f,%0.3f]',color_markers(2,1),color_markers(2,2)));
color_labels = 0:nColors-1;

a = double(a);
b = double(b);
distance = repmat(0,[size(a), nColors]);

for count = 1:nColors


distance(:,:,count) = ( (a - color_markers(count,1)).^2 + ...
(b - color_markers(count,2)).^2 ).^0.5;
end

[value, label] = min(distance,[],3);


label = color_labels(label);
clear value distance;

rgb_label = repmat(label,[1 1 3]);


segmented_images = repmat(uint8(0),[size(imagenASegmentar), nColors]);

for count = 1:nColors


color = imagenASegmentar;
color(rgb_label ~= color_labels(count)) = 0;
segmented_images(:,:,:,count) = color;
end

% --- Executes on button press in pushbutton9.


function pushbutton9_Callback(hObject, eventdata, handles)

global segmented_images
imshow(segmented_images(:,:,:,1)), title('objetos rojos');

rgb = getimage(handles.axes1);
%if isempty(rgb), return, end
%formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
%[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');
%if nomb==0, return, end
%fName = fullfile(ruta,nomb);
imwrite(rgb,'5.jpg');

% hObject handle to pushbutton9 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton10.


function pushbutton10_Callback(hObject, eventdata, handles)
imagen1=imread('1.jpg');
imagen2=imread('2.jpg');
imagen3=imread('3.jpg');
imagen4=imread('4.jpg');
imagen5=imread('5.jpg');
[T,V,W,X,Y,Z]=size(imagen1);
for i=1:T
for j=1:V
for k=1:W
for l=1:X
for m=1:Y
for n=1:Z
imagen6(i,j,k,l,m,n) =
imagen1(i,j,k,l,m,n)
+imagen2(i,j,k,l,m,n)+imagen3(i,j,k,l,m,n)+imagen4(i,j,k,l,m,n)+imagen5(i
,j,k,l,m,n);
end
end
end
end
end
end

figure(1),imshow(imagen1),title('Imagen 1');
figure(2),imshow(imagen2),title('Imagen 2');
figure(3),imshow(imagen3),title('Imagen 3');
figure(4),imshow(imagen4),title('Imagen 4');
figure(5),imshow(imagen5),title('Imagen 5');
figure(6),imshow(imagen6),title('reestructuracion');
% hObject handle to pushbutton10 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton11.


function pushbutton11_Callback(hObject, eventdata, handles)
winopen('C:\C:\Users\yann\Desktop\EXPONER PDS\Manipulacion de
colores.doc')
% hObject handle to pushbutton11 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton14.


function pushbutton14_Callback(hObject, eventdata, handles)
opc=questdlg('¿Desea salir del programa?','SALIR','Si','No','No');
if strcmp(opc,'No')
return;
end
clear,clc,close all
% hObject handle to pushbutton14 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Paso 6.- El programa TERMINADO

Resultado de la manipulación
Restauración de imagen
5) Conclusión

Con el presente trabajo llegamos a cumplir los objetivos que nos trazamos en un
principio, resolver el programa que realiza una manipulación de colores de de una
imagen, podemos observar gracias al GUIDE
Con la realización de este proyecto también notamos que la interfaz de usuario es
muy práctica para la realización de programas.

6) Bibliografía

http://www.matpic.com/MATLAB/MATLAB_GUIDE.html
Manipulación de colores en matlab7.8
http://www.scribd.com/doc/15532859/MANUAL-DE-GUI-EN-MATLAB
http://www.youtube.com/watch?v=xfMXWCX6Ei4

Anda mungkin juga menyukai