You are on page 1of 11

Resolver un laberinto con MatLab

Integrante 1 (Luis Arturo Garca Amzquita)


e-mail: 07030373@upgto.edu.mx

RESUMEN:
considerar dentro del sistema es, un espacio definido
para posicionar el laberinto, en donde no se llegue a
mover, ya que al momento de tomar las fotos lo ideal es
que sean iguales.
Cuando las imgenes salen movidas o fuera de cuadro
ocasiona tambin muchos problemas difciles de
identificar y muchas veces se pierde tiempo buscando
alternativas cuando el problema esta directamente en la
foto y no en la lgica del programa.

El trabajo que se realiza es el resolver un laberinto


con la ayuda de MatLab, para lo cual se utiliza un sistema
de visin y el procesamiento de imgenes de la misma
plataforma.
Dentro del laberinto hay un objeto el cual puede ser
colocado en cualquier parte, el programa identifica la
pieza y a partir de la misma traza la trayectoria hacia la
salida
PALABRAS CLAVE: MatLab, visin, resolver
laberinto.

INTRODUCCIN
MATLAB (abreviatura
de MATrix
LABoratory,
("laboratorio de matrices") es un software matemtico
que ofrece un entorno de desarrollo integrado(IDE) con
un lenguaje de programacin propio (lenguaje M).

Fig. 1. Sistema de visin y laberinto

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.

OBTENCION DE LA IMAGEN Y SELECCIN


DE OBJETO EN EL LABERINTO

El toolbox de MatLab contiene un conjunto de


funciones de los algoritmos mas conocidos para trabajar
con imgenes binarias, transformaciones geomtricas,
manipulacin de color junto con las funciones ya
integradas en MatLab.

Con la foto obtenida teniendo en cuenta las


consideraciones anteriores lo siguiente es empezar a
trabajar con ella dentro de MatLab.
Primero se selecciona la imagen, se cambia a
escala de grises, se binariza y dilata. Se crean tambin
otras 2 matrices del mismo tamao que el de la
imagen las cuales servirn para posicionar el punto
donde esta el objeto y crear la trayectoria de salida.

CREACION DEL LABERINTO Y EL SISTEMA DE


VISION
Lo primero que se realiza es la construccin del
laberinto y un sistema o mueble en donde se pueda
colocar para tomar las fotografas, esta es la parte ms
importante del programa.
Por un lado esta el laberinto, el cual debe tener
bien definidos sus espacios y sus paredes, esto por que
al momento del procesado, si hay espacios ms
pequeos o paredes disparejas crea problemas difciles
de resolver.
El sistema debe tener perfectamente establecido
una altura considerable para la obtencin de las fotos,
tambin debe contar con una buena iluminacin, esto
con el fin de eliminar sombras. Otra cosa importante a

Fig. 2. Imagen dilatada y original


Lo siguiente es identificar el objeto dentro de la
imagen. Lo primero es identificar el numero de objetos
que se encuentran dentro de la imagen y conocer sus
propiedades, esto con el fin de identificar el objeto de

inters y as hacer una seleccin del objeto de inters


que sirve de referencia para encontrar el camino.

CONCLUSIONES

Dependiendo de la intensidad de la dilatacin


pueden aparecer mas de un objeto por lo cual dentro del
mismo programa se incluye un margen para eliminar
todos los que resulten innecesarios y quedarnos solo
con el de inters. Dentro de las propiedades
encontradas tambin esta el centroide de las imgenes,
una vez eliminadas las dems imgenes se asigna una
variable al valor del centroide del objeto en coordenadas
de x, y.

El realizar este programa resulto difcil, aun a pesar


de que ya se tenia el conocimiento previo del
procesamiento de imgenes y trazado de trayectorias.
La adquisicin de las fotos fue de los peores
problemas. Con algunas lograba encontrar la salida pero
si se mova un poco afectaba encerrndolo en un ciclo y
mandando un error, si el laberinto tenia mucha luz en
algunas ocasiones las lneas se brincaban los bordes. En
caso contrario con poca luz me encontraba mas de un
objeto con las mismas dimensiones o en definitiva
dejaba la imagen oscura.
Sumando a todo esto que no hay o por lo menos yo
no encontr una gua en donde se hablara de este tipo
de problemas.

Fig. 3. Objeto seleccionado

Fue de mucha ayuda el volver a ver programas


anteriores realizados en Ubuntu con la librera graphics
ya que en teora era la misma tcnica de incrementar un
punto.

PROCESO DE SOLUCION DEL LABERINTO.


Con el objeto identificado dentro del laberinto y sus
propiedades ya establecidas lo siguientes es indicar un
punto en el lugar donde se encuentra el objeto. Con las
matrices de ceros que se hicieron al principio se marca
el punto y se dan las coordenadas del centroide del
objeto.
Lo siguiente es ir trazando el camino lo cual se
logra dando incrementos en la posicin del punto,
dependiendo hacia donde se mueve, se decide si se
debe incrementar o decrementar, esto se hace con
ciclos For. Con ayuda de los while se puede ir repitiendo
el cdigo mientras la condicin se siga cumpliendo.
Una condicin importante es el poder decir al
programa que cuando encuentra una pared, es decir un
uno debe cambiar de direccin.

Fig. 4 laberinto resuelto

REFERENCIAS

Erik Valdemar Cuevas Jimnez, Daniel Zaldvar


Navarro, Visin por computadora utilizando
MatLab y el toolbox de procesamiento digital de
imgenes, pp.34
Rafael Gonzalez, Richard Woods, Steven
Eddin,digital image processing using MatLab,
Prentice Hall, pp 344, 2004
Procesamiento de imagines con MatLab,
http://loonely113.blogspot.com
Rosa Echeverra Lbano, Dpto. ecuaciones
diferenciales y anlisis numrico, universidad
de Sevilla, introduccin rpida a MatLab, pp
39.
Ubuntu http://www.ubuntu-es.org

Daniel
Hernndez
Moedano,
instalacin y uso de graphics
para Ubuntu

PROGRAMA PRINCIPAL
3

%LIMPIA LA PANTALLA Y TODAS LAS


VARIABLES
clear all
clc
%SELECCIONA IMAGEN Y LA CAMBIA A
ESCALA DE GRISES
A=imread('i39.jpg');
figure(1)
imshow(A);

J(i,j)=0;
else

J(i,j)=1;

end

end
end
figure (5)
imshow(J);
J=not(J);
imshow(J)

[d1,d2,d3] = size(A);
O=d1*d2;
if (d3>=3)
d=rgb2gray(A);
else
d=(A);
end

[L Ne]=bwlabel(J);
%% CALCULAR LAS PROPIEDADES DE LOS
OBJETOS DE LA IMAGEN
propied= regionprops(L);
hold on

% MUESTRA EL TAMAO DE LA IMAGEN Y


CREA OTRAS DOS MATRICES DEL MISMO
TAMAO
C=size(A);
B=zeros(d1,d2);
B2=zeros(d1,d2);

%% BUSCAR AREAS MENORES


s=find([propied.Area]>20 &
[propied.Area]<370);

figure(2)
imshow(d);
whos

%% MARCAR AREAS MENORES


for n=1:size(s,2)

%HACE UN RECORTE DE LA IMAGEN


g=d1;
h=d2;

rectangle('Position',propied(s(n)).Bou
ndingBox,'EdgeColor','b','LineWidth',2
)
end

for i= 1:g
for j=1:h
m(i,j)=d(i,j);

%BUSCA LAS COORDENADAS DEL CENTROIDE


DEL OBJETO
point=round(propied(s(1)).Centroid);

end

x=point(1);
y=point(2);

end
%CONVIERTE LA IMAGEN A BINARIO
A=0;
I=im2double(d);
for i=1:d1
for j=1:d2
A=A + I(i,j);
end
end

%% ELIMINAR AREAS MENORES


for n=1:size(s,2)
d=round(propied(s(n)).BoundingBox);
J(d(2):d(2)+d(4),d(1):d(1)+d(3))=0;
end
pause

media=A/O*.6;
J=im2double(m);
for i=1:g
for j=1:h
if J(i,j)< media

j=1;
for i=1:size(s)
i;
if i~0 ;

v(j)=i;
j=j+1;
end
end

cont2=0;
close = point;

v;

%CODIGO PARA RESOLVER EL LABERINTO

A=imread('i39.jpg');
imshow (A)

while cont1 ~= 1
%derecha
der=0;
%derecha
while der ~= 1

%SE BINARIZA LA IMAGEN


BA=im2bw(A,0.28);
q=size(BA);
figure(2)
imshow(BA);

x=x+1;
if base2(y,x+5)== 1
der =1;
end

figure(1)
imshow(BA);

for i=1:5
for j=1:5

%SE INVIERTE LA BINARIZACION


for i=1:q(1)
for j=1:q(2)

base(i+y,j+x) = .80;

if BA(i,j) == 0;

end

base(i,j)=1;
base2(i,j)=1;
end

end
end

end
end

%abajo
ab=0;

figure(2)
imshow(base);

%abajo
while ab ~= 1

figure(3)
imshow(base2);

y=y+1;

%PONE UN PUNTO EN EL LABERINTO QUE


SERVIRA PARA RESOLVERLO

if ((y+5) > 460)

for i=1:5
for j=1:5

figure(3)
imshow(base);
cont2=1;
cont1=1;

base(i+x,j+y) = 1;
end

end

end
figure(2)
imshow(base)
impixelinfo

if base2(y+5,x)== 1
ab =1;
end

rep =0;
cont1=0;

for i=1:5
for j=1:5

%izquierda
while izq ~= 1

base(i+y,j+x) = .80;
end

x=x-1;

end

if base2(y,x-5)== 1
izq =1;
end

end
%izquierda
izq=0;
%izquierda
while izq ~= 1

for i=1:5
for j=1:5
base(i+y,j+x) = .80;

x=x-1;

end

if base2(y,x-5)== 1
izq =1;
end

end
end
%abajo
ab=0;
%abajo
while ab ~= 1

for i=1:5
for j=1:5
base(i+y,j+x) = .80;

y=y+1;

end
end

if ((y+5) > 460)

end
%arriba
arr=0;
%arriba
end

while arr ~= 1

figure(3)
imshow(base);
cont2=1;
cont1=1;

if base2(y+5,x)== 1
ab =1;
end

y=y-1;
if base2(y-5,x)== 1
arr =1;
end

for i=1:5
for j=1:5

for i=1:5
for j=1:5

base(i+y,j+x) = .80;

base(i+y,j+x) = .80;
end

end

end

end

end

end
rep=rep+1;
if (x==close(1) && y==close(2))

%izquierda
izq=0;

cont1=1;
end
if (rep >=35)
cont1=1;
end
end

end
end
end
%abajo
ab=0;
%abajo
while ab ~= 1

rep2=0;
close2 = point;
while cont2 ~= 1

y=y+1;

%arriba
arr=0;
%arriba

if ((y+5) > 460)


figure(3)
imshow(base);
cont2=1;
cont1=1;

while arr ~= 1
y=y-1;
end

if base2(y-5,x)== 1
arr =1;
end

if base2(y+5,x)== 1
ab =1;
end

for i=1:5
for j=1:5

for i=1:5
for j=1:5

base(i+y,j+x) = .80;
end

end

base(i+y,j+x) = .80;

end

end

end

end

%derecha
der=0;
%derecha
while der ~= 1

%izquierda
izq=0;
%izquierda
while izq ~= 1

x=x+1;

x=x-1;

if base2(y,x+5)== 1
der =1;
end

if base2(y,x-5)== 1
izq =1;
end

for i=1:5
for j=1:5

for i=1:5
for j=1:5

base(i+y,j+x) = .80;

base(i+y,j+x) = .80;

end

arr=0;
%arriba

end

while arr ~= 1

end

y=y-1;

%arriba
arr=0;
%arriba

if base2(y-5,y)== 1
arr =1;
end

while arr ~= 1
y=y-1;

for i=1:5
for j=1:5
base(i+y,j+x) = .80;

if base2(y-5,x)== 1
arr =1;
end

end
for i=1:5
for j=1:5

end
end

base(i+y,j+x) = .80;

%izquierda
izq=0;
%izquierda
while izq ~= 1

end
end

x=x-1;

end

if base2(y,x-5)== 1
izq =1;
end

%izquierda
izq=0;
%izquierda
while izq ~= 1
x=x-1;

for i=1:5
for j=1:5

if base2(y,x-5)== 1
izq =1;
end

base(i+y,j+x) = .80;
end

for i=1:5
for j=1:5

end
end

base(i+y,j+x) = .80;

%abajo
ab=0;

end
end

%abajo
while ab ~= 1

end

y=y+1;

%arriba

if ((y+5) > 460)

end

figure(3)
imshow(base);

arr =1;

for i=1:5
for j=1:5
base(i+y,j+x) = .80;

cont2=1;
break;
end

end

if base2(y+5,x)== 1
ab =1;
end

end
end
%derecha
der=0;

for i=1:5
for j=1:5

%derecha
while der ~= 1

base(i+y,j+x) = .80;

x=x+1;

end

if base2(y,x+25)== 1
der =1;
end

end
end

for i=1:5
for j=1:5

rep2=rep2+1;
if (x==close2(1) && y==close2(2))
cont2=1;

base(i+y,j+x) = .80;

end
if (rep2 >=10)

end

figure(3)
imshow(base)
cont2=1;

end
end
%arriba
arr=0;
%arriba

end
end
rep3 =0;
cont3=0;
cont4=0;
close = point;

while arr ~= 1
y=y-1;
if base2(y-5,x)== 1
arr =1;
end

%arriba
arr=0;
%arriba
while arr ~= 1

for i=1:5
for j=1:5
base(i+y,j+x) = .80;

y=y-1;
if base2(y-5,x)== 1

%derecha
while der ~= 1

end
end

x=x+1;

end
%derecha
der=0;

if base2(y,x+25)== 1
der =1;
end

%derecha
while der ~= 1

for i=1:5
for j=1:5

x=x+1;
if base2(y,x+25)== 1
der =1;
end

base(i+y,j+x) = .80;
end
end

for i=1:5
for j=1:5

end
%arriba
arr=0;
%arriba

base(i+y,j+x) = .80;
end

while arr ~= 1

end

y=y-1;

end
%arriba
arr=0;
%arriba

if base2(y-5,x)== 1
arr =1;
end

while arr ~= 1
for i=1:5
for j=1:5
base(i+y,j+x) = .80;

y=y-1;
if base2(y-5,x)== 1
arr =1;
end

end
end

for i=1:5
for j=1:5
base(i+y,j+x) = .80;

end
%derecha
der=0;
%derecha
while der ~= 1

end
end

y=x+1;

end
%derecha
der=0;

if base2(y,x+5)== 1
der =1;
end

10

end
for i=1:5
for j=1:5

end

base(i+y,j+x) = .80;

end

11

You might also like