Está en la página 1de 14

INSTITUTO POLITECNICO

NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA DE


INGENIERIA Y TECNOLOGIAS AVANZADAS

 Soto García Carlos Giovanni


 García Santos Jonathan Miguel

Grupo: 2MM3

SISTEMAS NEURODIFUSOS

EXAMEN - REPORTE

Tovar Corona Blanca


IMPLEMENTACIÓN USANDO MATLAB DE UN SISTEMA DE
RECONOCIMIENTO DE PATRONES POR REDES NEURONALES PARA LA
INSPECCIÓN VISUAL DE GAJOS DE MANDARINAS

Resumen del proyecto


Este Proyecto pretende abordar el reconocimiento de patrones utilizando como herramienta las
redes neuronales, para solventar los problemas de la inspección de gajos de mandarina.

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.

La inspección visual realizada por humanos en fábricas, supone aproximadamente el 10 % de los


costes de producción, y su eficiencia está en torno al 60 % deacuerdo a los datos tomados en la
internet. Además, no pueden proporcionar funciones avanzadas de clasificación.

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

• Posibilidad de ampliaciones y/o modificaciones

• Clasificador potenciado mediante redes neuronales

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.

El cerebro humano que con unos 100.000 millones de


neuronas (1011) están aún muy lejos de lo que, por
ejemplo, el procesador más moderno implementa: 60
millones de elementos. Esto hace que, a pesar de conseguir
tiempos de conmutación extremadamente bajos con la
tecnología actual, la conectividad que se logre sea limitada
(Figura 4).

A pesar de no poder alcanzar dicha potencia, las redes


neuronales son sistemas ideales para reconocimiento de
objetos, formas, texturas, predicciones bursátiles,
meteorología local, etc., gracias en gran parte a la
capacidad que poseen para generalizar una vez entrenadas.
Además, mediante ciertos algoritmos pueden incluso
aprender mientras trabajan.

Resumiendo, las redes neuronales son un ejemplo de


procesamiento paralelo, con las ventajas que éste tiene,
como la potencia, la tolerancia a fallos y caída a parte de la
red, pero evitando los problemas del verdadero
multiprocesamiento, debido a la simplicidad de los nodos.

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.

Estudiándolas con detenimiento hemos considerado 4 características


que permiten una discriminación excelente: la longitud máxima vertical
del gajo, la longitud máxima horizontal del gajo, el área del gajo y el
cociente entre el perímetro al cuadrado y el área, cada una con el
propósito de detectar una particularidad del gajo.
SOFTWARE DESARROLLADO:
Software que permite catalogar los gajos como preparado para envasar , procesado para jugo,
procesado para comida de animal, procesado para basura y proporcionar índices de calidad, para
diferentes categorías que se correspondan con distintas utilidades de los gajos.

La red usada es una perceptron multicapa utilizando un aprendizaje supervisado.

Modular: el programa se divide en 3 módulos principales: el analizador de gajos, encargado de


extraer las características, el entrenador de la red neuronal y el clasificador de los gajos, enlazadas
por la interfaz.

Analizador de gajos

• Extraer características

Entrenador de redes

• Tipos de redes

• Tipos de errores

• Algoritmo

• Estructura

Clasificador de gajos

• Calidad de gajo

• Visualización por colores

Las imágenes usadas para entrenar la red son :


El codigo fuente es el siguiente:

Para entrenar la red usamos el siguiente codigo


clc;
clear all;

%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
%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];

P2=[p12 p22 p32];

w2=rand(1,2);
b2=1;
e=1;
t=[1,0,1];

while(e~=0)

a=hardlim(w2* p12 +b2);


e=t(1)-a;
w2=w2+(e*p12');
b2=b2+e;

a=hardlim(w2* p22 +b2);


e=t(2)-a;
w2=w2+(e*p22');
b2=b2+e;

a=hardlim(w2* p32 +b2);


e=t(3)-a;
w2=w2+(e*p32');
b2=b2+e;
end

%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--
% 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];

P3=[p13 p23 p33];

w3=rand(1,3);
b3=1;
e=1;
t=[1,0,1];

while(e~=0)

a=hardlim(w3* p13 + b2);


e=1-a;
w3=w3+(e*p13');
b3=b3+e;

a=hardlim(w3* p23 + b2);


e=0-a;
w3=w3+(e*p23');
b3=b3+e;

a=hardlim(w3* p33 + b2);


e=1-a;
w3=w3+(e*p33');
b3=b3+e;

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

Para obtener los resultados una vez entrenada la red


%------------------------------------------------------------------------
--
%------------------------------------------------------------------------
--

%Obtencion de imagen binaria


clc

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.

También podría gustarte