GONZÁLEZ CHÁVEZ ROLANDO CONTROL NEURODIFUSO 3BM4 EXAMEN: CLASIFICACIÓN DE TRES FIGURAS A PARTIR DE FOTOGRAFÍAS DIGITALIZADAS. ®
Código implementado en Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Primera parte del examen. % % % % Código para el procesamiento de las imágenes tomadas por la cámara % % digital. % % % % La cámara utilizada es de una Notebook Acer AspireOne con resolución de % % 640 X 480 pixeles. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all all; ; close all all; ; clc; % Se borran todos los datos. path='C:\Users\compu\Documents\MATLAB\Control path='C:\Users\compu\Documents\MATLAB\Control Neurodifuso\imagenes\'; Neurodifuso\imagenes\'; % Directorio donde se guardan las imágenes originales. P=[]; % Variable donde se guardarán los datos de las imágenes una vez procesadas. for i=1:30 for i=1:30 % Ciclo for para el procesamiento de 30 imágenes, se tomaron 10 % fotografías de cada figura. I=imread([path,'Snapshot_20121030_' I=imread([path,'Snapshot_20121030_',num2str(i), ,num2str(i),'.jpg' '.jpg']); ]); % Se lee la imagen desde un directorio específico que se estableció en % la variable "path" y se guarda en la variable "I", así como selección % de la imagen a procesar, todas las imágenes están en .jpg y a color. I=rgb2gray(I); % La imagen leida se convierte a escala de grises para poder manipular % los datos de la misma desde una sola matriz de información. I=I<105; % Binarización, todos los valores de la matriz I menores al valor de % 105 son 1 y los demás son 0. [a,b]=size(I); % Se obtiene el tamaño de la imagen. P=cat(2,P,reshape(I,a*b,1)); % Se almacenan los datos en P, para esto la imagen actual es % redimensionada de una matriz de 640 X 480 a un vector de 1 X 307200, % al terminar el procesamiento se tiene como resultado una matriz P % donde están guardadas todas las imagenes binarias cuyo dimensión de P % es de 30 X 307200.
imwrite(I,[path,'B_',num2str(i),'.bmp']) % Se guarda la imagen binaria con el nombre de "B_" + el número % de imagen + la extensión ".bmp". end % Fin del ciclo for. save P P; % Se guarda la matriz P en un archivo .mat para su posterior utilización. clear all; close all; clc; % Se borran todos los datos. % Fin del programa. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Segunda parte del examen. % % % % Código para el entrenamiento de la red neuronal con perceptrón para la % % clasificación de tres patrones diferentes a partir de las imágenes % % tomadas por la notebook y posterior al pre-procesamiento realizado en % % la primera parte del examen. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; close all; clc; % Se borran todos los datos. load P; % Se cargan los datos de la matriz P creada durante la primera parte del % examen y que contiene los datos de todas las imágenes binarias acomodadas % por columnas. t=[0,1,0;0,0,1]; % Clasificación con targets. [A,B]=size(P);
% Tamaño de P.
w=rand(A,2);
% Se establece w por un random de datos.
b=zeros(2,1);
% Se establece "b".
contE=0; x=0; y=1; z=0; % Se establecen contadores. "x" cuenta el número de imágenes, que deben ser % de 30 por ciclo completo, "y" cuenta el número de muestras por patrón, % que debe ir de 10 en 10 en un ciclo, "z" cuenta el número total de % iteraciones realizadas y "contE" se encarga de contar el número de veces % que aparece un error de cero. while (contE
e=t(:,y)-a; % Se obtiene el error. for i=1:2 % Ciclo for para cambiar el valor de w con el error obtenido. w(:,i)=w(:,i)+e(i,1)*P(:,x); end % fin de ciclo for. b=b+e; % Cambio de la variable b con el error obtenido. if mod(x,10)==0 % Se cambia el target. y=y+1; % Se realiza conteo de y. end % Fin de condicional. if x==30 % Se ha completado un ciclo de entrenamiento. x=0; % Se reinicia contador. y=1; % Se reinicia contador. end % Fin de condicional. if e==0 % Si el error que se obtiene es cero. contE=contE+1; % Se registra el conteo del error. else % Cualquier otro. contE=0; % Se reinicia contador. end % Fin de condicional. end % Fin de instrucción en while. a=[]; % Se crea variable "a". for i=1:30 % Ciclo for para poner a prueba todas las imágenes binarias. a=cat(2,a,hardlim(w'*P(:,i)+b)); % Se guardan los resultados en "a". if a(:,i)==[0;0] % Si se tiene resultado de target 1. disp('Es un círculo.'); % Se clasifica como círculo. elseif a(:,i)==[1;0] % Si se tiene resultado de target 2. disp('Es un cuadrado.'); % Se clasifica como cuadrado. elseif a(:,i)==[0;1] % Si se tiene resultado de target 3. disp('Es un triángulo.'); % Se clasifica como triángulo. end % Fin de condicional. end % Fin de ciclo for. % Fin del programa.