Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NACIONAL
Grupo: 2MM3
SISTEMAS NEURODIFUSOS
EXAMEN - REPORTE
El trabajo se ayuda de una herramienta versátil como Matlab para desarrollar toda una aplicación
que pueda servir como clasificador de patrones. Estos patrones serán imágenes extraídas de una
cinta transportadora industrial de gajos de mandarinas, y el objetivo primario del proyecto es
hacer una distinción entre clases en principio fácilmente separables. Pero este Proyecto va más
allá incluso, llegando a establecer una clasificación con índices de calidad de gajos. Además de
esto, la aplicación desarrollada se muestra como una plataforma multiclasificadora debido a las
múltiples opciones que ofrece, lo que permitiría utilizarla para cualquier tipo de aplicación de
reconocimiento de patrones, independientemente de la naturaleza de los mismos.
Se ha realizado una comparación entre distintos tipos de redes neuronales, considerando no solo
el número de nodos y capas entre la entrada y salida, sino también las funciones de activación y el
algoritmo de minimización del error. Se discutirán y ofrecerán los resultados obtenidos, así como
la bondad y robustez del sistema en conjunto como clasificador. Al mismo tiempo se especulará
sobre su aplicación en tiempo real, y los potenciales usos que podría tener.
INTRODUCCIÓN:
Es indudable la importancia que tienen hoy en día los sistemas autónomos. De la misma forma,
son bien conocidos los problemas de estos sistemas en el campo de la visión artificial, y más
concretamente en el reconocimiento de formas y objetos. Por esta razón, han sido muchos los
proyectos que han estudiado este aspecto, sobre todo desde el auge de la tecnología electrónica
en la década de los 70.
Este proyecto se apoya en las redes neuronales, una disciplina muy potente, ampliamente
probada y comprobada y que proporciona capacidades avanzadas de discriminación y aprendizaje
de nuevos modelos.
OBJETIVOS:
• Creación de un sistema flexible, robusto, potente, eficaz, y eficiente
FUNDAMENTOS:
El motor clasificador de nuestro sistema está basado en las redes neuronales.
Una red neuronal es un modelo artificial del cerebro humano, pero debido a la inmensidad del
modelo natural, no podemos más que emular en cierto modo su funcionamiento a pequeña
escala.
Una neurona básica está recogida en la Figura 1. Su comportamiento se puede resumir en que la
suma de sus entradas ponderadas activa su salida cuando se supera un umbral fijado por una
determinada función de activación Figura 2.
La verdadera potencia de las redes neuronales radica en la combinación de cientos o miles de ellas
Figura 3.
Una vez construida una red neuronal artificial, debe ser
entrenada. Para ello se le alimenta con un conjunto de
patrones y las salidas que deseamos que produzcan, y
mediante un algoritmo de minimización de error, se va
reduciendo el error de salida ajustando las conexiones
entre ellas.
METODOLOGÍA:
Disponemos de imágenes de gajos de mandarinas de 200x300 píxeles en escala de grises para ser
analizadas, como las de las figuras 4 y 5.
Analizador de gajos
• Extraer características
Entrenador de redes
• Tipos de redes
• Tipos de errores
• Algoritmo
• Estructura
Clasificador de gajos
• Calidad de gajo
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
%Entrenamiento de imagen
ima1=double(imread('GAJOC.bmp'));
ima2=double(imread('GAJOR.bmp'));
ima3=double(imread('GAJOC1.bmp'));
for m=1:200
for n=1:300
if ima1(m,n)<=245
ima1(m,n)=0;
else
ima1(m,n)=1;
end
if ima2(m,n)<=245
ima2(m,n)=0 ;
else
ima2(m,n)=1;
end
if ima3(m,n)<=245
ima3(m,n)=0 ;
else
ima3(m,n)=1;
end
end
end
p1=reshape(ima1,60000,1);
p2=reshape(ima2,60000,1);
p3=reshape(ima3,60000,1);
P=cat(2,p1,p2,p3);
%figure(1)
%imshow(ima1)
%figure(2)
%imshow(ima2)
%figure(3)
%imshow(ima3)
w=rand(1,60000);
b=1;
e=1;
t1=1;
t3=1;
t2=0;
while(e~=0)
a=hardlim(w*P(:,1)+b);
e=t1-a;
w=w+(e*p1');
b=b+e;
a=hardlim(w*P(:,2)+b);
e=t2-a;
w=w+(e*p2');
b=b+e;
a=hardlim(w*P(:,3)+b);
e=t3-a;
w=w+(e*p3');
b=b+e;
end
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% EL AREA SERA TOMADA DE LA IMAGEN BINARIA ENTRE DEPENDIENDO LOS pixeles
en 0 QUE
% TENGA LA MANDARINA por lo tanto el area sera medida en pixeles, las
% longitudes es la longitud maxima que tiene el gajo de mandarina
contador1=1;
contador2=1;
contador3=1;
for m=1:200
for n=1:300
if ima1(m,n)==0
fila1(contador1)=m;
columna1(contador1)=n;
Area1=contador1-1;
contador1=contador1+1;
end
if ima2(m,n)==0
fila2(contador2)=m;
columna2(contador2)=n;
Area2=contador2-1;
contador2=contador2+1;
end
if ima3(m,n)==0
fila3(contador3)=m;
columna3(contador3)=n;
Area3=contador3-1;
contador3=contador3+1;
end
end
end
Contorno1 = bwperim(ima1,4);
Contorno2 = bwperim(ima2,4);
Contorno3 = bwperim(ima3,4);
contador1=1;
contador2=1;
contador3=1;
Posiciones1=cat(1,fila1,columna1);
Posiciones2=cat(1,fila2,columna2);
Posiciones3=cat(1,fila3,columna3);
LVertical1=max(fila1)-min(fila1);
LHorizontal1=max(columna1)-min(columna1);
LVertical2=max(fila2)-min(fila2);
LHorizontal2=max(columna2)-min(columna2);
LVertical3=max(fila3)-min(fila3);
LHorizontal3=max(columna3)-min(columna3);
Area1;
Area2;
Area3;
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% Obtencion del perimetro de imagen
for m=1:200
for n=1:300
if Contorno1(m,n)==0
fila1(contador1)=m;
columna1(contador1)=n;
Perimetro1=contador1-1;
contador1=contador1+1;
end
if Contorno2(m,n)==0
fila2(contador2)=m;
columna2(contador2)=n;
Perimetro2=contador2-1;
contador2=contador2+1;
end
if Contorno3(m,n)==0
fila3(contador3)=m;
columna3(contador3)=n;
Perimetro3=contador3-1;
contador3=contador3+1;
end
end
end
Perimetro1;
Perimetro2;
Perimetro3;
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% Entrenamiento de la neurona de longitudes
p12=[LVertical1;LHorizontal1];
p22=[LVertical2;LHorizontal2];
p32=[LVertical3;LHorizontal3];
w2=rand(1,2);
b2=1;
e=1;
t=[1,0,1];
while(e~=0)
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% Entrenamiento de la neurona de Areas y Perimetros
p13=[Area1;Perimetro1;Perimetro1^2/Area1];
p23=[Area2;Perimetro2;Perimetro2^2/Area2];
p33=[Area3;Perimetro3;Perimetro3^2/Area3];
w3=rand(1,3);
b3=1;
e=1;
t=[1,0,1];
while(e~=0)
end
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
%Entrenamiento Neurona Final elige si esta bn o esta mal
PF=[0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1];
tF1=[0 0 1 1 0 1 1 1];
tF2=[0 1 0 1 1 1 1 1];
wF1=rand(1,3);
bF1=randn(1);
wF2=rand(1,3);
bF2=randn(1);
for epocas=1:150
for q=1:8
%malas
aF1=hardlim(wF1*PF(:,q)+bF1);
e1(:,q)=tF1(:,q)-aF1 ;
wF1=wF1+e1(:,q)*PF(:,q)';
bF1=bF1+e1(:,q);
%buenas
aF2=hardlim(wF2*PF(:,q)+bF2);
e2(:,q)=tF2(:,q)-aF2 ;
wF2=wF2+e2(:,q)*PF(:,q)';
bF2=bF2+e2(:,q);
end
end
imaf=double(imread('GAJOPRUEBA2.bmp'));
for m=1:200
for n=1:300
if imaf(m,n)<=245
imaf(m,n)=0;
else
imaf(m,n)=1;
end
end
end
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
%segunda Salida
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% EL AREA SERA TOMADA DE LA IMAGEN BINARIA ENTRE DEPENDIENDO LOS pixeles
en 0 QUE
% TENGA LA MANDARINA por lo tanto el area sera medida en pixeles, las
% longitudes es la longitud maxima que tiene el gajo de mandarina
contadorf=1;
for m=1:200
for n=1:300
if imaf(m,n)==0
filaf(contadorf)=m;
columnaf(contadorf)=n;
Areaf=contadorf-1;
contadorf=contadorf+1;
end
end
end
Contornof = bwperim(imaf,4);
contadorf=1;
Posicionesf=cat(1,filaf,columnaf);
LVerticalf=max(filaf)-min(filaf);
LHorizontalf=max(columnaf)-min(columnaf);
Areaf;
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% Obtencion del perimetro de imagen
for m=1:200
for n=1:300
if Contornof(m,n)==0
filaf(contadorf)=m;
columnaf(contadorf)=n;
Perimetrof=contadorf-1;
contadorf=contadorf+1;
end
end
end
Perimetrof;
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
%Primera salida
pf1=reshape(imaf,60000,1);
n1=(w*pf1)+b;
tf1=hardlim(n1);
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
%Segunda Salida
pf2=[LVerticalf;LHorizontalf];
n2=(w2 * pf2)+b2;
tf2=hardlim(n2);
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% tercera salida
pf3=[Areaf;Perimetrof;Perimetrof/Areaf];
n3=(w3 * pf3)+b3;
tf3=hardlim(n3);
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% Salida de la capa final
PFF=[tf1;tf2;tf3];
nFF1=(wF1 * PFF)+bF1;
tFF1=hardlim(nFF1);
nFF2=(wF2 * PFF)+bF2;
tFF2=hardlim(nFF2);
%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% Salida Total
Resultado=[tFF1;tFF2];
if Resultado==[1;1]
fprintf('el gajo es procesado para envasar Alta calidad')
elseif Resultado==[0;1]
fprintf('el gajo es procesado para Hacer jugo Media calidad -completo
pequeno o buena area-')
elseif Resultado==[1;0]
fprintf('el gajo es procesado para Comida de animal Baja calidad')
else
fprintf('el gajo es basura se procesa para fertilizante Baja Calidad')
end
RESULTADOS:
Presentaremos ahora los resultados obtenidos con el sistema, cuya eficiencia es superior al 90% o
almenoz tenga un poco mas de velocidad en su clasificacion.
Al igual con esto reduciremos la nomina de la empresa ya que sera necesaria menos mano de obra
para la clasificacion de los gajos.
En el trabajo se ha definido un índice de fiabilidad para que al entrenar la red sepamos ya cual será
la eficiencia del clasificador.
CONCLUSIONES:
Se ha desarrollado una plataforma potente, versátil, de eficacia comprobada y con
aplicaciones reales en el campo de la industria.
Es un sistema de bajo coste que puede instalarse de forma inmediata mediante una
cámara y un ordenador corrientes, contribuyendo así a la optimización del proceso
productivo.
El clasificador de patrones del sistema proporciona distintas formas de discriminación,
estableciendo mínimos de calidad o mínimos de seguridad en una clasificación
determinada.