Академический Документы
Профессиональный Документы
Культура Документы
Departamento de Electrónica
Profesor Guı́a
Dr. Alejandro Suárez Sotomayor
Palabras Claves
Procesamiento Digital de Imágenes
Monitoreo Geomecánico
2
ABSTRACT
Keywords
Digital Image Processing
Geomechanical Monitoring
3
GLOSARIO
package: Palabra reservada en JAVA que contiene un grupo de clases con ca-
racterı́sticas comunes.
4
Glosario 5
Pablo
6
CONTENIDO
7
CONTENIDO
RESUMEN 2
ABSTRACT 3
GLOSARIO 4
AGRADECIMIENTOS 6
1. INTRODUCCIÓN 10
1.1. Descripción del Problema ............................................................ 11
1.2. Estado del Arte ......................................................................... 12
1.2.1. Instrumentación Geotécnica ................................................ 12
1.2.2. Monitoreo de Desplazamiento.............................................. 13
1.2.3. PDI en Minerı́a ................................................................ 14
5
Contenido 6
CONCLUSIONES 58
REFERENCIAS 60
Bibliografı́a 60
APÉNDICES 61
A. APÉNDICE 1 61
B. APÉNDICE 2 64
B.1. Código MATLAB para Experimento 1............................................ 64
B.2. Códigos MATLAB para Experimento 2 .......................................... 68
B.3. Códigos MATLAB para Experimento 3 .......................................... 69
ÍNDICE DE FIGURAS
7
Índice de Figuras 8
9
Capı́tulo 1
INTRODUCCIÓN
10
1.1 Descripción del Problema 11
Movimientos Superficiales.
Deformaciones de Pozos.
Para nuestro caso, este proyecto forma parte de una nueva generación de
instrumental geotécnico. La magnitud fı́sica de interés es el desplazamiento,
movimientos superficiales de macizo rocoso.
1.2 Estado del Arte 13
Sistema de Prismas: Este sistema de monitoreo está destinado mas que nada a
medición de desplazamiento de taludes mineros en minerı́a a cielo abierto, y consiste
en la medición de la distancia de un conjunto de prismas colocados en el sector moni-
toreado mediante un láser desde una estación base. Desde la estación base se envı́a un
pulso de láser a cada prisma y se obtiene entonces la distancia a la cual está ubicado
cada uno de ellos. Luego se repite el proceso y se puede entonces conocer si ha existido
algún desplazamiento del talud.
CONCEPTOS FUNDAMENTALES
DEL PDI
16
2.2 Procesamiento Digital de Imágenes(PDI) 17
x P(1,n)
P(m,1) P(m,n)
2.4. Resta
La Resta forma parte de las distintas operaciones aritméticas que pueden existir
entre imágenes, corresponde a un algoritmo punto a punto, es decir que el pı́xel de
la imagen resultante, se construye a partir de la operación resta de los pı́xeles de
las imágenes originales que tienen la misma coordenada. Esta operación matemática
permite obtener las diferencias entre dos imágenes sucesivas. Como se ha mencionado
anteriormente el nivel de un pı́xel en la arquitectura actual de un computador, puede
variar entre 0 y 255. Por lo que la resta puede generar en la imagen resultante valores
negativos. Para evitar este problema se puede realizar la resta absoluta entre las dos
imágenes, o bien ajustar el histograma resultante de manera que los pı́xeles tengan
valores dentro del rango permitido. Esta segunda solución, como se muestra en la
figura 2.3, permite obtener mayor información acerca del relieve del objeto detectado
en la resta.
500
400
300
200
100
0
−150 −100 −50 0 50 100 150
500
400
300
200
100
0
0 50 100 150 200 250 300
2.5. Binarización
La Binarización consiste en fijar un umbral en un determinado nivel del pı́xel,
luego el pı́xel de la imagen resultante se lleva a cero o a 255 dependiendo si el nivel
del pı́xel de la imagen original se encuentra sobre o bajo este umbral de binarización.
La imagen original debe estar en escala de grises para poder fijar un solo umbral de
binarización.
return g(x, y) ;
Podemos ver en la figura que al erosionar la imagen (a), la mayorı́a de los cuerpos
desaparece porque sus tamaños son del orden del elemento estructurante, sin embargo
sobreviven 3, imagen (b). Luego al dilatar la imagen, estos 3 cuerpos que sobrevivieron
vuelven a tener el mismo tamaño que tenı́an originalmente, imagen (c). Este algoritmo
en conjunto de erosionar y dilatar recibe el nombre de Open.
2.7 Etiquetado 23
2.7. Etiquetado
Una vez que se han identificado cuerpos en una imagen, puede ser necesario
asignar una etiqueta a cada pı́xel que conforma al cuerpo. Si cada cuerpo identificado
contiene pı́xeles con una determinada etiqueta entonces se pueden lograr fácilmente
procesamientos posteriores, por ejemplo el cálculo del área, filtro de ruido, etc.
Para etiquetar una imagen que tiene cuerpos identificados, se pueden seguir los
siguientes pasos:
A(x,y)
C(x,y)
B(x,y)
If(A(x,y))
C(x,y)=rojo
else
C(x,y)=B(x,y)
De bajo costo.
Este sistema se orientó a estructuras subterráneas pero se esperan que los
resultados se puedan aplicar para el monitoreo geomecánico de estructuras de minas
de rajo abierto.
Para detección de Actividad Geomecánica al interior de una Caverna Subterránea
(como se ilustra en la figura 3.1), se ha utilizado la comparación de imágenes
capturadas desde una cámara IP fija apuntando hacia el sector monitoreado,
empleando la resta como algoritmo de PDI. Al comparar una imagen actual con la
tomada hace un perı́odo de tiempo determinado, se pueden detectar que pixeles de la
imagen anterior han variado considerablemente. Si esta cantidad de pı́xeles excede un
umbral, entonces estaremos hablando de un evento de desprendimiento. La detección
de un desprendimiento de macizo rocoso , puede ser de vital importancia, debido a
que estos desprendimientos son indicios de que un mecanismo de falla estructural esta
tomando lugar [2]. Si ha esto le sumamos generar un historial de la evolución de la
actividad geomecánica dentro de la cavidad subterránea, entonces se puede obtener
aun mayor información de la naturaleza del mecanismo de falla.
Para estimar la magnitud del desprendimiento, entonces se utiliza un algoritmo que
finalmente etiqueta los desprendimientos, y al indexar cada evento, entonces se puede
25
3.1 Metodologı́a de Trabajo 26
saber cual es la cantidad de pixeles que pertenece al evento. El historial se genera una
vez que la imagen se encuentra etiquetada, es decir, una vez que la imagen contiene un
número determinado de eventos, cada uno indexado a una etiqueta y a la magnitud,
entonces la imagen queda almacenada con toda esta información en una base de
datos.
Según los recursos con los cuales cuenta el proyecto, el prototipo del sistema de
monitoreo a desarrollar fue diseñado para realizar experimentos a media escala, y el
desarrollo del software de administración del monitoreo fue pensado para que pudiese
ser escalable y obtener el alcance real que se necesite.
Etapa III
Finalmente en la etapa III, se procedió a desarrollar un software que administra
el monitoreo. Este software fue desarrollado en lenguaje JAVA, de manera que la
aplicación sea independiente de la plataforma, y por permitir desarrollar la aplicación
en un software libre. Esta última etapa sin duda fue que requirió de mayor trabajo,
debido a que el desarrollo del software incluı́a entonces la integración del PDI, la
interfaz con el usuario y la administración de la base de datos para generar el historial
de eventos. Para concluir se realizaron experimentos, resultados que también serán
presentados en una sección final de este capı́tulo.
Foco de Iluminación
Router
Cámara IP
Base de datos
Terminal
3.2.1. Cámara IP
Para la realización de los experimentos a pequeña escala se utilizó una cámara
digital fotográfica Kodak EasyShare V1003( ver figura 3.4). Los experimentos hechos
en pequeña escala como se explicará mas adelante solo tenı́an como objetivo comparar
2 imágenes y no una secuencia de imágenes, por lo tanto solo vasto utilizar una cámara
fotográfica. Para llevar a cabo los experimentos de media escala se utilizó una Cámara
IP Vivotek 3112. El hecho de que se necesitara una cámara IP para el proyecto, es
para tener acceso remoto a la cámara, lo cual abre un número de posibilidades para
la aplicación requerida. Además esta cámara cuenta con un software que permite
realizar capturas de imágenes (”snapshot”) cada un periodo de tiempo configurable,
y enviarlas a un ftp. Las capturas tienen una resolución de 352x240 pı́xeles, por ser
una cámara orientada a la seguridad y transmitir video.
3.2 Componentes del Sistema de Monitoreo 29
3.2.2. Router
Se utilizó un router D-link modelo DIR 300, ( ver figura 3.5). Router inalámbrico
con 4 puertos, con una velocidad de transferencia de datos de hasta 54Mbps. El papel
que cumple el router inalámbrico es realizar la conexión entre la cámara IP y el
terminal. Pero también permite entregar al sistema conectividad a alguna red si es
que existiera, pudiéndose entonces acceder remotamente a las imágenes procesadas
sin tener que estar al lado de la cámara, para nuestro caso, dentro de la cavidad, para
poder acceder al software de monitoreo.
3.2.4. Terminal
El terminal es el elemento en el sistema donde se aloja el software de admi-
nistración del monitoreo, por ende, donde se realiza el PDI. Una caracterı́stica
importante del terminal es que si se aloja la base de datos ahı́, entonces debe tener
suficiente espacio de memoria para almacenar el volumen de información que el
sistema necesitará manejar. Considerando que se requiera almacenar una foto de
buena resolución(1MB), cada una hora por un año, entonces se necesitarı́a de un
disco duro de al menos 10 GB de capacidad, lo cual es bastante realizable respecto de
la capacidad de los disco duros actuales. En el terminal también se aloja un servidor
FTP, donde la cámara IP envia la imagen capturada.
3.2.5. Luxómetro
El Luxómetro (o Luxı́metro) es un instrumento que permite medir el nivel de
iluminancia del ambiente. La unidad de medida es el lux. Este instrumento contiene
una célula fotoeléctrica que capta la luz y la convierte en impulsos eléctricos, los cuales
son representados en un display. El modelo utilizado para realizar los experimentos de
este trabajo fue el luxómetro Digital MASTECH modelo MS6610, ( ver figura 3.7).
Este instrumento permite entonces saber si el ambiente cuenta con la iluminación
necesaria para llevar a cabo el procesamiento digital de la imagen.
Generar una Base de datos con las imágenes procesadas y sus desprendimientos.
Generar una Interfaz Gráfica que permita al usuario revisar las imágenes
procesadas.
Unnamed
VarMng
HandleVariable ThreadMonitor Thread
Util DB GUI
HandleImage
MR
DBHistory InterfazGrafica2 ImageManager
MR2
ImageManager
MR
MyResource PDI
MyR
ThreadPDI
P(x)
... ...
ThreadHistory.start()
ThreadMonitor.start() InterfazGrafica2
nuevo
MyResource
imagen
nuevo
waitFor() ThreadPDI
nuevo(MyResource)
MyResource
start()
PDI con éxito
Sleep()
Fin ciclo
while
InterfazGrafica2.java
ViewHistorial.java
3.3 Software de Monitoreo 37
ViewMonitor.java
ViewOpciones.java
MR InterfazGrafica2 Unnamed
MyResource ImageManager
MR
HandleImage
IG1
Unnamed
ViewMonitor H
IG2
ViewHistorial
JFrame
ViewOpciones
ThreadPDI.java
AjusteHistograma.java
Binarizacion.java
Coloreado.java
Erosion.java
Dilatacion.java
EscaladeGrises.java
Etiquetar.java
La Hebra ThreadPDI
Esta clase genera la hebra encargada de configurar la secuencia de algoritmos que
procesan la imagen. En el diagrama de bloques de la figura 3.15 se muestra como se
agrupan los algoritmos para lograr detectar las diferencias entre las imágenes actual
y pasada. Primero podemos ver que las Imágenes Actual y Pasada se restan capa por
capa, es decir la capa Rojo de la imagen actual menos la capa Rojo de la imagen
pasada, y ası́ respectivamente en cada capa. Luego el resultado de esta resta se lleva
a escala de grises, para luego binarizar. La imagen binarizada ya contiene los cuerpos
blancos que corresponden a las diferencias entre las imágenes, pero también contiene
ruido. Es preciso destacar que el simple hecho de la vibración de obturación de la
cámara provoca que una imagen tomada no sea idénticamente igual que otra. Ésta
pequeña diferencia puede traducirse en ruido, el cual es eliminado erosionando la
imagen, lo que significa disminuyendo el contorno de todos los cuerpos existentes en la
imagen binarizada. Luego con la dilatación los cuerpos de mayor importancia vuelven
aproximadamente a su tamaño original, pero el ruido que desapareció no forma parte
de este proceso de dilatación. Finalmente se procese a colorear la imagen original, tal
como fue explicado en el capı́tulo 2, de manera que se resalte los desprendimientos
en la imagen original.
Como podemos ver en el diagrama de clases de la figura 3.16, se puede ver
la dependencia de todos los algoritmos de procesamiento digital de imágenes con
respecto a la clase ThreadPDI.java, y también se puede apreciar que se instancia un
objeto de la clase MyResource.java, el cual es usado para generar sincronización con
el proceso ThreadMonitor que como ha sido explicado anteriormente, espera por el
resultado de ThreadPDI. En la figura 3.17 se pueden ver las distintas etapas que la
imagen experimenta a medida que pasa por el algoritmo de PDI.
3.3 Software de Monitoreo 39
Opción 1
Imagen Opción 2
Actual
Escala de Opción 3
Resta Binarización Erosión Dilatación Etiquetar Colorear
Grises
Imagen
Pasada
Ajuste
Opción 4
Histograma
Etiquetar2
Binarizacion EscalaDeGrises
eroj
C
d
Colorear MyR Erosion
OperacionResta1 ImageManager
Dilatacion
MyResource
Resta aj
HandleImage
AjustedeHistograma
Unnamed
pixel de cada cuerpo etiquetado. Por ejemplo para el cuerpo con la etiqueta 3, el
primer pixel que se encuentra está en {xinicial , yinicial } = {2, 6}, el último pı́xel
tiene coordenada {xf inal , yf inal } = {3, 8}. Luego se obtiene un promedio de ambas
coordenadas, obteniéndose entonces {xpromedio , ypromedio } = {2, 7}. Realizando esto
en cada cuerpo etiquetado se obtienen los arreglos:
XCoordenadas = 3 2 6 6
3.3 Software de Monitoreo 41
Y Coordenadas = 1 7 4 8
Sin embargo la estimación del área de cada cuerpo se ve afectada por la geometrı́a
del lente de la cámara IP. La geometrı́a convexa del lente provoca que un cuerpo
desprendido en el centro de la imagen tenga mas pixeles que el mismo cuerpo
desprendido en el borde de la Imagen. Realizando pruebas experimentales es posible
verificar cuanto es el área que realmente representa cada pixel de la imagen y se puede
generar entonces una matriz de corrección. Para nuestra aplicación dicha matriz se
llama Matriz Patrón y se adjunta en la carpeta MatrizPatrón del software como un
archivo MatrizPatron.txt. En la figura 3.19 se tiene la Matriz Patrón para nuestro
ejemplo.
Tiempos de Procesamiento
Usando el método currentTimeMillis() de la clase System, fue posible evaluar el
rendimiento de los algoritmos. La clase System forma parte de uno de los package
más importantes de la API Java, el paquete java.lang. Abarca una gran cantidad
de clases e interfaces fundamentales para la programación JAVA, tanto ası́ que esta
incluye automáticamente en la mayoria de los programas desarrolados en entornos de
programación. Para una imagen de 240x352 pı́xeles, como era la imagen capturada
por la cámara IP, entonces los algoritmos tuvieron los siguientes máximos tiempos de
procesamiento:
Etiquetado=0.82[s]
Resta=0.167[s]
Escala de Grises=0.063[s]
Binarizado=0.147[s]
Erosión=0.047[s]
Dilatación=0.064[s]
Ajuste de Histograma=0.057[s]
Coloreado=0.06[s]
Etiquetado=0.9[s]
ThreadHistory.java
3.3 Software de Monitoreo 43
ThreadMonitor.java
DBHistory.java
DBConnection.java
DBOperation.java
DBVariable.java
ViewHistorial.java
Java posee un API llamado JDBC para ejecutar sentencias SQL. Consiste en un
conjunto de clases e interfaces programadas en lenguaje Java y permite interactuar
con la base de datos, de forma transparente al sistema. Todas las clases e interfaces
que conforman al API JDBC se encuentran agrupadas en el package java.sql. Este
paquete contiene clases para descargar los drivers, realizar las conexiones con la base
de datos, consultar por datos y manejar un conjunto de registros. La clase encargada
de la conexión entre la aplicación y la Base de Datos es DBConnection.java. Las
sentencias SQL son ejecutadas y retornan resultados bajo el contexto de una conexión.
Por lo tanto un objeto de la clase DBConnection.java permite generar una conexión,
y será necesario generar un objeto cada vez que se quiera consultar o ejecutar
una instrucción en la base de datos. La clase DBHistory.java tiene implementado
los métodos con sentencias SQL que permiten ingresar y consultar por registros
a las tablas de la base de datos. La clase DBOperation.java tiene implementado
los métodos para consultar por un conjunto de registros, por ejemplo las imagenes
correspondientes de un periodo de tiempo.
La hebra generada por instanciar a ThreadHistory.java se encarga de enviar
periódicamente una captura al archivo “/imageHistory” del software y su información
a la tabla image de la base de datos. De esta manera se tiene registro de el estado
de monitoreo del sector, existan o no eventos. La hebra generada por instanciar a
ThreadMonitor.java se encarga de enviar la imagen actual, temporal y procesada,
solo cuando ocurren eventos, a el archivo “/image” del software. Envı́a la información
del ID, la fecha y ruta del almacenamiento de la imagen a la tabla image change
y la información del área estimada y coordenadas de cada evento a la tabla
3.3 Software de Monitoreo 44
image change item. En los diagramas de clases de la figura 3.21 se pueden ver las
principales clases encargadas de la administración de la base de datos. En Fig. 3.21.a
se ve las dependencias de la clase DBHistory.java.
Se puede ver en el diagrama de clases de la figura 3.21.c como las clases
ThreadHistory.java y ThreadMonitor.java necesitan de la clase DBHistory.java para
hacer llamados SQL a la base de datos para realizar sus requerimientos. El factor
común dentro de los 3 diagramas de clases es DBHistory.java, debido a que es el
encargado de hacer la interfaz entre las peticiones de la aplicación y la base de datos.
La clase ViewHistorial.java también es muy importante dentro de la administración
de la base de datos, ya que se encarga de la interfaz gráfica del historial, por ende
ofrece al usuario acceso a consultar por las imágenes procesadas.
Unnamed
util
Util ViewHistorial JFrame
DB
DBHistory ImageChangeItemjTableMouseListener
ImageChangejTableMouseListener
DBHistory ImageChangejTableKeyListener
DBO con ProviderMouseListener
ImageChangeItemjTableKeyListener
DBOperation DBConnection
con ProviderKeyListener
ThreadHistory
DB
util ImgMng VarMng
ImgMng VarMng
DB util TM
Unnamed Unnamed
ThreadMonitor
Materiales
Foco Fluorescente.
Trı́pode.
Luxómetro.
Procedimiento
Resultados
Al ejecutar el algoritmo desarrollado en MATLAB para detección de de-
sprendimiento,(ver Apéndice B), se etiquetaron todos los desprendimientos que se
generaron artificialmente. Para optmizar el tiempo de los experimentos en MATLAB,
se bajó la resolución de la imagen a 683x911 pı́xeles. Mediante el algoritmo se pudo
escoger dentro de todos los cuerpos etiquetados, aquellos que indicaban una magnitud
considerable. Para este caso se considero magnitud considerable, mayor a 400 [cm2 ],
según la magnitud de la foto(683x911 pı́xeles) cuerpos etiquetados con más de 41,448
pı́xeles. Se puede ver en la figura 3.23 como el algoritmo de PDI es capaz de iden-
tificar los 6 cuerpos desprendidos de la figura (a). En la figura (c) se tiene la Resta
de ambas imágenes, pero con el histograma ajustado, es decir se escala el histograma
de la imagen, que contiene valores negativos, al rango entre 0 y 255. En la figura (d)
se tiene la resta de las imágenes Inicial y con Eventos, para luego Binarizar la figura
(e). En la figura (f) podemos ver la imagen posterior a la eliminación del ruido con
Erosión y Dilatación, y posterior a la selección de los cuerpos de magnitud mayor a
400[cm2 ].
3.4 Ensayos de Evaluación 46
(g) Coloreado
Materiales
Luxómetro.
Terminal.
Lugar de Medición
Procedimiento
Resultados
Para la prueba de alcance se logró determinar que a 24 metros es posible detectar el
desprendimiento de un objeto de prueba de 400[cm2 ], con una iluminancia de 40[lux]
en el sector monitoreado. El cuerpo etiquetado cuenta con 16 pı́xeles. Distancias
mayores a 24 metros el objeto detectado en la binarización se confunde con el ruido
provocado por la obturación de la Imagen. En el experimento para probar el algoritmo
se pudo detectar el objeto desprendido de la imagen original a 24 metros de distancia,
con una iluminancia de 18[lux] y un umbral de binarización de 20 (de la escala de
nivel de gris 0 a 255). El cuerpo detectado consta de 45 pı́xeles. Cabe destacar que
la resolución de la imagen capturada por la cámara IP es de 240x352 pixeles, por lo
tanto el objeto detectado corresponde a un 0,05 % de toda la imagen. En las figuras
3.23 y 3.24 se pueden ver los resultados de ambas pruebas para media escala.
3.4 Ensayos de Evaluación 48
Materiales
Luxómetro.
Terminal.
Elemento Patrón.
Lugar de Medición
Procedimiento experimento
imágenes anteriores, esto debido a que el objeto patrón que se utilizó es blanco y su
nivel de gris se sobrepone ante cualquier otro.
En la figura 3.26, podemos ver como finalmente queda la matriz patrón, con color
rojo se denotan los pı́xeles que representan 6[cm2 ] y con color azul se denotan los
pı́xeles que se fijaron en cero, debido a que es un área que no interesa monitorear.
Podemos ver en la tabla 3.2 que el área de cada pixel puede variar entre 11, 8[cm2 ]
y los 40, 8[cm2 ], por lo que fue necesario llevar a cabo un modelamiento mas acucioso
de lo que representaba cada pixel de la imagen. Con los datos obtenidos anteriormente
se construyeron dos curvas interpoladas cúbicamente en los filas x = 15 y x = 175 de
la imagen. Es decir como se tenian los datos de la representación de área de los pixeles
para las filas {x15 , y0 }...{x15 , yn } y {x175 , y0 }...{x175 , yn } de la imagen, (ver imagen
2.1), entonces se pudo interpolar cúbicamente el valor del área para cada uno de los
pı́xeles de estas filas. Ahora para interpolar la representación de área del resto el resto
de los pı́xeles, se procedió a construir una lı́nea recta por cada una de las columnas
de la imagen, ya que se tienen 2 puntos. También se ponderó con 0 el sector que no
importaba monitorear. El resultado de esta interpolación de datos se puede ver en la
figura 3.28, donde con color azul se denotan los pixeles que representan menos área
en la matriz(0[cm2 ]), y con rojo los pı́xeles que representan mayor área (40, 8[cm2 ]).
3.4 Ensayos de Evaluación 54
Resultados
Para el experimento efectuado a 12 metros de distancia del sector monitoreado,
el sistema fue capaz de detectar los 4 desprendimientos provocados artificialmente,
los cuales quedaron etiquetados y su magnitud fue estimada. En la figura podemos
ver el historial desplegado en la interfaz gráfica de la aplicación una vez detectado
los desprendimientos. Como se puede apreciar, al ocurrir los eventos, se despliega en
la ventana “Event — Log”que han ocurrido 5 desprendimientos, con un área total
de 1374[cm2 ]. El hecho de que se hayan detectado 5 cuerpos en lugar de cuatro,
corresponde a que existe un cuerpo que en el proceso de binarización se ha segmentado
en dos.
3.4 Ensayos de Evaluación 56
58
Conclusiones 59
Es una alternativa de bajo costo y de fácil instalación, por los tipos de elementos
que se requieren.
Puede monitorear zonas de difı́cil acceso, como lo son los caserones subterráneos
ya que fue diseñado para que funcione de forma autónoma y permanente.
[1] R. C. Gonzalez and R. E.Woods, Processing Digital Image, 3rd ed., P. Hall, Ed. 2008,
2002.
[2] G. de Vallejo and L. I., Ingenierı́a Geológica, P. Universitari, Ed. 2002, 2002.
[3] http://www.motionmetrics.com/.
[4] W. K. Prat, Digital Image Processing, 3ra, Ed., 2001.
[5] http://netbeans.org.
60
Apéndice A
APÉNDICE 1
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de datos: ‘monpdi‘
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla ‘config‘
--
--
-- Volcar la base de datos para la tabla ‘config‘
61
62
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla ‘image‘
--
--
-- Volcar la base de datos para la tabla ‘image‘
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla ‘image_change‘
--
--
-- Volcar la base de datos para la tabla ‘image_change‘
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla ‘image_change_item‘
--
--
-- Volcar la base de datos para la tabla ‘image_change_item‘
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla ‘zone‘
--
--
-- Volcar la base de datos para la tabla ‘zone‘
Apéndice B
APÉNDICE 2
function etiquetado2()
I=imread(’original.jpg’);
E=imread(’evento.jpg’);
I1=(I(:,:,1)+I(:,:,2)+I(:,:,3))/3;% Conversion a Escala de Grises
I2=(E(:,:,1)+E(:,:,2)+E(:,:,3))/3;% Conversion a Escala de Grises
R=I1-I2; %Resta de la Imagenes
A=binarizar(R,20);%Binarizacion de la Resta, umbral nivel de gris 20
[nf nc]=size(A);
total=nf*nc;%el area total de la pared fotografiada se
%encuentra representada por nf*nc pixeles
pared=6; %area en metros cuadrados de la pared fotografiada
n=total/pared; %determina cuantos pixeles hay por metro cuadrado
umbral=0.04;%umbral de area en metros cuadrados
x=umbral*n;
subplot (2,2,1),imshow(I);
subplot (2,2,2),imshow(E);
B=double(A)*0;
C=B;
[L,NUM]=bwlabel(A);
%bwlabel entrega una matriz que contiene etiquetas
% de los objetos conectados en A. La matriz retornada (L)
% será de las mismas dimensiones que A
disp(’Cantidad total de desprendimientos:’);
NUM %número de objetos conectados
for i=1:NUM
A3=zeros(nf,nc);
64
B.1 Código MATLAB para Experimento 1 65
for f=1:nf
for c=1:nc
if L(f,c)==i
A3(f,c)=1;
end;
end;
end;
area=sum(sum(A3));
[fil col]=find(A3);
if area>x
disp(’A ocurrido un desprendimiento importante’);
magnitud=area*1/n %magnitud del desprendimiento en m^2
B=B+A3;
else
C=C+A3;
end;
% subplot(2,2,2);
% imshow(A3,[]);
% pause;
end;
factor_de_correccion=resta/255;
B=B/factor_de_correccion;
hist(B);
pause;
B=uint8(B);
imshow(B);
Binarización: binarizar.m
function B=binarizar(A,umbral)
% Binariza la imagen A, fijando el "umbral de binarizacion"
disp(’loading...’);
[nf nc m]=size(A);
if (m==3)
A=(A(:,:,1)+A(:,:,2)+A(:,:,3))/3;%se asegura de trabajar con
%una imagen en escala de grises
end;
B=A;
colormap(gray(256));
umb=umbral;
for f=1:nf
for c=1:nc
if B(f,c)>umb
B(f,c)=255;
else
B(f,c)=0;
end;%if
end;%for
B.1 Código MATLAB para Experimento 1 67
end;%for
B.2 Códigos MATLAB para Experimento 2 68
function D=Exp2_Alcance();
I1=double(imread(’hall1.jpg’));
I2=double(imread(’hall1z.jpg’));
R=abs(I1-I2);
B=binarizar(R,70);
E=erosion(B);
D=dilatacion(E);
imshow(uint8(D));
function D=Exp2_Algoritmo();
I1=double(imread(’Imagen1.jpg’));
I2=double(imread(’Imagen2.jpg’));
R=abs(I1-I2);
EG=(R(:,:,1)+R(:,:,2)+R(:,:,3))/3;
B=binarizar(EG,20);
E=erosion(B);
D=dilatacion(E);
imshow(uint8(D));
Dilatación: dilatacion.m
function B=dilatacion(A)
% Aplica un elemento cuadrado de 9 elementos para dilatar
[H W Z]=size(A);
B=zeros(H,W);
K=[1 1 1;
1 1 1;
1 1 1];
for f=(1+1):(H-1)
for c=(1+1):(W-1)
suma=0;
for ff=-1:1
for cc=-1:1
suma=suma+K(ff+2,cc+2)*A(f+ff,c+cc)/255;
end;
end;
if suma>=1
B(f,c)=255;
else
B(f,c)=0;
end;
end;
end;
B.3 Códigos MATLAB para Experimento 3 69
Erosión: erosion.m
function B=erosion(A)
%Aplica un elemento cuadrado de 9 elementos para erosionar
[H W Z]=size(A);
B=zeros(H,W);
K=[1 1 1;
1 1 1;
1 1 1];
for f=(1+1):(H-1)
for c=(1+1):(W-1)
suma=0;
for ff=-1:1
for cc=-1:1
suma=suma+K(ff+2,cc+2)*A(f+ff,c+cc)/255;
end;
end;
if suma==sum(sum(K))
B(f,c)=255;
else
B(f,c)=0;
end;
end;
end;
Data(1:240,1:352)=6;
Data(200:240,1:352)=0;%sector no monitoreado
Data(1:10,1:160)=0;%sector no monitoreado
file_1 = fopen(’MatrizPatron.txt’,’w’);
for i=1:240
for j=1:352
fprintf(file_1,’ %13.6G\t’,Data(i,j));
end
fprintf(file_1,’\n’);
end
fclose(file_1)
pcolor(Data);
Construcción de archivo MatrizPatron.txt:
GeneracionMatrizPatron24metros.m
B.3 Códigos MATLAB para Experimento 3 70
function Data=GeneracionMatrizPatron24metros()
xi = 1:1:352;
Data=zeros(240,352);
%***Datos Experimentales***%
%**************************%
x1=[1;9;24;42;51;53;83;91;98;131;143;148;172;
182;206;228;273;278;324;333;352;];
y1=[21.3;20.7;20.4;20.4;20.3;26.4;
17.6;16.2;23.9;18.8;19.8;14.9;16.5;
18.6;14.4;11.8;18.4;14.4;19.8;14.5;14.3;];
x2=[1;37;67;72;96;108;121;156;180;215;
234;258;274;313;332;352;];
y2=[37.7123;40.7;40.8;33.1;33.9;34.6;33.4;
34.3;34.9;36.4;36.4;34.6;33.2;33.2;30.8;32.6;];
%***********************%
yi = interp1(x1,y1,xi,’cubic’);
yj = interp1(x2,y2,xi,’cubic’);
deltaX=175-15;
for col=1:352
deltaY=yi(col)-yj(col);
m=deltaY/deltaX;%pendiente de la rexta
for row=1:240
Data(row,col)=m*row+(yi(col)-175*m);
end
end
file_1 = fopen(’MatrizPatron.txt’,’w’);
for i=1:240
for j=1:352
fprintf(file_1,’ %13.6G\t’,Data(i,j));
end
fprintf(file_1,’\n’);
end
fclose(file_1)
Data(1:10,1:160)=0;%sector no monitoreado
Data(210:240,1:352)=0;%sector no monitoreado
pcolor(Data);