Logo Studenta

Software-De-Indexado-De-Patrones-De-DifracciAn--SIPAD----Tania-Campos

¡Este material tiene más páginas!

Vista previa del material en texto

POSGRADO/MSC 
 
 
 SEP SES TNM 
 
 
INSTITUTO TECNOLÓGICO DE CHIHUAHUA II 
 
 
 
 
“SOFTWARE DE INDEXADO DE PATRONES DE 
DIFRACCIÓN” 
 
TESIS 
PARA OBTENER EL GRADO DE 
 
 
MAESTRA EN SISTEMAS COMPUTACIONALES 
 
 
PRESENTA 
 
TANIA PAOLA CAMPOS FRÍAS 
 
 
 
 
DIRECTOR DE TESIS 
 M. C. RAFAEL 
 VÁZQUEZ PÉREZ 
 CO-DIRECTOR DE TESIS 
M. C. CARLOS ELÍAS 
 ORNELAS GUTIÉRREZ
 
CHIHUAHUA, CHIH., JUNIO DE 2016 
 
 
ii 
 
 
 
 
 
 
 
 
 
 
 
 
DEDICATORIA 
 
Dedico este trabajo a mi madre, quien me ha acompañado en mi trayecto profesional y de vida 
y ha sido siempre el mayor pilar de mis logros; quien me enseña cada día que no hay mejor 
forma de hacer las cosas que con responsabilidad y trabajo duro. 
 
 
 
 
 
iii 
 
 
 
 
 
 
 
 
 
 
 
AGRADECIMIENTOS 
 
A mis maestros por todo el conocimiento compartido, por su paciencia y por la ayuda que me 
brindaron a lo largo de este camino. 
 
A Carlos Elías Ornelas Gutiérrez y Rafael Vázquez Pérez por la orientación tan acertada, por el 
inmenso apoyo que recibí en cada una de las etapas de este trabajo y por la confianza en mí para 
concluirlo. 
 
Agradezco además al Consejo Nacional de Ciencia y Tecnología (CONACYT) por el soporte 
otorgado para la culminación satisfactoria de mis estudios de maestría. 
 
 
 
iv 
 
 
 
RESUMEN 
El presente trabajo de tesis se realizó con el objetivo de desarrollar un software que permita a 
los investigadores del Centro de Investigación en Materiales Avanzados (CIMAV) analizar 
imágenes que contienen patrones de difracción, así como efectuar mediciones de ángulos y 
distancias entre distintos puntos característicos (señales) comprendidos en los patrones bajo 
estudio. La razón principal para elaborar este sistema es que los investigadores deben realizar 
el proceso de análisis e indexación de patrones de difracción de forma manual, tarea que se torna 
tediosa provocando que sea más propensa a errores humanos. Por lo tanto, se diseñó una 
herramienta para asistir en la indexación de patrones en imágenes y facilitar el proceso de 
detección de señales, logrando con ello una medición más acertada entre los elementos del 
patrón de difracción analizado. 
Así, para el desarrollo de esta aplicación se utilizaron diversos algoritmos de análisis de 
imágenes a través de la librería especializada en el procesamiento de imágenes llamada OpenCV 
en conjunto con el lenguaje de programación C++, empleando además el Entorno de Desarrollo 
Integrado (IDE) Qt Developer. 
 
 
 
 
v 
 
 
 
ABSTACT 
The main objective of this thesis is to develop a software to allow CIMAV (Centro de 
Investigación en Materiales Avanzados) researchers to analize images containing diffraction 
patterns and perform measurements in the pattern to obtain the distances and angles between 
the characteristic spots (signals) in the image. 
The primary reason to build this system is that researchers need to carry out the process of 
analyzing and indexing the diffraction pattern manually. This can become a very tedious labour, 
which could make it more susceptible to human errors. 
Therefore, the software tool presented here was designed to assist in the diffraction patterns 
indexing process, simplifying the actions followed to identify signals in the image resulting in 
more accurate measurement between the elements on the diffraction pattern under analysis. 
Hence, many image processing algorithms were used to achieve the construction of this 
application, consumed from the specialized image-processing library OpenCV along with the 
C++ programming language and the Integrated Development Environment (IDE) called Qt 
Developer. 
 
 
 
vi 
 
 
 
ÍNDICE 
ÍNDICE ............................................................................................................... vi 
ÍNDICE DE FIGURAS ...................................................................................... viii 
I. INTRODUCCIÓN ....................................................................................... 1 
1.1. Introducción al proyecto ....................................................................... 1 
1.2. Planteamiento del problema ................................................................ 3 
1.3. Alcances y limitaciones ........................................................................ 5 
1.4. Justificación ......................................................................................... 6 
1.5. Objetivos .............................................................................................. 7 
1.6. Supuestos o Hipótesis. ........................................................................ 8 
II. ESTADO DEL ARTE .................................................................................. 9 
III. MARCO TEÓRICO .................................................................................. 11 
3.1. Cristalografía ...................................................................................... 11 
3.2. TEM ................................................................................................... 15 
3.3. Fase ................................................................................................... 16 
3.4. Indexación .......................................................................................... 17 
3.5. Ley de Bragg ...................................................................................... 18 
3.6. Redes neuronales .............................................................................. 19 
3.7. Análisis de imágenes ......................................................................... 21 
3.8. Procesamiento de imágenes .............................................................. 26 
3.9. Operaciones morfológicas ................................................................. 29 
3.10. OpenCV ........................................................................................... 32 
3.11. Operaciones matemáticas ............................................................... 52 
IV. DESARROLLO ........................................................................................ 54 
4.1. Análisis ............................................................................................... 55 
4.2. Diseño ................................................................................................ 56 
4.3. Implementación .................................................................................. 63 
5.4. Pruebas .............................................................................................. 84 
V. RESULTADOS Y DISCUSIÓN ................................................................ 90 
VI. CONCLUSIONES .................................................................................... 92 
BIBLIOGRAFÍA ................................................................................................ 93 
ANEXOS .......................................................................................................... 97 
 
 
vii 
 
 
Anexo 1. Pruebas del sistema aplicadas a imágenes con diferentes tipos de 
patrones de difracción, con la imagen original a la izquierda y la imagen procesada 
por SIPAD. .................................................................................................... 97 
Anexo 2. Publicación en la revista Journal of Mechanical Engineering and 
Automation .................................................................................................... 99 
Anexo 3. Diagrama de clases del sistema. ................................................. 107 
Anexo 4.Manual de usuario SIPAD. ........................................................... 108 
GLOSARIO .....................................................................................................126 
 
 
 
 
viii 
 
 
 
ÍNDICE DE FIGURAS 
Figura III.1. Estructura cristalina, imagen microscópica y patrón de difracción de un diamante. .. 12 
Figura III.2. Estructura, imagen microscópica y patrón de difracción de una muestra de grafito. . 13 
Figura III.3. Estructura, imagen microscópica y patrón de difracción de una muestra de carbón. . 14 
Figura III.4. Patrón de difracción del diamante y del carbón. ......................................................... 16 
Figura III.5. Ejemplo de indexación de un patrón de difracción. .................................................... 17 
Figura III.6. Representación gráfica de la ley de Bragg. ................................................................. 18 
Figura III.7. Imagen binaria............................................................................................................. 21 
Figura III.8. Imagen en escala de grises. ......................................................................................... 21 
Figura III.9. Imagen RGB. .............................................................................................................. 22 
Figura III.10. Representación de un píxel en una imagen RGB y con colores indexados. ............. 23 
Figura III.11. Imagen de Lena en escala de grises y su histograma. ............................................... 25 
Figura III.12. Ejemplos de Kernel del filtro de media .................................................................... 26 
Figura III.13. Ejemplo de un kernel de 3x3 para un filtro Gaussiano. ............................................ 27 
Figura III.14. Estructura del kernel vertical y horizontal del operador Sobel. ................................ 28 
Figura III.15. Tipos principales de conectividad. ............................................................................ 29 
Figura III.16. Ejemplo de dilatación y erosión sobre el objeto A, por medio del kernel B. ............ 31 
Figura III.17. Umbralización tipo binaria. ....................................................................................... 38 
Figura III.18. Umbralización tipo binaria inversa. .......................................................................... 39 
Figura III.19. Umbralización tipo trunca. ........................................................................................ 39 
Figura III.20. Umbralización a cero. ............................................................................................... 39 
Figura III.21. Umbralización a cero inversa. ................................................................................... 40 
Figura III.22. Método ADAPTIVE_THRESH_MEAN_C aplicado a una imagen. ....................... 41 
Figura III.23. Método ADAPTIVE_THRESH_GAUSSIAN_C aplicado a una imagen. ............... 41 
Figura IV.1. Etapas del modelo en cascada. .................................................................................... 54 
Figura IV.2. Prototipo de la interfaz de usuario. ............................................................................. 57 
Figura IV.3. Pasos del algoritmo de pre-procesamiento. ................................................................ 58 
Figura IV.4. Acercamiento a los píxeles de distintas señales en la imagen. ................................... 60 
Figura IV.5. Flujo de navegación del usuario. ................................................................................ 61 
Figura IV.6. Flujo de navegación del sistema. ................................................................................ 62 
Figura IV.7. Valor de la escala medida con la aplicación SimpleMeasure a) y con SIPAD b). ..... 86 
Figura IV.8. Medición realizada sobre la misma imagen con a) SimpleMeasure y b) SIPAD. ...... 87 
Figura IV.9. Medición de ángulos con a) SimpleMeasure y b) con SIPAD. .................................. 88 
Figura IV.10. Mediciones de distancia entre varios pares de puntos realizadas con SIPAD .......... 89 
 
 
 
 
ix 
 
 
 
ÍNDICE DE TABLAS 
Tabla VI.1. Comparación del algoritmo final............................................................................ 91 
 
 
 
INTRODUCCIÓN 
 
1 
 
 
 
I. INTRODUCCIÓN 
1.1. Introducción al proyecto 
La microscopía electrónica de transmisión (TEM, por sus siglas en inglés) es una técnica muy 
empleada para la caracterización de materiales a nivel mundial, esta técnica es ampliamente 
usada en la investigación científica para comprender el comportamiento de los materiales en 
ciencia básica, determinar o predecir propiedades de los materiales en ciencia aplicada y 
ampliamente usada en la industria como técnica de caracterización de materiales; el Centro de 
Investigación en Materiales Avanzados de Chihuahua (CIMAV) cuenta con tres TEM que son 
usados en proyectos de ciencia básica, ciencia aplicada y servicios a la industria. 
De estos TEM se obtienen imágenes que permiten caracterizar una muestra con excelente 
resolución (incluso resolución atómica) determinando su morfología, estructura cristalina, 
composición elemental y determinación de estructura electrónica. Esta amplia caracterización 
permite asociar las características del material con sus propiedades físicas y químicas y predecir 
el comportamiento que tendrán los materiales en determinadas circunstancias, permitiendo 
identificar sus propiedades para utilizarlos en las aplicaciones específicas que se requieran. 
Una parte muy importante dentro de la caracterización de materiales a partir de las imágenes 
obtenidas del TEM es la estructura cristalina, ya que la mayoría de las veces es la responsable 
de muchas propiedades de los materiales; de tal forma que para un material con la misma 
composición química pero diferente estructura cristalina (arreglo periódico de los átomos) las 
propiedades cambian drásticamente, como en el caso del carbón, donde sus propiedades son 
muy diferentes si hablamos de diferentes estructuras cristalinas (carbón amorfo, grafito, 
diamante, nanotubos de carbono, etc.), además existen otros materiales que pueden formar 
múltiples estructuras cristalinas como el caso del fierro el cual puede formar estructuras 
cristalinas diferentes, en combinación con otros átomos como el oxígeno (FeO, Fe2O3, Fe3O4), 
el carbono (Fe3C), etc. Los elementos que conforman las estructuras cristalinas de las cuales se 
componen los materiales, influyen enormemente en sus propiedades químicas y físicas y, aun 
cuando sus tamaños se encuentran en el orden de los nanómetros, es necesario determinar qué 
 
INTRODUCCIÓN 
 
2 
 
 
tipo de estructura cristalina está formada en el material de interés para conocer las cualidades y 
capacidades del mismo. 
Para obtener la estructura cristalina de los materiales por TEM, se incide un haz de electrones 
sobre la muestra de interés. Cuando el haz llega a la muestra, algunos de los electrones son 
difractados de acuerdo a la ley de Bragg, por lo que si el material posee una estructura cristalina 
(ordenada), el resultado será un patrón de difracción con señales muy intensas, las cuales están 
relacionadas con las distancias interplanares (distancia entre átomos con repetición 
periódicamente) del material en estudio. 
Los patrones de difracción obtenidos son capturados mediante el uso de cámaras especiales, las 
cuales generan imágenes cuya representación normalmente está dada en escalas nanométricas, 
y posteriormente se realizan mediciones de distancias y ángulos de forma manual sobre dichos 
patrones para determinar la o las fases (ordenamiento cristalino de sus átomos) presentes en el 
material, así como relaciones de orientación y crecimiento cristalino. A este proceso de 
medición se le conoce como indexación. 
Un método que ha sido ampliamente utilizado para el reconocimiento y clasificación de patrones 
es la utilización de redes neuronales, en áreas tan diversas como medicina, biología, física, 
química (Amato,et al., 2013), inteligencia artificial, robótica, videojuegos (Kumar & Mitra 
Thakur, 2012) y astronomía (De la Calleja & Fuentes, 2004). Esto se debe a que las redes 
neuronales analizan y clasifican de manera muy confiable los patrones dados en una fracción 
del tiempo que le tomaría a una persona, eliminando además los posibles errores humanos que 
esto último implica. 
Asimismo, las redes neuronales tienen la capacidad de aprender, por lo que aún si se introducen 
patrones desconocidos se adaptará a los nuevos datos y en base a la información que ya tiene 
deducirá la respuesta. Esto es muy útil cuando se tiene una gran cantidad de muestras que deben 
procesarse y clasificarse, ya que la red se encarga de la clasificación en un periodo de tiempo 
mucho menor del que le toma a una e incluso a varias personas hacerlo. 
 
 
 
INTRODUCCIÓN 
 
3 
 
 
1.2.Planteamiento del problema 
La indexación de patrones de difracción tradicionalmente en el CIMAV se ha realizado en forma 
manual, con poca automatización y no se han desarrollado sistemas previos a este proyecto. 
Generalmente se utiliza el software Simple Measure, un programa que permite a los 
investigadores medir de forma semiautomática los ángulos y distancias entre ciertos puntos del 
patrón de difracción que considere relevantes; es decir, el usuario determina y selecciona los 
puntos en la imagen que le son de interés para que el software realice las mediciones pertinentes 
sobre ellos. Además, se pueden colocar referencias horizontales y verticales que faciliten la 
medición, así como cambiar los colores de las mediciones, aumentar o reducir el zoom de la 
imagen e incluir una barra con información de la imagen como escala, fecha, hora, longitud de 
onda del haz de electrones y la longitud de cámara (distancia en centímetros a la cual se tomó 
la fotografía del patrón). 
Asimismo, se utilizan procesadores de imágenes como imageJ o Digital Micrograph. Estos 
programas permiten realizar mediciones directas sobre los patrones de difracción; sin embargo, 
no son aplicaciones especializadas para indexar patrones de difracción por lo que trabajar con 
ellos hace que el proceso sea aún menos automático que con el llamado Simple Measure. 
Existen también otras aplicaciones que permiten el análisis de patrones de difracción. Una de 
ellas es ProcessDiffraction, la cual es gratuita y ofrece diversas herramientas para extraer 
información de patrones de difracción, como la localización del centro del patrón, generación 
de semicírculos para reducir la probabilidad de procesar “anillos falsos” que pudieran afectar el 
análisis, permitir al usuario encontrar posibles valores de indexación al ingresar ciertos datos al 
programa, entre otras (Lábár, "ProcessDiffraction": A computer program to process electron, 
2000; Lábár, Consistent indexing of a (set of) single crystal SAED pattern(s) with the 
ProcessDiffraction program, 2004) 
Otro programa es Java Electron Microscope Simulator (JEMS), desarrollado por Pierre 
Stadlemann para el análisis de difracción de electrones y la simulación de imágenes en la ciencia 
de análisis de materiales. Este software es comercial, sin embargo ofrece una versión demo 
limitada (Stadelmann, JEMS, 2004; Stadelmann, Simulation of diffraction patterns and high, 
2008) 
 
INTRODUCCIÓN 
 
4 
 
 
Por su parte, la aplicación Image-Pro Plus es un poderoso analizador de imágenes que permite, 
entre otras cosas: 
 Obtener imágenes desde una cámara, microscopio, videograbadora o escáner en formato 
TIFF, JPEG, BMP, TGA, y muchos otros. 
 Rastrear y contar objetos manual o automáticamente. 
 Medir atributos de los objetos tales como área, ángulos, perímetro, redondez y relación 
de aspecto, en las unidades de medida preferidas por el usuario. 
 Visualizar los datos de forma numérica, estadística o gráfica. 
La licencia de este software tiene un costo de aproximadamente $5,500.00 USD y está 
bloqueado por hardware, por lo que incluye un centinela que se conecta a un puerto paralelo o 
USB de la máquina en la que se vaya a utilizar el programa para activarlo (Media Cybernetics, 
Image-Pro Plus, 2003; Media Cybernetics, Image-Pro Plus, 2003). 
Obtener información en el TEM requiere de un análisis detallado para su correcta interpretación. 
Al ser los patrones de difracción de tanta importancia, requieren que se les preste especial 
atención; sin embargo, la interpretación de los mismos es realizada en forma manual por lo que 
el tiempo invertido para ello es grande, además existe una elevada posibilidad de que ocurran 
errores humanos y la dificultad para observar todos los detalles que puede llegar a tener el 
patrón. Contar con un sistema inteligente capaz de agilizar la interpretación de los datos, así 
como evitar errores humanos de medición, mostrando todos los detalles del patrón, enriquecerán 
en gran manera el estudio del material en cuestión, asimismo incrementarán en gran manera la 
capacidad de análisis al disminuir el tiempo de interpretación. 
 
 
 
INTRODUCCIÓN 
 
5 
 
 
1.3.Alcances y limitaciones 
Se desarrollará un software que indexe de manera semiautomática patrones de difracción dados; 
es decir, que realice la medición de distancias y ángulos de ciertos patrones en base a un punto 
principal que el software deberá determinar. El tipo de patrones de difracción que se procesarán 
serán únicamente aquellos con forma de puntos, debido a las grandes diferencias que existen 
entre cada uno de los distintos tipos de patrones (de anillos, puntos, líneas, arcos, etc.). 
Si bien en el inicio del proyecto se consideró el uso de redes neuronales para la clasificación de 
los patrones de difracción a analizar, se descartó el uso de las mismas debido a que al procesar 
únicamente un tipo de patrón en específico (de puntos), ya no fue necesaria la utilización de un 
clasificador, puesto que ya no hay elementos qué catalogar. 
Asimismo, el software no incluirá la caracterización del material, lo que significa que solamente 
otorgará ciertos valores numéricos como resultado y usando estos resultados, la determinación 
del material debe realizarse por el investigador mediante otros sistemas o herramientas. De esta 
forma, el desarrollo del sistema no comprende el uso de una base de datos para la consulta e 
interpretación de los valores obtenidos y, por consiguiente, tampoco la determinación del 
material o de los materiales incluidos en la muestra analizada. 
 
 
 
INTRODUCCIÓN 
 
6 
 
 
1.4.Justificación 
En la actualidad los investigadores del CIMAV realizan el proceso de medición sobre las 
imágenes de patrones de difracción ya sea de forma manual (imprimiendo la imagen obtenida 
del TEM para utilizar regla y transportador en ella o midiendo con estas herramientas 
directamente sobre el monitor) o auxiliados de un software de medición que tiene 
implementados instrumentos para que los investigadores realicen las mismas actividades que en 
el proceso manual, con la diferencia que se tienen utensilios virtuales en lugar de los físicos 
convencionales. 
Estos métodos de indexado, aún con la experiencia de los investigadores, son propensos a 
errores humanos; razón por la cual mediante este proyecto se pretende semi-automatizar el 
indexado de patrones de difracción de modo que el proceso de indexado de las imágenes sea 
más sencillo, rápido y eficaz para los investigadores del CIMAV. 
Asimismo, la interpretación de los resultados de forma rápida y precisa estará al alcance de los 
investigadores interesados mediante la instalación del software desarrollado para el indexado de 
patrones de difracción en sus equipos. De esta manera la computadora con el software propio 
del microscopio solamente será utilizada para la captura de imágenes, y cada investigador podrá 
realizar el análisis de los resultados en cualquier otro equipo de cómputo que tenga el software 
instalado. 
 
 
 
INTRODUCCIÓN7 
 
 
1.5.Objetivos 
El objetivo de este trabajo es desarrollar un software capaz de procesar una imagen de un patrón 
de difracción obtenida de un Microscopio Electrónico de Transmisión que sugiera al usuario la 
localización de los distintos puntos de interés en la imagen para que en base a ellos pueda 
realizar las mediciones correspondientes, facilitando con esto la interpretación de los patrones 
destacando los detalles difíciles de observar a simple vista. 
 
 
 
INTRODUCCIÓN 
 
8 
 
 
1.6.Supuestos o Hipótesis. 
El desarrollo de una herramienta para indexar patrones de difracción permitirá auxiliar a los 
investigadores y alumnos del CIMAV en el análisis de imágenes de patrones de difracción 
mediante la automatización del proceso de identificación de puntos de interés en ellos y 
simplificando así la tarea de indexación a los usuarios. 
 
 
 
ESTADO DEL ARTE 
 
9 
 
 
 
II. ESTADO DEL ARTE 
Image Processing Library & Toolbox (IPLT) es un entorno modular para el procesamiento de 
patrones de difracción de electrones (Schenk, Philippsen, Engel, & Walz, 2013). Todos sus 
módulos están escritos en el lenguaje C++ y pueden accederse desde una interfaz gráfica de 
usuario o a través de línea de comandos para satisfacer las necesidades de uso de los usuarios 
avanzados tanto como de usuarios inexpertos. Este software permite al usuario determinar la 
forma de la barrera (beam stopper) que cubre el haz de electrones más intenso, el cual 
generalmente se encuentra en el punto central del patrón de difracción, a fin de proteger el lente 
de la cámara; además de ubicar y verificar el espacio entre los distintos átomos del patrón, 
conocido como enrejado, y la posición de dicha barrera (Jensen, 2010). 
Asimismo, existe un programa para la búsqueda de picos de intensidad de las señales llamado 
AMP (Autocorrelation Mapping Program, Programa de Mapeo de Auto-correlación), en el cual 
se utiliza un algoritmo de auto correlación para intensificar la señal y centrar la imagen en el 
enrejado aparente. Es importante la intensificación de la señal para mejorar la relación señal a 
ruido, así como para identificar los puntos de difracción ocultos por la barrera o por el ruido de 
la imagen. AMP está escrito en MATLAB para el sistema operativo Windows. Está compilado 
en un programa ejecutable de libre descarga y para uso académico (Jiang, Georgieva, Nederlof, 
Liu, & Abrahams, 2011; Leiden, 2011). 
Otro programa para el análisis de patrones de difracción es el desarrollado por Li (2015) para la 
simulación y el análisis de patrones de difracción de muestras monocristalinas, llamado SAED2s 
(Simulation and Analysis of Electron Diffraction Pattern, Simulación y Análisis de Patrones de 
Difracción de Electrones). Entre las características de SAED2s se incluye la simulación 
interactiva de patrón de difracción de electrones de los granos de cristal individuales, cálculo de 
la intensidad, procesamiento de múltiples fases y la mejora en la indexación del patrón de 
difracción y la coincidencia con el patrón experimental. Este software se encuentra disponible 
de manera gratuita por un tiempo limitado, en el cual solamente se puede trabajar sobre los 
archivos que vienen precargados en la herramienta, por lo que para analizar otros patrones es 
necesario comprar una licencia. 
 
ESTADO DEL ARTE 
 
10 
 
 
Hay también un programa para uso no comercial llamado CrysTBox (Crystallographic Toolbox, 
Caja de Herramientas Cristalográficas) que contiene un conjunto de instrumentos automatizados 
para ayudar a los cristalógrafos y microscopistas de electrones con su trabajo diario. Entre las 
herramientas para el análisis automatizado de los patrones de difracción de electrones con las 
que cuenta este programa se encuentra diffractGUI, cuyo propósito es la determinación 
automática de la orientación de la muestra, además de identificar puntos de difracción 
individuales, medir distancias y ángulos interplanares en patrones de difracción de puntos y de 
disco (Klinger, 2014). CrysTBox está disponible sobre demanda, por lo que para obtener los 
archivos de instalación es necesario contactar al autor. 
Otra de las herramientas utilizadas es CSpot, un programa para la simulación, la indexación y 
el análisis de tres tipos de patrones de difracción de electrones: de puntos, Kikuchi y de anillo 
(policristalinos). CSpot permite la manipulación de los patrones de difracción simulados en 
tiempo real y de manera interactiva mediante el cambio y la visualización de la orientación de 
los cristales y a través del ajuste de parámetros de simulación, por ejemplo, condiciones de 
operación del microscopio (CrystOrient, 2015). Se puede solicitar una versión de prueba del 
software mediante un formulario de contacto; los precios de una licencia van de 3500 a 7000 
euros, dependiendo del tipo requerido (académico o completo). 
 
 
MARCO TEÓRICO 
 
11 
 
 
 
III. MARCO TEÓRICO 
3.1.Cristalografía 
La cristalografía es la ciencia dedicada al estudio de los materiales cristalinos, sus propiedades 
físicas y químicas, su forma externa, su estructura interna y la manera en que sus átomos están 
ordenados (Borchardt-Ott, 2011; Goel, 2006). 
Los cristales son sólidos cuyos átomos se encuentran organizados en intervalos regulares entre 
sí. Esta regularidad en su acomodo puede describirse en términos de elementos de simetría; 
estos elementos determinan la simetría de las propiedades físicas de un cristal. El patrón atómico 
de un cristal sería entonces el patrón básico que es descrito por dichos elementos de simetría 
(Kelly, Groves, & Kidd, 2000). 
Por ejemplo, el carbono puede presentarse en tres formas principales: diamante, grafito y carbón 
amorfo. El diamante es el material más duro que se conoce; como se puede observar en la Figura 
III.1a, posee una estructura cristalina cúbica con enlace covalente entre sus átomos que lo hace 
especialmente útil en herramientas de corte y esmeriles debido a su dureza (Considine & 
Considine, 1995; Groover, 2007). Pearce (2003) muestra en su trabajo de tesis una imagen 
microscópica de una muestra de diamante (Figura III.1. Estructura cristalina, imagen 
microscópica y patrón de difracción de un diamanteb) y el patrón de difracción que genera esa 
muestra (Figura III.1. Estructura cristalina, imagen microscópica y patrón de difracción de un 
diamantec). 
 
MARCO TEÓRICO 
 
12 
 
 
 
Figura III.1. Estructura cristalina, imagen microscópica y patrón de difracción de un diamante. 
El grafito por su parte tiene un alto contenido de carbono cristalino en forma de capas. Los 
enlaces entre los átomos de estas capas son covalentes y por tanto fuertes, pero las capas 
paralelas están levemente adheridas entre sí. Esta estructura, que se muestra en la Figura III.2a, 
hace que la resistencia y otras propiedades del grafito varíen de manera significativa con la 
dirección; esto explica el porqué, en forma de polvo, el grafito posee características de poca 
fricción debido a la facilidad con que se separa en capas, siendo muy valioso como lubricante 
(Andrés Cabrerizo, Antón Bozal, & Barrio Pérez, 2008; Groover, 2007). Asimismo se muestra 
en la Figura III.2. Estructura, imagen microscópica y patrón de difracción de una muestra de 
grafitob la imagen obtenida con un TEM de una muestra de grafito y el patrón de difracción 
asociado a ella en la Figura III.2. Estructura, imagen microscópica y patrón de difracción de una 
muestra de grafitoc (Pearce, 2003). 
 
MARCO TEÓRICO 
 
13 
 
 
 
Figura III.2. Estructura, imagen microscópica y patrón de difracción de una muestra de grafito. 
Finalmente, el carbón está constituido por microcristales en los que los planos hexagonales no 
están bien orientados, sino desplazados unos respecto a otros y solapando entre sí, indicando en 
consecuencia un grado mucho menor de cristalinidad que en el diamante o el grafito. Por lotanto presentan un elevado porcentaje de la estructura altamente desordenada, como se muestra 
en la Figura III.3.a, produciendo el plegamiento de láminas hexagonales dejando huecos de muy 
diferente tamaño. En la Figura III.3. Estructura, imagen microscópica y patrón de difracción de 
una muestra de carbónb se observa la imagen tomada con un TEM de una muestra de carbón 
amorfo y su respectivo patrón de difracción en la Figura III.3. Estructura, imagen microscópica 
y patrón de difracción de una muestra de carbónc (Bokhonov, et al., 2014; Considine & 
Considine, 1995; Martín Martínez, 1990). 
 
MARCO TEÓRICO 
 
14 
 
 
 
Figura III.3. Estructura, imagen microscópica y patrón de difracción de una muestra de carbón. 
 
 
 
MARCO TEÓRICO 
 
15 
 
 
3.2.TEM 
Para el análisis de los materiales cristalinos se utiliza un Microscopio Electrónico de 
Transmisión (TEM por sus siglas en inglés). Este instrumento utiliza un haz de electrones 
acelerados que atraviesan la muestra por una de sus caras, proporcionando una imagen formada 
por los electrones que salen por la cara contraria (Vázquez Nin & Echeverría, 2000). 
Cuando los electrones impactan con la muestra generan una serie de señales que se relacionan 
directamente con la estructura atómica del material. En el TEM los electrones transmitidos se 
utilizan para crear imágenes que revelan la estructura interna de la muestra, el tamaño y 
distribución de las partículas, defectos en la red atómica, etc. A partir de estas imágenes puede 
hacerse un estudio cristalográfico detallado del material investigado permitiendo, entre otras 
cosas, analizar la composición química de partículas, estudiar defectos micro-estructurales en 
materiales cristalinos, medir tamaños, ángulos y radios a escalas nanométricas e identificar fases 
cristalinas (Martínez Orellana, n.d.). 
 
 
MARCO TEÓRICO 
 
16 
 
 
3.3.Fase 
Todo sistema uniforme desde el punto de vista de su composición química y de su estado físico 
se denomina sistema homogéneo o fase. Una fase puede consistir a su vez en cierta cantidad de 
materia que puede estar en una sola porción o dividida en ciertas porciones más pequeñas. Por 
lo tanto, un sistema constituido por más de una fase se denomina heterogéneo, en el que cada 
una de las partes homogéneas constituye una fase distinta netamente diferenciada por sus 
características y propiedades particulares (Barrow, 2002; Rajadell & Movilla, 2005). Si se 
comparan los patrones de difracción de las fases del carbono correspondientes al diamante 
(Figura III.4a) y al carbón (Figura III.4b) se pueden observar ciertas similitudes entre ambos, 
sin embargo el patrón de difracción del diamante se compone de intensas señales que hacen 
notoria la diferencia entre ambas derivaciones del carbono. 
 
Figura III.4. Patrón de difracción del diamante y del carbón. 
Por lo tanto, en un sistema heterogéneo, cada una de las fases pueden tener la misma 
composición química pero tener propiedades distintas, como son el agua y el hielo, o una 
totalmente distinta, como el agua y el aceite; en ambos casos cada uno de los elementos tiene 
una fase diferente (Bernau, 1958; Kalpakjian & Schmid, 2002). 
 
MARCO TEÓRICO 
 
17 
 
 
3.4.Indexación 
La indexación es probablemente una de las tareas más importantes a la hora de procesar los 
patrones de difracción ya que a partir de ella se obtiene la caracterización de un material (Esteve, 
2006). 
Es el proceso de determinar, a partir de un punto específico en el patrón de difracción, la 
distancia que existe hacia otros puntos, el ángulo que se forma en relación con otros puntos y a 
partir de dichas mediciones determinar el material cristalino responsable del patrón de 
difracción (Fultz & Howe, 2013; González Viñas & Mancini, 2003; McClurg & Smit, 2013). 
En la Figura III.5 se muestra un ejemplo de un patrón indexado. 
 
Figura III.5. Ejemplo de indexación de un patrón de difracción. 
 
 
MARCO TEÓRICO 
 
18 
 
 
3.5.Ley de Bragg 
La estructura de los cristales se estudia mediante la difracción de fotones, neutrones y electrones. 
Dicha difracción depende de la estructura del cristal y de la longitud de onda de la partícula 
empleada (Kittel, 1997). 
La ley de Bragg establece una relación entre el ángulo de incidencia (), la longitud de onda () 
de la radiación reflejada y el espacio interplanar (d) en el cristal analizado. La Figura III.6 
representa de manera gráfica dicha ecuación (Hernández Cano, Foces-Foces, & Martínez-
Ripoll, 1995; Tipler, 2003). 
 
 𝑠𝑒𝑛𝜃 =
𝑛
2𝑑
 
 
( III.1 ) 
 
Figura III.6. Representación gráfica de la ley de Bragg. 
 
Es decir, cuando un haz de longitud de onda  incide sobre la superficie de un cristal en el que 
las capas de átomos o iones están separados una distancia d, la intensidad máxima del rayo 
reflejado ocurre cuando 𝑠𝑒𝑛𝜃 =
𝑛
2𝑑
. Donde  (ángulo de Bragg) es complementario del ángulo 
de incidencia y n es un entero (Oxford, 1998). 
 
 
 
MARCO TEÓRICO 
 
19 
 
 
3.6.Redes neuronales 
Las redes neuronales son sistemas que intentan reproducir la estructura neuronal del cerebro 
para imitar el razonamiento y comportamiento propio de los humanos. La parte más importante 
de estas redes es su capacidad de resolver problemas a través del aprendizaje basado en 
ejemplos. Por lo tanto, la facultad de una red para dar soluciones estará ligada al tipo de ejemplos 
disponibles durante el proceso de aprendizaje, los cuales deben ser suficientes y diversos para 
que el dominio esté bien representado. 
De forma general, una red neuronal consiste en grupos, llamados capas, que contienen unidades 
de procesamiento conocidas como neuronas artificiales, las cuales imitan el funcionamiento de 
una neurona biológica. Estas unidades, al igual que las neuronas reales, se componen de 
conexiones de entrada (dendritas), conexiones de salida (axones o axón) y un procesamiento 
interno que genera una señal de salida en función de la señal que se le haya dado a la entrada. 
De este modo, el conjunto de unidades neuronales conectadas entre sí constituye una red 
neuronal con pesos asociados a cada una de las conexiones entre neuronas (Skapura, 1996; Wu 
& McLarty, 2000). El procesamiento comienza con la red en un estado de inactividad. Al aplicar 
un patrón en forma de señales a la capa de entrada de la red, cada una de ellas estimula uno de 
las neuronas de entrada y estas a su vez generan una señal de salida. Luego, el conjunto de 
dichas salidas sirve como entrada a la siguiente capa, y así sucesivamente hasta que la capa final 
produzca una salida para el patrón ingresado. 
Para poder lograr el funcionamiento anterior, es necesario tener entrenada la red neuronal, es 
decir, hacer que la red tenga un conocimiento previo a partir del cual pueda generar salidas con 
un nivel de confiabilidad aceptable. La retropropagación es un mecanismo de entrenamiento 
que consiste en comparar la predicción de la red neuronal con la clasificación que se sabe 
corresponde a la entrada analizada. Dicha comparación luego permite ajustar los pesos entre los 
nodos de la red para minimizar el error entre las clasificaciones reales y las pronosticadas por la 
red (McCarty, 2011). Además, existen redes de neuronas artificiales con aprendizaje no 
supervisado; es decir, que no necesitan de un profesor o supervisor externo para realizar su 
aprendizaje. Estas redes son capaces de descubrir por sí mismas características, regularidades, 
 
MARCO TEÓRICO 
 
20 
 
 
correlaciones o categorías en los datos de entrada, y obtenerlas de forma codificada a la salida 
(Flórez López & Fernández Fernández, 2008; Isasi Viñuela & Galván León, 2004). 
 
MARCO TEÓRICO 
 
21 
 
 
3.7.Análisis de imágenes 
3.7.1. Tipos de imágenes 
En total existen cuatro tipos básicos de imágenes: binaria, escala de grises, color real o RGB 
(rojo, verde, azul por sus siglas en inglés)e indexada. 
Una imagen binaria (o de “dos niveles”) tiene solamente dos posibles valores para cada píxel: 
blanco o negro. Esto significa que cada píxel puede almacenarse en un solo bit con cualquiera 
de los valores binarios “0” ó “1” (ver Figura III.7.). 
 
Figura III.7. Imagen binaria. 
En una imagen en escala de grises los únicos colores son sombras de gris que van desde el 0 
(negro) hasta 255 (blanco). Cada píxel está formado por una de estas sombras y se representa 
con 1 byte (8 bits). La razón para tener este tipo de imágenes es que se requiere proporcionar 
menos información para cada píxel (ver Figura III.8). 
 
Figura III.8. Imagen en escala de grises. 
 
MARCO TEÓRICO 
 
22 
 
 
En las imágenes RGB o de color real (true color) cada píxel tiene un color particular que está 
definido por la cantidad de rojo, verde y azul en él. Si cada uno de los componentes R, G y B 
tiene un rango de 0 a 255, el total de diferentes posibles colores en la imagen es de 224. Cada 
píxel requiere 24 bits, por lo que estas imágenes también se conocen como imágenes de 24 bits 
(ver Figura III.9). 
 
Figura III.9. Imagen RGB. 
Por último, a diferencia de lo que sucede en una imagen RGB (ver Figura III.10. Representación 
de un píxel en una imagen RGB y con colores indexados.a), en las imágenes con colores 
indexados (ver Figura III.10. Representación de un píxel en una imagen RGB y con colores 
indexados.b) cada píxel tiene un valor que en lugar de su color proporciona un apuntador al 
color en el mapa que contiene la lista de todos los colores utilizados en esa imagen. Este tipo de 
imágenes permite un número limitado de colores distintos, por lo que son utilizadas 
principalmente para ilustraciones que contienen grandes regiones con el mismo color 
(Deligiannidis & Arabnia, 2014; Burger & Burge, 2008). 
 
MARCO TEÓRICO 
 
23 
 
 
 
Figura III.10. Representación de un píxel en una imagen RGB y con colores indexados. 
 
3.7.2. Profundidad (depth, color depth) 
La profundidad o profundidad de color de una imagen es la cantidad de información usada para 
crear colores y describe su habilidad de reproducirlos correctamente. Está dada por el número 
de bits usados por un solo píxel de la imagen. Una imagen binaria por ejemplo, tiene una 
profundidad de 1 bit por píxel (bpp) debido a que se tienen solamente dos colores en toda la 
imagen y un bit es suficiente para distinguir entre ellos. Una imagen en escala de grises tendrá 
por lo general una profundidad de color de 8bpp para medir la intensidad en 256 niveles 
discretos, siendo 0 el más bajo y 255 el más alto. Una imagen a color por su parte tendrá 16, 24 
o 32 bpp, siendo la más común de 24bpp. En una imagen RGB de 24bpp por ejemplo, 8 bits de 
cada píxel se asignan a cada uno de los canales rojo (R), verde (G) y azul (B), por lo que cada 
 
MARCO TEÓRICO 
 
24 
 
 
píxel puede representar uno de 16,777,216 (224 ó 28 • 28 • 28) colores posibles (Hunt, 2010; 
Theoharis, Papaioannou, Platis, & Patrikalakis, 2008). 
 
3.7.3. Espacio de color (color space) 
Todos los archivos de imagen tienen un espacio de color. Éste define la cantidad y los límites 
de colores y sombras de color que una imagen puede contener (gama de color). Existe un 
sinnúmero de espacios de color diferentes, cada uno creado para una tarea específica. Por 
ejemplo, algunos fueron diseñados para programas de dibujo, mientras que otros fueron ideados 
para la percepción del color (Ebner, 2007). 
Algunos de los espacios de color más comunes son: 
 RGB. Es el más común ya que se utiliza ampliamente en dispositivos de análisis de 
imágenes (cámaras digitales, escáneres, etc.) y de visualización (monitores, televisiones, 
etc.). Se creó con base en la regla de que todo color visible puede obtenerse mezclando 
el color rojo, verde y azul en porcentajes específicos. Desafortunadamente, cada 
dispositivo tiene su propia característica espectral para cada canal de color y puede 
producir rangos muy diferentes de colores RGB; por lo tanto, este espacio pertenece a 
los espacios de color dependientes del dispositivo (Choras, 2010). 
 HSV o HSB (tono, saturación y valor/brillo, por sus siglas en inglés). Este espacio fue 
definido para modelar el método de un artista para mezclar los colores. Debido a que 
tiene su base en la visión humana, es muy intuitivo a la hora de definir colores ya que 
cada color se describe por su tinte, intensidad y brillo, y no por porcentajes de rojo, verde 
y azul (Choras, 2010). 
 
3.7.4. Histograma 
Un histograma es una gráfica compuesta de líneas que muestran el número relativo y 
distribución de valores de tonalidad dentro de una imagen. Se utiliza para representar la 
distribución de los datos de una imagen en un formato visual sencillo de interpretar. Los 
histogramas se crean dividiendo el rango de niveles o valores que pueden tomar los píxeles de 
la imagen y sobre cada nivel se dibuja una línea que es proporcional al del número de píxeles 
 
MARCO TEÓRICO 
 
25 
 
 
para un valor determinado; entre más alta sea la línea más píxeles se encuentran en ese valor. 
Los histogramas con frecuencia se ven como montañas debido a que dichas líneas se encuentran 
muy juntas unas con otras (Burger & Burge, Principles of Digital Image Processing: 
Fundamental Techniques, 2009; Mittra, 2002; Romaniello, 2007; Sarkar, 2008; Simoes, Lucena 
Junior, Leite, & Silva, 2012). En la Figura III.11 se puede observar el histograma para la imagen 
de Lena en escala de grises. 
 
Figura III.11. Imagen de Lena en escala de grises y su histograma. 
 
 
 
MARCO TEÓRICO 
 
26 
 
 
3.8.Procesamiento de imágenes 
3.8.1. Filtrado 
El filtrado es una parte importante dentro del procesamiento de imágenes, ya que es fundamental 
para realizar operaciones de análisis como la segmentación, extracción de características de 
textura y de forma (Ren & Du, 2013). 
Es una forma efectiva para reducir el ruido en una imagen, conservando aspectos importantes. 
El filtro utilizado dependerá en la naturaleza del ruido, pudiendo usar varios de ellos para 
múltiples fuentes de ruido. 
 
3.8.1.2.Filtro de media 
Consiste en sustituir cada píxel por la media aritmética de los puntos que tiene alrededor 
(incluido él mismo) en un kernel de NxN puntos, donde el punto a sustituir es el central. Se 
obtiene calculando la media de todos los valores de los píxeles del kernel y se sustituye el píxel 
central del kernel por el valor obtenido. Reduce la magnitud del ruido uniforme, suavizando los 
gradientes de toda la imagen y provoca un efecto de difuminarla, efecto que aumenta a medida 
que lo hace el tamaño del kernel (Gupta & Ibaraki, 2015). Algunos ejemplos de kernel utilizados 
en este filtro se muestran en la siguiente imagen (Figura III.12). 
 
Figura III.12. Ejemplos de Kernel del filtro de media 
 
3.8.1.3.Filtro Gaussiano 
A diferencia del filtro de media, se le da más peso al píxel central que a sus vecinos, asignando 
además pesos mayores a los píxeles más cercanos al centro del kernel y menos peso a los más 
 
MARCO TEÓRICO 
 
27 
 
 
alejados. El calificativo de “Gaussiano” es gracias a que su definición sigue la forma de la 
campana de Gauss (Grau, 2010). Un ejemplo de kernel para este filtro se observa en la imagen 
a continuación (ver Figura III.13). 
 
Figura III.13. Ejemplo de un kernel de 3x3 para un filtro Gaussiano. 
 
3.8.1.4.Filtro de mediana 
Consiste en obtener la lista completa de valores de los píxeles del kernel, ordenarlos y tomar el 
del medio (mediana). La ventaja de este filtro con el de media es que los detalles abruptos y los 
bordes de los objetos no se difuminan tanto, por lo que es muy efectivo para eliminar ruido del 
tipo sal y pimienta. Este filtro no utiliza un kernel específico, solamente su tamaño, a partir del 
cual determina el valor de la mediana (Gupta & Ibaraki, 2015; González Marcos, et al., 2006). 
 
3.8.2. Gradientede imagen 
Se utiliza para detectar píxeles con mayor contraste, ya que resalta las variaciones de intensidad 
de la luz. Se calcula por medio de la convolución de la imagen con 2 kernels predefinidos e 
independientes, uno para la dirección vertical y otro para la horizontal, para obtener la mayor 
cantidad posible de información sobre las regiones con alto contraste de la imagen (Mohamed 
Kamel, 2011). 
 
3.8.3. Algoritmo Canny para detección de bordes 
El operador de bordes Canny fue diseñado para combinar la buena detección de bordes reales, 
ubicación precisa y mínima respuesta a falsos bordes. Aunque inicialmente su objetivo era 
detectar bordes en múltiples espacios, la mayoría de las implementaciones aplican el detector 
Canny en un solo nivel. En esta forma básica, el operador realiza lo siguiente (Bradsky & 
 
MARCO TEÓRICO 
 
28 
 
 
Kaehler, 2008; Burger & Burge, Principles of Digital Image Processing: Fundamental 
Techniques, 2009; Laganière, OpenCV 2 Computer Vision Application Programming 
Cookbook, 2011): 
 Pre-procesamiento. Suaviza la imagen con un filtro Gaussiano para eliminar el ruido 
de los bordes. 
 Localización de bordes. Una vez que se suaviza la imagen, para cada píxel se obtiene 
la magnitud y módulo (orientación) del gradiente. 
 Seguimiento de bordes y umbralización por histéresis. Se reúnen los grupos de 
píxeles de borde conectados aplicando la umbralización por histéresis, la cual consiste 
en utilizar dos umbrales distintos, uno bajo y otro alto, para determinar cuáles puntos 
pertenecen a un contorno. Si el píxel tiene un gradiente mayor que el umbral superior, 
se acepta como un píxel de borde; si el píxel está debajo del umbral inferior, será 
rechazado. Si el gradiente del píxel se encuentra entre ambos umbrales, será aceptado 
únicamente si se encuentra conectado a un píxel que esté sobre el umbral superior. 
 
3.8.4. Algoritmo Sobel 
El operador Sobel es un filtro lineal de detección de bordes basado en un kernel de 3x3 (ver 
Figura III.14). Este operador puede verse como la medida de la variación de la imagen en la 
dirección vertical y horizontal. Es decir, da una aproximación del gradiente de la imagen 
diferenciando los píxeles en cada una de las direcciones, operando en una pequeña ventana 
alrededor del píxel de interés para reducir la influencia del ruido (Laganière, OpenCV 2 
Computer Vision Application Programming Cookbook, 2011). 
 
Figura III.14. Estructura del kernel vertical y horizontal del operador Sobel. 
 
MARCO TEÓRICO 
 
29 
 
 
3.9.Operaciones morfológicas 
La morfología es la presentación y estructura de un objeto, o los arreglos e interrelaciones entre 
las partes del mismo. El filtrado morfológico permite el análisis y procesamiento de imágenes, 
ya que define una serie de operaciones que las transforma a través de su examinación con un 
elemento con cierta forma predefinida. El modo en que este elemento intersecte con el entorno 
de un píxel determinará el resultado de la operación morfológica aplicada (Laganière, OpenCV 
2 Computer Vision Application Programming Cookbook, 2011; Parker, 2011). 
Las operaciones morfológicas básicas son la dilatación y la erosión, y son utilizadas en una gran 
variedad de contextos como eliminar ruido, aislar o unir elementos, encontrar caídas de 
intensidad u hoyos en una imagen, etc. (Bradsky & Kaehler, 2008). 
 
3.9.1. Conectividad 
La conectividad entre píxeles es un concepto importante utilizado para establecer las fronteras 
de los objetos y las regiones de una imagen. Para determinar si dos píxeles están conectados 
debe determinarse si son adyacentes en algún sentido. Existen dos formas comunes de definir 
la conectividad: con 4 celdas (vecindad 4) donde sólo se analizan los vecinos inmediatos; u 8 
celdas (vecindad 8) donde se consideran para su análisis los ocho píxeles alrededor del píxel 
seleccionado (González Marcos, et al., 2006; Nixon & Aguado, 2008; Sucar & Giovani, 2011). 
Ambos tipos de conectividad se muestran en la Figura III.15. 
 
Figura III.15. Tipos principales de conectividad. 
 
 
MARCO TEÓRICO 
 
30 
 
 
3.9.2. Kernel 
El instrumento básico de la morfología matemática es el elemento estructural o kernel, el cual 
está definido como una configuración de píxeles (una forma) en la que se define un origen (punto 
de anclaje) para determinar la manera en que un píxel se combina con sus vecinos (Gálvez Rojas, 
Alcaide García, & Mora Mata, 2007; Laganière, OpenCV 2 Computer Vision Application 
Programming Cookbook, 2011). 
 
3.9.3. Convolución 
La convolución es la base de muchas de las transformaciones que pueden ser aplicadas para 
mejorar, modificar o procesar imágenes. Este término significa mover un kernel sobre cada píxel 
de una imagen y multiplicar cada uno de los píxeles de la imagen por su peso asociado; por lo 
tanto, el resultado de la operación de convolución está determinada por el kernel utilizado 
(Bradsky & Kaehler, 2008; Laganière, OpenCV 2 Computer Vision Application Programming 
Cookbook, 2011). 
 
3.9.4. Dilatación y erosión 
Son los operadores morfológicos fundamentales. Ambos son convoluciones de alguna imagen 
por medio de un kernel. El kernel puede pensarse como una plantilla o una máscara de cualquier 
tamaño y forma con su punto de anclaje en el centro (Ver 
Figura III.16). Para la dilatación, el kernel se va moviendo a través de la imagen y en cada 
movimiento se calcula el valor máximo de píxel dentro de las dimensiones del kernel y en la 
imagen se reemplaza el píxel en donde se encuentre el punto de anclaje con dicho valor máximo. 
La erosión es la operación contraria: conforme se mueve el kernel por la imagen, se calcula el 
valor mínimo de los píxeles dentro del área del kernel y se reemplaza el píxel bajo el ancla con 
el valor mínimo calculado (Bradsky & Kaehler, 2008; opencv.org, OpenCV Reference Manual, 
2014) 
 
MARCO TEÓRICO 
 
31 
 
 
 
Figura III.16. Ejemplo de dilatación y erosión sobre el objeto A, por medio del kernel B. 
 
3.9.5. Apertura y cierre 
Son operaciones comúnmente utilizadas como filtros para la eliminación de ruido tipo sal y 
pimienta, así como para suavizar la superficie de formas en las imágenes facilitando la detección 
de objetos. Se trata de la combinación de los operadores de erosión y dilatación. En el caso de 
la apertura, primero se erosiona y luego se dilata utilizando el mismo elemento estructural, 
“abriendo” los pequeños espacios entre objetos que están en contacto, separando unos objetos 
de otros y aumentando los agujeros dentro de los objetos. El cierre por su parte se obtiene 
primero dilatando y luego erosionando la imagen, lo que provocará que, al contrario de la 
apertura, se remuevan las pequeñas áreas negras de la imagen (Bradsky & Kaehler, 2008; 
Brahmbhatt, 2013; González Marcos, et al., 2006; Parker, 2011) 
 
 
MARCO TEÓRICO 
 
32 
 
 
3.10. OpenCV 
OpenCV es una librería de código abierto que incluye varios cientos de algoritmos para el 
desarrollo de aplicaciones de visión computacional. Puede utilizarse tanto en aplicaciones 
académicas como comerciales bajo una licencia BSD que permite su uso, distribución y 
adaptación libres (Laganière, OpenCV 2 Computer Vision Application Programming 
Cookbook, 2011). 
Tiene interfaces en C++, C, Python y Java y soporta Windows, Linux, Mac OS, iOS y Android. 
OpenCV fue diseñado para la eficiencia computacional con un fuerte enfoque en aplicaciones 
de tiempo real. La librería puede además aprovechar el procesamiento multi núcleo debido a 
que está escrita en C/C++ optimizado (OpenCV API Reference, 2014). 
 
3.10.1. Funciones OpenCV 
3.10.1.1.Estructura Mat() 
La clase Mat de OpenCV es la estructura de datos utilizada para contener imágenes y demás 
información en forma de matriz. Por defecto, tiene un tamaño cero pero también se puede 
especificar un tamaño inicial (Laganière, OpenCV 2 Computer Vision ApplicationProgramming Cookbook, 2011). 
Existen diversas formas de crear un objeto tipo Mat, las opciones más populares se enlistan a 
continuación (Brahmbhatt, 2013; OpenCV API Reference, 2014; OpenCV User Guide, 2014): 
 Mat(nrows, ncols, type) 
 Mat(size, type) 
 Mat(rows, cols, type, s) 
 Mat(size, type, s) 
 Mat(m) 
 Mat(rows, cols, type, data, step = AUTO_STEP) 
 Mat(size, type, data, step = AUTO_STEP) 
 Mat(ndims, sizes, type) 
 Mat(ndims, sizes, type, s) 
 Mat(ndims, sizes, type, data, steps) 
 
MARCO TEÓRICO 
 
33 
 
 
Donde: 
ndims.- Número de dimensiones del arreglo. 
rows.- Número de filas en un arreglo bidimensional. 
cols.- Número de columnas en un arreglo bidimensional. 
size.- Tamaño del arreglo bidimensional: size(cols, rows). 
sizes.- Arreglo de enteros especificando la forma de un arreglo n-dimensional. 
type – Tipo de arreglo. Especifica el tipo de dato a utilizar para almacenar los elementos 
y el número de canales por cada punto de la matriz. Para hacer esto se tienen múltiples 
definiciones construidas a partir de la siguiente convención: 
CV_<Profundidad><Tipo de dato>C<Número de canales>. Los parámetros se 
definen como (Bradsky & Kaehler, 2008; opencv.org, OpenCV User Guide, 2014): 
 Profundidad: indica la cantidad de bits utilizados por un solo píxel de la 
imagen para crear y reproducir colores. Sus valores pueden ser: 8,16, 32 ó 
64. 
 Tipo de dato: Las diferentes opciones para este parámetro son S, U o F. “S” 
(Signed) indica que permitirá almacenar valores negativos, 0 y valores 
positivos. “U” (Unsigned) solamente admitirá valores no negativos (0 y 
valores positivos). “F” (Float) acepta cualquier número real; es decir, el 0 ó 
cualquier número negativo o positivo con punto decimal (Bronson, 2013). 
 Número de canales: Indica el número de canales de la imagen, que pueden ir 
desde 1 hasta 4. 
Por lo tanto, algunos ejemplos de tipo de arreglo son: CV_8UC1, CV_32FC4, 
CV_16SC3, etc. 
s.- Valor opcional para inicializar cada elemento con él. 
data.- Apuntador a los datos de usuario. Los constructores de matrices solamente 
inicializan la cabecera de la matriz que apunta a la información específica, por lo que no 
se asigna ni se copia información. 
 
MARCO TEÓRICO 
 
34 
 
 
step.- Número de bytes que ocupa cada fila de la matriz. Si existen, debe incluir los bytes 
de relleno al final de cada fila. Si no se especifica, (AUTO_STEP por defecto), se asume 
que no hay relleno. 
steps.- Arreglo de ndims-1 saltos (steps) en caso de un arreglo multidimensional (el 
último step siempre se asigna como el tamaño del elemento). Si no se especifica, se 
asume que la matriz es continua. 
m.- Arreglo que se asigna a la matriz construida (total o parcialmente). No se copia 
información con este constructor; en su lugar, la cabecera apuntando a m o su sub arreglo 
se construye y se asocia con él. 
 
3.10.1.2.imread() 
Es una rutina que determina el formato con el que se cargará el archivo basado en su nombre; 
además asigna de forma automática la memoria necesaria para la estructura de datos de la 
imagen. Este método es capaz de leer una amplia variedad de formatos de imagen, incluyendo 
BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS y TIFF (Bradsky & Kaehler, 2008). 
Esta función se invoca de la forma (OpenCV API Reference, 2014): 
 imread(filename, flags=1) 
Donde: 
filename.- Nombre del archivo a abrir. 
flags.- Especifica el tipo de color de la imagen cargada. Los posibles tipos son: 
 CV_LOAD_IMAGE_ANYDEPTH. Regresa una imagen de 16 ó 32 bits cuando 
la imagen de entrada tiene la profundidad correspondiente; en otro caso la 
convierte a 8 bits. 
 CV_LOAD_IMAGE_COLOR. Convierte la imagen a una de color. 
 CV_LOAD_IMAGE_GRAYSCALE. Convierte la imagen a escala de grises. 
 Regresa una imagen a color de 3 canales. 
 = 0. Regresa una imagen en escala de grises. 
 < 0. Regresa la imagen tal cual (con canal alfa). 
 
 
MARCO TEÓRICO 
 
35 
 
 
3.10.1.3.namedWindow() 
Abre una ventana en la pantalla que puede contener y mostrar una imagen. Esta función es 
proporcionada por el módulo HighGUI, el cual contiene los métodos de interfaz de usuario de 
OpenCV (Parker, 2011), y permite asignar un nombre a la ventana creada para poder referirse a 
ella en futuras llamadas a funciones de HighGUI (Bradsky & Kaehler, 2008). 
Su estructura es de la forma (OpenCV API Reference, 2014): 
 namedWindow(name, flags= WINDOW_AUTOSIZE) 
Donde: 
name.- Nombre de la ventana que aparecerá en la barra de título y que podrá ser utilizado 
como identificador de la misma. 
flags.- Banderas de la ventana. Las banderas soportadas son: 
 WINDOW_NORMAL. El usuario puede redimensionar la ventana sin 
limitaciones. 
 WINDOW_AUTOSIZE. El tamaño de la ventana automáticamente se ajusta al 
de la imagen mostrada y no se puede cambiar manualmente. 
 WINDOW_OPENGL. La ventana se crea con soporte para OpenGL. 
 
3.10.1.4.imshow() 
Despliega una imagen en la ventana de OpenCV especificada. Si la ventana fue creada con la 
bandera CV_WINDOW_AUTOSIZE, la imagen se muestra con su tamaño original. De otra 
forma, la imagen se dimensiona de tal forma que se ajuste a la ventana. 
Para referenciar este método se utiliza (OpenCV API Reference, 2014): 
 imshow(winname, mat) 
Donde: 
winname.- Nombre de la ventana. 
mat.- imagen que se mostrará en la ventana. 
 
3.10.1.5.waitKey() 
 
MARCO TEÓRICO 
 
36 
 
 
Método que le pide al programa que se detenga y espere la pulsación de una tecla. Si se le asigna 
como argumento un entero positivo, el programa esperará ese número de milisegundos y luego 
continuará, aunque no se haya presionado ninguna tecla. Si el argumento es cero o un número 
negativo, el programa esperará indefinidamente hasta que se presione una tecla (Bradsky & 
Kaehler, 2008). La instrucción para invocarlo es (opencv.org, OpenCV API Reference, 2014): 
 waitKey(delay=0) 
Donde: 
delay.- Retraso en milisegundos. El 0 (parámetro por defecto) es un valor especial que 
significa “infinito”. 
 
3.10.1.6.cvtColor() 
Permite convertir de un espacio de color a otro. Un espacio de color es una forma de describir 
los colores de una imagen. El más simple es el espacio de color RGB, el cual representa el color 
de cada píxel con un valor de rojo (Red), uno de verde (Green) y uno de azul (Blue). Otro espacio 
de color es la escala de grises (grayscale), el cual descarta la información de color y solo 
almacena la intensidad de cada píxel (Bradsky & Kaehler, 2008; Brahmbhatt, 2013). 
En las transformaciones desde o hacia el espacio de color RGB, el orden de los canales debe 
especificarse explícitamente (RGB o BGR) debido a que el formato de color por defecto de 
OpenCV es BGR y no RGB como normalmente se considera. Para utilizar este método se utiliza 
el código (OpenCV API Reference, 2014): 
 cvtColor(src, dst, code, dstCn=0); 
Donde: 
src.- Imagen de entrada. 
dst.- Imagen de salida del mismo tamaño y profundidad que la de entrada. 
code.- Código de conversión del espacio de color. Algunas de las conversiones más 
comunes son: 
RGB ↔ Escala de grises. Transformaciones dentro del espacio RGB como 
agregar/remover el canal alfa, invertir el orden de los canales, convertir de/a color 
RGB de 16 bits o la conversión de/a escala de grises: 
 
MARCO TEÓRICO 
 
37 
 
 
 CV_BGR2GRAY 
 CV_RGB2GRAY 
 CV_GRAY2BGR 
 CV_GRAY2RGB 
RGB ↔HSV. En imágenes de 8 y 16 bits, los canales R, G y B se convierten a 
formato de punto flotante y se escalan para ajustarlos al rango de 0 a 1: 
 CV_BGR2HSV 
 CV_RGB2HSV 
 CV_HSV2BGR 
 CV_HSV2RGB 
dstCn.- Número de canales de la imagen de salida; si el parámetro es 0 (valor por 
defecto), el número de canales se obtiene automáticamente de los parámetros src y code. 
 
3.10.1.7.equalizeHist() 
Sirve para ecualizar el histograma de una imagen, normalizando su brillo y mejorando su 
contraste. Esto se realizaeliminando los valores más pequeños del histograma y luego 
estirándolo para que ocupe la totalidad de los valores de intensidad (0 a 255), haciéndolo lo más 
plano posible (Bradsky & Kaehler, 2008; Brahmbhatt, 2013; Lélis Baggio, et al., 2012). 
La ecualización se realiza aplicando la función (OpenCV API Reference, 2014): 
 equalizeHist(src, dst) 
Donde: 
src.- Imagen fuente de 8 bits de un canal. 
dst.- Imagen destino del mismo tamaño y tipo que src. 
 
3.10.1.8.threshold() 
Permite rechazar categóricamente aquellos píxeles que se encuentren debajo o por encima de 
algún valor conocido como umbral, manteniendo el resto de los píxeles (Bradsky & Kaehler, 
2008; González Marcos, et al., 2006). 
La umbralización se aplica de la forma (OpenCV API Reference, 2014): 
 
MARCO TEÓRICO 
 
38 
 
 
 threshold(src, dst, thresh, maxval, type); 
Donde: 
src.- Arreglo de entrada. 
dst.- Arreglo de salida con el mismo tamaño y tipo que src. 
thresh.- Valor del umbral. 
maxval.- Valor máximo que se usará con los tipos de umbralización THRESH_BINARY 
y THRESH_BINARY_INV. 
type.- Tipo de umbralización. Los posibles parámetros son: 
 THRESH_BINARY. Si el valor del píxel de la imagen de entrada es mayor al 
umbral asignado, se asigna el valor establecido como maxval en la misma 
posición de la imagen de salida; en otro caso se establece el valor 0 para dicho 
píxel (Figura III.17). 
 
Figura III.17. Umbralización tipo binaria. 
 THRESH_BINARY_INV. Hace la operación inversa a THRESH_BINARY; es 
decir, asigna un 0 a los píxeles que son mayores al umbral y pone el valor maxval 
al resto (Figura III.18. Umbralización tipo binaria inversa.). 
 
 
MARCO TEÓRICO 
 
39 
 
 
Figura III.18. Umbralización tipo binaria inversa. 
 THRESH_TRUNC. Asigna el valor del umbral a todos los píxeles que sean 
mayor al mismo y el resto los deja con el mismo valor (Figura III.19. 
Umbralización tipo trunca.). 
 
Figura III.19. Umbralización tipo trunca. 
 THRESH_TOZERO. Si el valor del píxel es mayor que el umbral, le asigna el 
mismo valor; en cualquier otro caso lo pone en 0 (Figura III.20. Umbralización 
a cero.). 
 
Figura III.20. Umbralización a cero. 
 THRESH_TOZERO_INV. Pone en 0 cualquier píxel cuyo valor sea mayor al 
umbral y mantiene con el mismo valor al resto (ver Figura III.21. Umbralización 
a cero inversa.). 
 
MARCO TEÓRICO 
 
40 
 
 
 
Figura III.21. Umbralización a cero inversa. 
 
3.10.1.9.adaptiveThreshold() 
Automáticamente converge a un valor de nivel de gris para cada imagen en particular que 
permite separar dentro de la imagen las regiones de alta y de baja densidad. Tras calcular el 
valor umbral para una imagen en concreto, se crea una nueva imagen de la siguiente manera: 
todo lo que en la imagen original tiene un valor superior al del umbral se pone a uno y lo que 
está por debajo se pone a cero. (Suárez Cuenca, 2009) 
La umbralización adaptativa se aplica de la forma (OpenCV API Reference, 2014): 
 adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C) 
Donde: 
src.- Imagen de 8 bits y un solo canal. 
dst.- Imagen de salida con el mismo tamaño y tipo que src. 
maxval.- Valor máximo que se usará con los tipos de umbralización: THRESH_BINARY 
y THRESH_BINARY_INV. 
adaptiveMethod.- Algoritmo de umbralización adaptativa a utilizar: 
 ADAPTIVE_THRESH_MEAN_C. El valor del umbral T(x, y), calculado 
individualmente para cada píxel, es un promedio de la vecindad blockSize x 
blockSize del punto (x, y) menos el parámetro C (Figura III.22. Método 
ADAPTIVE_THRESH_MEAN_C aplicado a una imagen.). 
 
MARCO TEÓRICO 
 
41 
 
 
 
Figura III.22. Método ADAPTIVE_THRESH_MEAN_C aplicado a una imagen. 
 ADAPTIVE_THRESH_GAUSSIAN_C. El valor del umbral T(x, y) es una suma 
ponderada de la vecindad blockSize x blockSize del punto (x, y) menos el 
parámetro C (Figura III.23. Método ADAPTIVE_THRESH_GAUSSIAN_C 
aplicado a una imagen.). 
 
Figura III.23. Método ADAPTIVE_THRESH_GAUSSIAN_C aplicado a una imagen. 
thresholdType.- Tipo de umbral: 
 THRESH_BINARY. Si el valor del píxel de la imagen de entrada es mayor al 
umbral asignado, se asigna el valor establecido como maxval en la misma 
 
MARCO TEÓRICO 
 
42 
 
 
posición de la imagen de salida; en otro caso se establece el valor 0 para dicho 
píxel (ver threshold()¡Error! No se encuentra el origen de la referencia.). 
 THRESH_BINARY_INV. Hace la operación inversa a THRESH_BINARY; es 
decir, asigna un 0 a los píxeles que son mayores al umbral y pone el valor maxval 
al resto. 
blockSize.- Tamaño de la vecindad de un píxel que se utiliza para calcular un valor de 
umbral para el píxel (número impar mayor a 1). 
C.- Constante que se resta del promedio o del promedio ponderado. Normalmente es 
positivo y también puede ser cero o negativo. 
3.10.1.10. medianBlur() 
Función que aplica un filtro de mediana para suavizar la imagen. Opera en la vecindad de un 
píxel para determinar el valor de salida del mismo. El píxel en cuestión y sus vecinos forman un 
conjunto de valores y, como sugiere el nombre, el filtro calculará el valor promedio del grupo 
de píxeles y reemplazará el valor del píxel con el promedio obtenido (Laganière, OpenCV 2 
Computer Vision Application Programming Cookbook, 2011). 
El método se aplica de la forma (OpenCV API Reference, 2014): 
 medianBlur(src, dst, ksize) 
Donde: 
src.- Imagen de entrada de 1, 3 ó 4 canales. Cuando ksize sea 3 ó 5, la profundidad de la 
imagen deberá ser CV_8U, CV_16U ó CV_32U; cuando ksize sea mayor, solo puede ser 
CV_8U. 
dst.- Arreglo de salida con el mismo tamaño y tipo que src. 
ksize.- Tamaño lineal de apertura. Debe ser impar y mayor que 1, por ejemplo: 3, 5, 7… 
 
3.10.1.11. erode() 
La erosión es una técnica para reducir la forma de los objetos removiendo píxeles de su borde 
(Dawson-Howe, 2014). La erosión se realiza mediante el desplazamiento de un kernel 
rectangular de unos por una imagen, poniendo a cero todos aquellos píxeles que no contengan 
 
MARCO TEÓRICO 
 
43 
 
 
completamente al elemento estructurante en su entorno, reduciendo el contorno del objeto 
(Brahmbhatt, 2013; González Marcos, et al., 2006). 
Se aplica a través de (OpenCV API Reference, 2014): 
 erode(src, dst, kernel, anchor=Point(-1,-1), iterations=1, borderType= 
BORDER_CONSTANT, borderValue=morphologyDefaultBorderValue()) 
Donde: 
src.- Imagen de entrada; el número de canales puede ser arbitrario, pero la profundidad 
debe ser una de CV_8U, CV_16U, CV_16S, CV_32F ó CV_64F. 
dst.- Imagen de salida del mismo tamaño y tipo que src. 
kernel.- Elemento estructural usado para la erosión; si es igual a Mat(), se utiliza un 
elemento estructural rectangular de 3 x 3. 
anchor.- Posición del ancla en el elemento; el valor por defecto es (-1, -1), lo que 
significa que el ancla está en el centro del elemento. 
iterations.- Número de veces que se aplica la erosión. 
borderType – Método de extrapolación del píxel. Éste se aplica para procesar los píxeles 
a las orillas de la imagen, ya que se necesitan píxeles fuera de la imagen para procesar 
los que se encuentran en los bordes. Las diferentes opciones para hacer esto son (los 
bordes de la imagen están indicados por el símbolo “|”): 
 BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh 
 BORDER_REFLECT: fedcba|abcdefgh|hgfedcb 
 BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba 
 BORDER_WRAP: cdefgh|abcdefgh|abcdefg 
 BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii especificando a 'i' 
borderValue.- Valor del borde en caso de que el tipo sea BORDER_COSTANT. 
 
3.10.1.12. dilate() 
La dilatación consiste en expandir el número de píxeles del objeto, típicamente en todas las 
direcciones simultáneamente (Dawson-Howe, 2014). La dilatación se realiza mediante el 
desplazamiento de un kernel rectangular de unos por una imagen y si alguno de los vecinos de 
 
MARCO TEÓRICO 
 
44 
 
 
lamáscara coincide con un píxel de entorno, entonces el píxel de la imagen se pone a uno, 
extendiendo el área de los objetos y rellenando los posibles huecos dentro de ellos (Brahmbhatt, 
2013; González Marcos, et al., 2006; Laganière, OpenCV 2 Computer Vision Application 
Programming Cookbook, 2011). 
Muy similar a la erosión, la dilatación se obtiene a través de (OpenCV API Reference, 2014): 
 dilate(src, dst, kernel, anchor= Point(-1,-1), iterations=1, borderType= 
BORDER_CONSTANT, borderValue= morphologyDefaultBorderValue()). 
Ver erode() para revisar los posibles valores de parámetros de la función. 
3.10.1.13. morphologyEx() 
Función multipropósito que se utiliza para realizar operaciones morfológicas avanzadas en 
imágenes, como la apertura o el cierre (Brahmbhatt, 2013). Se llama a través de (opencv.org, 
OpenCV API Reference, 2014): 
 morphologyEx(src, dst, op, kernel, anchor=Point(-1,-1), iterations =1, borderType 
=BORDER_CONSTANT, borderValue=morphologyDefaultBorderValue()). 
Donde: 
op.- Tipo de operación morfológica, puede ser una de las siguientes: 
 MORPH_OPEN. Operación de apertura. 
 MORPH_CLOSE. Operación de cierre. 
 MORPH_GRADIENT. Gradiente morfológico. 
 MORPH_TOPHAT. “top hat”. 
 MORPH_BLACKHAT. “black hat”. 
Ver erode() para revisar los posibles valores del resto de los parámetros de la función. 
 
3.10.1.14. distanceTransform() 
La función de transformación de distancia calcula la medida precisa o aproximada de cada píxel 
de una imagen binaria al píxel cero más cercano; es decir, produce una imagen en escala de 
grises en la que la intensidad de un píxel en la imagen depende de la distancia del mismo al 
punto de borde más cercano a él (opencv.org, OpenCV API Reference, 2014; Whelan & 
Molloy, 2001). Se utiliza por medio de: 
 
MARCO TEÓRICO 
 
45 
 
 
 distanceTransform(src, dst, distanceType, maskSize) 
 distanceTransform(src, dst, labels, distanceType, maskSize, labelType= 
DIST_LABEL_CCOMP) 
Donde: 
src.- Imagen origen (binaria) de 8 bits (un canal). 
dst.- Imagen de salida con distancias calculadas. Es una imagen de punto flotante de 32 
bits y un canal del mismo tamaño que src. 
distanceType.- Tipo de distancia. Puede ser: 
 CV_DIST_L1 
 CV_DIST_L2 
 CV_DIST_C 
maskSize.- Tamaño de la mascara de transformación de distancia. Puede tener el valor 
3, 5, o CV_DIST_MASK_PRECISE. En el caso de los tipos de distancia 
CV_DIST_L1 y CV_DIST_C, el parámetro debe ser 3 debido a que una máscara de 
 da el mismo resultado que una de o cualquiera de mayor apertura. 
labels.- Arreglo 2D de salida de etiquetas (opcional). Tiene el tipo CV_32SC1 y el 
mismo tamaño que src. 
labelType.- Tipo de arreglo de etiquetas a construir. 
 Si labelType==DIST_LABEL_CCOMP a cada componente de ceros conectado 
en src (así como todos los píxeles diferentes de cero más cercanos al 
componente conectado) se le asignará la misma etiqueta. 
 Si labelType==DIST_LABEL_PIXEL cada pixel cero (y todos los píxeles 
diferentes de cero cercanos) obtiene su propia etiqueta. 
 
3.10.1.15. normalize() 
Normalizar hace referencia al retoque de color que se aplica a una imagen para lograr un 
equilibrio entre el balance de blancos y negros, y desplazar los valores tonales que no estén 
donde deberían; es decir, este proceso deja la imagen lo más parecida posible a la realidad, sin 
 
MARCO TEÓRICO 
 
46 
 
 
que tenga una tendencia hacia un color predominante (Adobe Premiere Pro). Una imagen se 
normaliza a través de (OpenCV API Reference, 2014): 
 normalize(src, dst, alpha=1, beta=0, norm_type=NORM_L2, dtype=-1, 
mask=noArray()) 
 normalize(src, dst, alpha, normType) 
Donde: 
src.- Arreglo de entrada. 
dst.- Arreglo de salida del mismo tamaño que src. 
alpha.- Valor criterio sobre el cual se normaliza o el límite de rango inferior en caso de 
una normalización de rango. 
beta.- Límite de rango superior en caso de una normalización de rango; no se utiliza para 
normalización de criterio. 
normType.- Tipo de normalización: 
 NORM_INF 
 NORM_L1 
 NORM_L2 
 NORM_MINMAX 
dtype.- Cuando es negativo, el arreglo de salida tiene el mismo tipo que src; en otro caso, 
tiene el mismo número de canales que src y la profundidad es igual a 
CV_MAT_DEPTH(dtype). 
mask.- Máscara de operación opcional. 
 
3.10.1.16. copyTo() 
Crea una imagen que contiene una nueva copia de la imagen original, grabando solamente los 
píxeles con valores diferentes a cero (opencv.org, OpenCV Reference Manual, 2014) 
(opencv.org, OpenCV User Guide, 2014). Para aplicar esta función se utiliza (OpenCV API 
Reference, 2014): 
 copyTo(m) 
 copyTo(m, mask) 
Donde: 
m.- Matriz destino. Si no tiene el tamaño o tipo correctos antes de la operación, se 
redistribuye. 
 
MARCO TEÓRICO 
 
47 
 
 
mask.- Máscara de operación. Sus elementos diferentes de cero indican cuáles son los 
elementos de la matriz que deben copiarse. 
 
3.10.1.17. zeros() 
Regresa un arreglo de ceros del tamaño y tipo especificados que puede utilizarse para formar un 
arreglo constante como parámetro de una función o como inicializador de una matriz. Se emplea 
por medio de (opencv.org, OpenCV API Reference, 2014): 
 zeros(rows, cols, type), zeros(size, type) o zeros(ndims, sz, type) 
Donde: 
ndims.- Dimensión del arreglo. 
rows.- Número de filas. 
cols.- Número de columnas. 
size.- Alternativa a la especificación del tamaño de la matriz Size(cols, rows). 
sz – Arreglo de enteros que especifica la forma del arreglo. 
type – Tipo de la matriz creada. 
 
3.10.1.18. Canny() 
Encuentra bordes en una imagen utilizando el algoritmo Canny. Este emplea algo de post 
procesamiento para proporcionar bordes más finos (Brahmbhatt, 2013; opencv.org, OpenCV 
API Reference, 2014). La forma de aplicarlo es (OpenCV API Reference, 2014): 
 Canny(image, edges, threshold1, threshold2, apertureSize=3, L2gradient=false) 
Donde: 
image.- Imagen de entrada de 8 bits y un solo canal. 
edges.- Mapa de bordes de salida con el mismo tamaño y tipo que image. 
threshold1.- Primer umbral para el procedimiento de histéresis. 
threshold2.- Segundo umbral para el procedimiento de histéresis. 
apertureSize.- Tamaño de apertura para el operador Sobel(). 
 
3.10.1.19. findContours() 
 
MARCO TEÓRICO 
 
48 
 
 
Un contorno es una lista de puntos que representa, en una forma u otra, una curva en la imagen. 
En OpenCV los contornos se representan por medio de secuencias en las que se almacena 
información sobre la ubicación del siguiente punto en la curva. Además, esta función extrae una 
jerarquía de puntos y bordes conectados, la cual se organiza de tal forma que los contornos que 
se encuentren más arriba en el árbol son más propensos a ser bordes de objetos, mientras que 
los de niveles más bajos son más tendentes a ser bordes con ruido o de huecos (Bradsky & 
Kaehler, 2008; Brahmbhatt, 2013). 
Para detectar los bordes de la imagen binaria se utiliza: 
 findContours(image, contours, hierarchy, mode, method, offset=Point()) 
 findContours(image, contours, mode, method, offset=Point()). 
Donde (OpenCV API Reference, 2014): 
image.- Imagen fuente de 8 bits y un canal. Los píxeles diferentes de cero son tratados 
como unos y los píxeles con valor cero permanecen iguales, por lo que la imagen es 
tratada como binaria. La función modifica la imagen a la vez que extrae los contornos. 
contours.- Contornos detectados. Cada contorno se almacena como un vector de puntos. 
hierarchy.- Vector de salida opcional que contiene información sobre la topología de la 
imagen. Tiene tantos elementos como el número de contornos. 
mode.- Modo de recuperación de contornos: 
 CV_RETR_EXTERNAL. Recupera solo los contornos exteriores extremos. 
 CV_RETR_LIST. Obtiene todos los contornos sin establecer ninguna relación 
jerárquica. 
 CV_RETR_CCOMP. Extrae todos los contornos y los organiza en una jerarquía 
de dos niveles. En el nivel superior

Continuar navegando