From b46b0c2b07e683a77853a94197eafeba650f9f37 Mon Sep 17 00:00:00 2001 From: Jennifer Ortega <jennifer.ortega@epn.edu.ec> Date: Mon, 17 May 2021 11:09:49 -0500 Subject: [PATCH] Avance --- .../Segmentaci\303\263n-checkpoint.ipynb" | 32 +++++++++---------- "Segmentaci\303\263n.ipynb" | 8 ++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git "a/.ipynb_checkpoints/Segmentaci\303\263n-checkpoint.ipynb" "b/.ipynb_checkpoints/Segmentaci\303\263n-checkpoint.ipynb" index 569d2dc..93b7df7 100644 --- "a/.ipynb_checkpoints/Segmentaci\303\263n-checkpoint.ipynb" +++ "b/.ipynb_checkpoints/Segmentaci\303\263n-checkpoint.ipynb" @@ -229,7 +229,7 @@ " \n", "### Función Watershed de Open CV\n", "Para realizar la segmentación se utilizará la función **cv2.watershed** de la biblioteca libre de visión artificial OpenCV (**cv2**), esta función implementa marcadores para evitar una segmentación excesiva.\n", - "Para establecer los marcadores tenemos que etiquetar la imagen en 3 regiones, la primera es la región que estamos seguros de ser fondo, la region que estamos seguros que es un objeto y finalmente la región que desconocemos que tipo de superficie sea, esta última región se la etiqueta con 0. El algoritmo retornará una matriz cuya región que sea etiquetada con -1 es la que corresponde a los lÃmites del objeto.\n", + "Para establecer los marcadores tenemos que etiquetar la imagen en 3 regiones, la primera es la región que estamos seguros de ser fondo, la región que estamos seguros que es un objeto y finalmente la región que desconocemos que tipo de superficie sea, esta última región se la etiqueta con 0. El algoritmo retornará una matriz cuya región que sea etiquetada con -1 es la que corresponde a los lÃmites del objeto.\n", "\n", "--- \n", "</font> \n", @@ -290,7 +290,7 @@ "source": [ "- El histograma de las intensidades de luminosidad de los pÃxeles de la imagen nos da una idea de cual es la cantidad de objetos presentes en la imagen y su distribución en la misma.\n", "- Los valores que se encuentran entre los valores [100,250] podrÃan ser considerados como fondo ya que aquà se encuentra concentrada la mayor cantidad de valores de luminosidad, mientras que los valores que son menores o mayores a este valor podrÃan ser los objetos.\n", - "Ahora concentrémonos en un objeto en especÃfico que serÃa una roca, para eso recortamos la imagen y la analizamos, para determinar cual es el umbral." + "Ahora concentrémonos en un objeto en especÃfico que serÃa una roca, para eso recortamos la imagen y la analizamos, para determinar cuál es el umbral." ] }, { @@ -356,7 +356,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- El histograma nos muestra para la imagen recortada que los pÃxeles se dividen en 2 zonas, los pÃxeles con valores mayores a 125 y menores a este mismo número, por lo que tomar este valor como umbral, serÃa un buen comienzo para esta imagen, entonces el **umbral = 100**, este umbral nos da una perspectiva de como se encuentran distribuidas las luminosidades en la imagen y cuales pÃxeles se podrÃan consiredar como fondo, y cuales no, además de lo que ya consideramos anteriormente en que valores se encontraba el fondo, lo ideal serÃa elegir a los pÃxeles correspondiente a rocas como objeto y la arena como fondo, pero en este caso no se puede tomar de esta forma ya que las rocas tienen casi el mismo valor de pÃxel y algunas zonas corespondientes a fondo podrÃa el algoritmo considerar como objeto." + "- El histograma nos muestra para la imagen recortada que los pÃxeles se dividen en 2 zonas, los pÃxeles con valores mayores a 125 y menores a este mismo número, por lo que tomar este valor como umbral, serÃa un buen comienzo para esta imagen, entonces el **umbral = 100**, este umbral nos da una perspectiva de como se encuentran distribuidas las luminosidades en la imagen y cuales pÃxeles se podrÃan considerar como fondo, y cuales no, además de lo que ya consideramos anteriormente en qué valores se encontraba el fondo, lo ideal serÃa elegir a los pÃxeles correspondientes a rocas como objeto y la arena como fondo, pero en este caso no se puede tomar de esta forma ya que las rocas tienen casi el mismo valor de pÃxel y algunas zonas corespondientes a fondo podrÃa el algoritmo considerar como objeto." ] }, { @@ -364,7 +364,7 @@ "metadata": {}, "source": [ "### Cálculo de Marcadores\n", - "- Utilizaremos la función **cv2.threshold**, dependiendo del umbral ingresado la función genera una imagen de ceros y unos. Si el pÃxel de la image supera el umbral lo reescribe como 1 si el pÃxel no supera el umbral lo transforma en 0." + "- Utilizaremos la función **cv2.threshold**, dependiendo del umbral ingresado la función genera una imagen de ceros y unos. Si el pÃxel de la imagen supera el umbral lo reescribe como 1 si el pÃxel no supera el umbral lo transforma en 0." ] }, { @@ -448,7 +448,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- Aquà utilizamos la función **cv2.dilate**, aumenta el lÃmite del objeto al fondo, el objeto se hace mas grande, de esta manera, podemos asegurarnos de que cualquier región de fondo en el resultado sea realmente un fondo, ya que se elimina la región de lÃmite, que se encontro manualmente solamente determinando los valores de los pÃxeles. Este sera el primer marcador." + "- Aquà utilizamos la función **cv2.dilate**, aumenta el lÃmite del objeto al fondo, el objeto se hace más grande, de esta manera, podemos asegurarnos de que cualquier región de fondo en el resultado sea realmente un fondo, ya que se elimina la región de lÃmite, que se encontro manualmente solamente determinando los valores de los pÃxeles. Este sera el primer marcador." ] }, { @@ -486,7 +486,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- Ahora encontraremos el segundo marcador, para eso utilizaremos la función **distanceTransform**, en esta operación, las intensidades de nivel de gris de los puntos dentro de las regiones del objeto se cambian por las distancias entre estos y del valor 0 más cercano (lÃmite), a continuación se muestra de una manera gráfica como opera esta función, por lo que la imagen se ve de una forma muy clara en el centro y va degradandose el color a medida que se acerca al lÃmite.\n", + "- Ahora encontraremos el segundo marcador, para eso utilizaremos la función **distanceTransform**, en esta operación, las intensidades de nivel de gris de los puntos dentro de las regiones del objeto se cambian por las distancias entre estos y del valor 0 más cercano (lÃmite), a continuación se muestra de una manera gráfica como opera esta función, por lo que la imagen se ve de una forma muy clara en el centro y va degradándose el color a medida que se acerca al lÃmite.\n", "\n", "<img src=\"imagenes/distance.png\">\n" ] @@ -499,7 +499,7 @@ { "data": { "text/plain": [ - "<matplotlib.image.AxesImage at 0x7f3b34557310>" + "<matplotlib.image.AxesImage at 0x7fe7cc530ed0>" ] }, "execution_count": 11, @@ -532,7 +532,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- Para encontrar el segundo marcador, utilizamos la función threshold, por lo que todos los valores de pÃxeles que sobrepasen el umbral se identifica como objeto y todos los que no lo sobrepasen se considera como zonas desconocidad (no se sabe si es objeto o fondo)." + "- Para encontrar el segundo marcador, utilizamos la función threshold, por lo que todos los valores de pÃxeles que sobrepasen el umbral se identifican como objeto y todos los que no lo sobrepasen se consideran como zonas desconocidas (no se sabe si es objeto o fondo)." ] }, { @@ -570,7 +570,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- Calculamos la diferencia entre los dos marcadores, lo que nos dara como resultado una matriz que es cero en toda la imagen salvo la region donde el algoritmo de watershed va a definir que parte de la imagen representa fodo y que parte representa objeto (franja de algunos pÃxeles alrededor de los lÃmites )." + "- Calculamos la diferencia entre los dos marcadores, lo que nos dará como resultado una matriz que es cero en toda la imagen salvo la region donde el algoritmo de watershed va a definir que parte de la imagen representa fodo y que parte representa objeto (franja de algunos pÃxeles alrededor de los lÃmites )." ] }, { @@ -608,7 +608,7 @@ "source": [ "### Aplicación del algoritmo Watershed\n", "\n", - "- Finalmente aplicamos la función de **watershed** que encontrara los bordes dentro de la franja en donde no estamos seguros que parte representa fondo y cual parte representa el objeto. " + "- Finalmente aplicamos la función de **watershed** que encontrará los bordes dentro de la franja en donde no estamos seguros qué parte representa fondo y cual parte representa el objeto. " ] }, { @@ -693,7 +693,7 @@ "metadata": {}, "source": [ "> **Comentario:** \n", - "El algoritmo logra segmentar la imagen, de acuerdo a los pÃxeles con menor luminosidad, que en este caso serÃan los que corresponden a sombras, todos los pÃxeles con una luminosidad mayor los considera fondo. El algoritmo depende del umbral y del tipo de threshold que se le asigne, además del parámetro que determina la anchura de la banda donde se aplicará el algortimo Watershed (**0.1 x dist_transform.max()**), estos parámetros pueden se modificados y asi se podrán segmentar otros objetos, como rocas, auque esto puede ser una tarea muy dificil ya que las rocas tienen casi el mismo todo de gris en las imágenes que el fondo (suelo), en la siguiente sección se discutirá mas a pronfundidad este hecho." + "El algoritmo logra segmentar la imagen, de acuerdo a los pÃxeles con menor luminosidad, que en este caso serÃan los que corresponden a sombras, todos los pÃxeles con una luminosidad mayor los considera fondo. El algoritmo depende del umbral y del tipo de threshold que se le asigne, además del parámetro que determina la anchura de la banda donde se aplicará el algortimo Watershed (**0.1 x dist_transform.max()**), estos parámetros pueden se modificados y asi se podrán segmentar otros objetos, como rocas, auque esto puede ser una tarea muy dificil ya que las rocas tienen casi el mismo todo de gris en las imágenes que el fondo (suelo), en la siguiente sección se discutirá más a pronfundidad este hecho." ] }, { @@ -707,13 +707,13 @@ "- Primero diseñaremos un código que permita redefinir algunos parámetros en el código para el análisis, que son los principales valores que determinan la región que se segmentará, tales como:\n", " - El umbral \n", " - El tipo de **threshold** que se utilizará.\n", - " - La distancia que es la amplitud de la banda donde se aplicara el algoritmo watershed.\n", - "- El código anterior fue escrito en un archivo segmentacion_fun.py en forma de funciones y parametros ajustables (umbral, tipo de threshold, y distancia de amplitud). El código es importado al notebook a continuación." + " - La distancia que es la amplitud de la banda donde se aplicará el algoritmo watershed.\n", + "- El código anterior fue escrito en un archivo segmentacion_fun.py en forma de funciones y parámetros ajustables (umbral, tipo de threshold, y distancia de amplitud). El código es importado al notebook a continuación." ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -826,7 +826,7 @@ "metadata": {}, "source": [ "> **Comentario:** \n", - "Cambiando los parámetros podemos invertir la forma de segmentación, en este caso se lográ identificar las zonas con mayor luminosidad, que para este caso coinciden con las rocas o zonas rocosas dentro de la imagen (zonas iluminadas)." + "Cambiando los parámetros podemos invertir la forma de segmentación, en este caso se logra identificar las zonas con mayor luminosidad, que para este caso coinciden con las rocas o zonas rocosas dentro de la imagen (zonas iluminadas)." ] }, { @@ -1137,7 +1137,7 @@ "source": [ "### Conclusiones\n", "\n", - "Se utilizó el algoritmo de Watershed con marcadores de la biblioteca OpenCV, para segmentar imágenes de el rover Mars Perseverance de la NASA, este algoritmo se basa en la luminosidad de los pÃxeles para realizar la segmentación, por lo que puede identificar sombras que usulamente se producen por pequeñas elevaciones (rocas) o partes del rover, esto se realizó cambiando los diferentes parámetros dentro de los marcadores utilizados posteriormente en el algortimo de watershed de segmentación, además si se cambiaban los parámetros se podÃan identificar partes rocosas en el suelo de marte, este algoritmo funciona si se escogen bien los valores modificables." + "Se utilizó el algoritmo de Watershed con marcadores de la biblioteca OpenCV, para segmentar imágenes del rover Mars Perseverance de la NASA, este algoritmo se basa en la luminosidad de los pÃxeles para realizar la segmentación, por lo que puede identificar sombras que usualmente se producen por pequeñas elevaciones (rocas) o partes del rover, esto se realizó cambiando los diferentes parámetros dentro de los marcadores utilizados posteriormente en el algortimo de watershed de segmentación, además si se cambiaban los parámetros se podÃan identificar partes rocosas en el suelo de Marte, este algoritmo funciona si se escogen bien los valores modificables." ] }, { diff --git "a/Segmentaci\303\263n.ipynb" "b/Segmentaci\303\263n.ipynb" index dd8d9a4..93b7df7 100644 --- "a/Segmentaci\303\263n.ipynb" +++ "b/Segmentaci\303\263n.ipynb" @@ -499,7 +499,7 @@ { "data": { "text/plain": [ - "<matplotlib.image.AxesImage at 0x7f3b34557310>" + "<matplotlib.image.AxesImage at 0x7fe7cc530ed0>" ] }, "execution_count": 11, @@ -713,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -826,7 +826,7 @@ "metadata": {}, "source": [ "> **Comentario:** \n", - "Cambiando los parámetros podemos invertir la forma de segmentación, en este caso se lográ identificar las zonas con mayor luminosidad, que para este caso coinciden con las rocas o zonas rocosas dentro de la imagen (zonas iluminadas)." + "Cambiando los parámetros podemos invertir la forma de segmentación, en este caso se logra identificar las zonas con mayor luminosidad, que para este caso coinciden con las rocas o zonas rocosas dentro de la imagen (zonas iluminadas)." ] }, { @@ -1137,7 +1137,7 @@ "source": [ "### Conclusiones\n", "\n", - "Se utilizó el algoritmo de Watershed con marcadores de la biblioteca OpenCV, para segmentar imágenes de el rover Mars Perseverance de la NASA, este algoritmo se basa en la luminosidad de los pÃxeles para realizar la segmentación, por lo que puede identificar sombras que usulamente se producen por pequeñas elevaciones (rocas) o partes del rover, esto se realizó cambiando los diferentes parámetros dentro de los marcadores utilizados posteriormente en el algortimo de watershed de segmentación, además si se cambiaban los parámetros se podÃan identificar partes rocosas en el suelo de marte, este algoritmo funciona si se escogen bien los valores modificables." + "Se utilizó el algoritmo de Watershed con marcadores de la biblioteca OpenCV, para segmentar imágenes del rover Mars Perseverance de la NASA, este algoritmo se basa en la luminosidad de los pÃxeles para realizar la segmentación, por lo que puede identificar sombras que usualmente se producen por pequeñas elevaciones (rocas) o partes del rover, esto se realizó cambiando los diferentes parámetros dentro de los marcadores utilizados posteriormente en el algortimo de watershed de segmentación, además si se cambiaban los parámetros se podÃan identificar partes rocosas en el suelo de Marte, este algoritmo funciona si se escogen bien los valores modificables." ] }, { -- GitLab