Podcast sobre Fundamentos del Procesamiento de Imágenes
Fundamentos del Procesamiento de Imágenes: Guía Completa
Podcast
Filtros y Umbrales: La Magia Oculta de las Imágenes
Délka: 25 minut
Kapitoly
¿Qué son los filtros de imagen?
El poder de la umbralización
Tipos de umbral simple
Ajustando a Cero
Moviendo Píxel por Píxel
La Magia de warpAffine
Más Allá de la Traslación
La Magia de la Rotación
Rotación con Código y Escalado
Jugando con la Perspectiva
Aritmética con Imágenes
El Juego de las Siete Diferencias
El ADN de una Imagen: Histogramas
Preparando el Terreno con Filtros
El umbral automático de Otsu
Adaptándose a las sombras
Poniéndolo en práctica
Morfología como Plastilina
Engordar y Adelgazar Píxeles
Operaciones Compuestas
Detectando Bordes y Detalles
Detectando los Límites
Canny en Práctica
Resumen y Despedida
Přepis
Alejandro: Imagina una estudiante llamada Sofía. Está construyendo un pequeño robot para una competencia, uno que tiene que seguir una línea negra sobre un fondo blanco. Su cámara lo ve todo: la línea, el suelo, las sombras, las pequeñas imperfecciones... pero el robot se confunde.
Carmen: Se vuelve loco, ¿verdad? No sabe qué es línea y qué es ruido. Sofía necesita una forma de decirle a su robot: ignora todo lo que no sea negro intenso. ¿Cómo lo hace? Ahí es donde la magia del procesamiento de imágenes entra en juego.
Alejandro: Y de eso vamos a hablar hoy. Esto es Studyfi Podcast.
Alejandro: Perfecto, Carmen. Entonces, para ayudar a Sofía y a su robot, mencionaste el "procesamiento de imágenes". Suena a algo súper complejo, como de película de ciencia ficción.
Carmen: ¡Podría serlo! Pero el concepto base es bastante simple. Piensa en un filtro de Instagram. Tomas una foto y le aplicas un filtro que cambia los colores o el brillo. Eso es procesamiento de imágenes.
Alejandro: Okey, eso lo entiendo. Le das una imagen al programa y te devuelve otra, modificada.
Carmen: Exacto. En un nivel más técnico, un filtro toma una imagen de entrada y genera una de salida. El objetivo es muy específico: enfatizar o simplificar ciertas áreas para que luego podamos analizarlas más fácilmente.
Alejandro: Como en el caso de Sofía. Necesitamos enfatizar la línea negra y eliminar todo lo demás.
Carmen: ¡Precisamente! Y para eso, la herramienta más sencilla y poderosa es la umbralización.
Alejandro: Umbralización. La palabra suena intimidante. ¿Es tan complicada como parece?
Carmen: Para nada. De hecho, es el método de segmentación más simple que existe. La idea es definir un "umbral", un valor de corte. Piénsalo como una regla: "si el gris de un píxel es más oscuro que este valor, píntalo de negro. Si es más claro, píntalo de blanco".
Alejandro: ¡Ah! Entonces, de repente, la imagen ya no tiene grises, ni sombras, ni nada intermedio. O es blanco o es negro.
Carmen: Exacto. A esa imagen resultante, que solo tiene dos colores, la llamamos imagen binarizada. Y para el robot de Sofía, ¡es perfecta! Ahora ve un camino negro clarísimo sobre un fondo blanco puro. Problema resuelto.
Alejandro: ¡Increíble! Es como tomar una decisión radical por cada píxel. Sin dudas. ¿Y siempre es la misma regla o hay diferentes tipos?
Carmen: Muy buena pregunta. Existen varios algoritmos para aplicar este umbral, y cada uno sirve para un propósito ligeramente distinto. Los más comunes son los de umbralización simple.
Alejandro: Okey, entremos en detalle. ¿Cuál es el primer tipo, el más básico?
Carmen: Se llama Umbral Binario, o THRESH_BINARY. Es exactamente lo que describimos. Si el valor del píxel original es mayor que tu umbral, el nuevo píxel se convierte en el valor máximo, digamos blanco. Si no lo supera, se va a cero, o sea, negro.
Alejandro: Simple y directo. ¿Y si quiero lo contrario? ¿Una línea blanca sobre un fondo negro?
Carmen: ¡Para eso está el Umbral Binario Invertido! O THRESH_BINARY_INV. Hace justamente lo opuesto. Si el píxel supera el umbral, se vuelve negro. Si no, se vuelve blanco. Inviertes la lógica.
Alejandro: Tiene sentido que los programadores le pongan nombres tan obvios. Me gusta. ¿Qué más hay?
Carmen: Bueno, a veces no quieres perder toda la información. Para eso está la opción de Truncar, o THRESH_TRUNC.
Alejandro: ¿Truncar? ¿Como cortar algo?
Carmen: Exacto. La regla aquí es: si un píxel supera el umbral, su nuevo valor no será blanco, sino que será exactamente el valor del umbral. Los píxeles que no lo superan... se quedan como estaban. Es como ponerle un techo al brillo.
Alejandro: Ooh, eso es útil. Así que mantienes los detalles en las zonas más oscuras, pero evitas que las zonas más brillantes te deslumbren, por así decirlo.
Carmen: ¡Perfecta analogía! Y para terminar con los básicos, tenemos dos más que son parientes: Ajustar a Cero y su versión invertida.
Alejandro: Ajustar a Cero... THRESH_TOZERO. Suena como que va a borrar muchas cosas.
Carmen: Un poco, sí. Con THRESH_TOZERO, cualquier píxel que NO supere el umbral se convierte en cero, o sea, negro. Los que sí lo superan se quedan con su valor original.
Alejandro: Ya veo. Es como si borraras todo lo que no te interesa, todo lo que es demasiado oscuro, pero dejas intacto lo que sí es lo suficientemente brillante.
Carmen: Exactamente. Es una forma de limpiar el "ruido" de fondo sin alterar los objetos de interés. Y como te puedes imaginar, su hermano, THRESH_TOZERO_INV...
Alejandro: Déjame adivinar. Hace lo contrario. Si el píxel SUPERA el umbral, se va a cero. Y si no, se queda igual.
Carmen: ¡Lo tienes! Así es. Con estas cinco herramientas tan simples, puedes hacer una limpieza y una selección de características increíblemente potente en una imagen.
Alejandro: Así que, para recapitular: Binario, Binario Invertido, Truncar, y los dos de Ajustar a Cero. Todas son formas de tomar una decisión simple, un umbral, para transformar una imagen y prepararla para un análisis más profundo.
Carmen: Ese es el resumen perfecto. Y es el primer paso fundamental en campos como la visión por computadora, el reconocimiento de objetos y, por supuesto, para ayudar a pequeños robots a seguir una línea.
Alejandro: Wow, esa matriz de transformación es la clave de todo. Pero, ¿cómo se ve eso en código real? ¿Es tan complicado como suena?
Carmen: ¡Gran pregunta! Y no, no es tan intimidante. Hay dos formas principales de hacerlo, una para aprender y otra para trabajar de verdad.
Alejandro: A ver, cuéntame la primera forma, la de aprender.
Carmen: Claro. Es el método manual. Piensa que tienes que mover cada píxel de tu imagen original a una nueva posición en una imagen en blanco que creas desde cero.
Alejandro: ¿Uno por uno? Suena... increíblemente tedioso.
Carmen: Lo es, pero es genial para entender lo que pasa por debajo. Usas dos bucles for, uno que recorre las filas y otro las columnas.
Alejandro: O sea, un bucle dentro de otro bucle. Ya me imagino mi computadora pidiendo ayuda.
Carmen: ¡Exacto! Para cada píxel, tomas su posición (x, y), usas la matriz para calcular la nueva posición, y copias el color del píxel a ese nuevo lugar.
Alejandro: Entiendo. Es como mudar los muebles de una casa a otra, pero moviendo un solo tornillo a la vez.
Carmen: ¡Esa es una buena analogía! Es educativo, pero no es nada eficiente.
Alejandro: Entonces, ¿cuál es la forma eficiente? ¿La que no hace llorar a mi procesador?
Carmen: ¡Aquí es donde entra la magia de OpenCV! Hay una función llamada cv2.warpAffine.
Alejandro: ¿Warp Affine? Suena a velocidad de nave espacial.
Carmen: Y casi lo es. En lugar de los bucles, simplemente le das a esta función tu imagen, la matriz de transformación que ya creamos, y el tamaño final que quieres.
Alejandro: ¿Y ya está? ¿Hace todo el trabajo por mí?
Carmen: ¡Todo! OpenCV está súper optimizado por detrás con código de bajo nivel. Lo que a nosotros nos tomaría minutos en procesar con bucles, warpAffine lo hace en una fracción de segundo.
Alejandro: Increíble. Entonces, el mensaje es: entiende los bucles, pero usa warpAffine en la vida real.
Carmen: ¡Exactamente! No hay razón para reinventar la rueda cuando ya tienes un auto de carreras a tu disposición.
Alejandro: Perfecto, ya quedó clarísimo. Así que ya sabemos cómo deslizar una imagen por la pantalla. Pero esto es solo el comienzo, ¿verdad? ¿Qué otras transformaciones poderosas podemos hacer?
Carmen: ¡Por supuesto! Mover cosas es solo rascar la superficie. Una de las técnicas más útiles es algo llamado umbralización o *thresholding*, que nos ayuda a separar objetos del fondo.
Alejandro: Así que ya podemos mover objetos por la pantalla con la traslación. Pero, ¿qué pasa si quiero girarlos? Como... hacer que un personaje en un videojuego mire hacia otro lado.
Carmen: ¡Exacto! Y para eso usamos la rotación. Piensa en esto: la rotación es como un operador mágico. Tomas un punto, lo multiplicas por una matriz de rotación... y ¡puf! El punto ha girado.
Alejandro: ¿Un operador mágico? Suena a que necesito una varita.
Carmen: ¡Casi! La fórmula es sencilla: el nuevo punto es igual a la matriz de rotación, que llamamos R, por el punto original. Esta matriz R depende de dos cosas: sobre qué eje quieres girar y cuántos grados.
Alejandro: Ok, entonces hay una matriz para girar en el eje X, otra para el Y, y otra para el Z, ¿cierto?
Carmen: Justo así. Cada una tiene una estructura con senos y cosenos para calcular la nueva posición. ¡La trigonometría que creías que no volverías a usar!
Alejandro: Siempre vuelve. Entonces, en la práctica, ¿cómo se ve esto? Por ejemplo, en programación.
Carmen: Gran pregunta. En librerías como OpenCV, no tienes que construir la matriz a mano. Hay funciones como getRotationMatrix2D que lo hacen por ti. Solo le dices el centro, el ángulo y ¡listo!
Alejandro: Eso es un alivio. Mucho más fácil que recordar todas esas matrices. Y ya que estamos transformando cosas, ¿podemos hacerlas más grandes o pequeñas?
Carmen: ¡Claro! Eso se llama escalado. Y es aún más simple. La matriz de escalado básicamente solo cambia los valores en su diagonal principal para estirar o encoger el objeto. Así es como funciona el zoom en una imagen, por ejemplo.
Alejandro: Entiendo. Así que con estas matrices podemos mover, rotar y escalar. Tenemos casi todo el control.
Carmen: Casi todo. La verdadera potencia viene cuando combinamos todas estas operaciones, lo que nos lleva a las transformaciones afines. Pero eso es un tema para más adelante.
Alejandro: Así que con esas transformaciones afines podemos mover, escalar y rotar imágenes a nuestro antojo. Pero, ¿qué pasa si queremos... deformarlas un poco? Como si estuviéramos viendo algo desde un ángulo extraño.
Carmen: ¡Excelente pregunta, Alejandro! Eso nos lleva a algo llamado cambio de perspectiva. No es tan complicado como suena. Es básicamente sesgar o inclinar la imagen.
Alejandro: ¿Sesgar? ¿Como estirar una esquina de la foto pero manteniendo las otras en su lugar?
Carmen: ¡Exacto! Piensa en una baraja de cartas. Si la empujas desde un lado, las cartas se deslizan y la pila se inclina. Eso es un cambio de perspectiva horizontal. Y para lograrlo, solo necesitamos una matriz de transformación especial.
Alejandro: Ah, otra vez las matrices. Supongo que son la clave de todo esto.
Carmen: ¡Son la navaja suiza de la visión artificial! Mira, en el código, creamos una matriz tMatrix con NumPy. Los valores en ciertas posiciones, como el que en el código tiene un 1, le dicen a OpenCV: "por cada fila de píxeles que bajes, empuja los píxeles hacia la derecha".
Alejandro: Entiendo. Así que el código recorre cada píxel de la imagen original... toma su color y su posición (x, y)...
Carmen: Correcto. Luego multiplica esa posición por nuestra matriz mágica de transformación. El resultado es una nueva posición (x', y'). Y simplemente le decimos al programa: "Oye, el color de este píxel ahora va en esta nueva coordenada".
Alejandro: Y al hacer eso con todos los píxeles, la imagen entera parece inclinada. ¡Qué ingenioso!
Carmen: Lo es. Y si quisiéramos una perspectiva vertical, solo cambiamos los valores en la matriz. Es un control increíblemente preciso sobre la geometría de la imagen.
Alejandro: Vale, manipular una sola imagen es fascinante. Pero, ¿podemos hacer que dos imágenes interactúen entre sí? ¿Como... sumarlas?
Carmen: ¿Sumar imágenes? ¡Claro que sí! Podemos tratarlas como si fueran números gigantes y aplicarles operaciones aritméticas básicas: suma, resta, multiplicación y división.
Alejandro: Espera, ¿qué significa sumar dos fotos? ¿Se vuelve más brillante? ¿O es como una doble exposición?
Carmen: Es más como una doble exposición. La función cv2.add toma los valores de los píxeles de dos imágenes en la misma posición y los suma. Si tienes un píxel azul en una y uno amarillo en la otra, el resultado será un píxel... bueno, verdoso y muy brillante.
Alejandro: ¡Suena a que podrías crear efectos psicodélicos con eso!
Carmen: Totalmente. Pero hay una función aún más útil llamada cv2.addWeighted. Aquí es donde la cosa se pone interesante. Le puedes dar un "peso" a cada imagen.
Alejandro: ¿Un peso? ¿Como diciendo "quiero un 70% de esta imagen y un 30% de la otra"?
Carmen: ¡Precisamente! Así es como se crean los efectos de fundido o las transparencias que ves en los videos. Es una forma súper sencilla de mezclar imágenes de manera controlada.
Alejandro: Ok, la suma tiene sentido para mezclar. Pero... ¿restar imágenes? ¿Para qué querríamos hacer eso?
Carmen: Ah, aquí es donde la visión por computadora empieza a mostrar su verdadero poder. Restar imágenes es la base para algo fundamental... detectar cambios.
Alejandro: ¿Detectar cambios? ¿Te refieres a como en esos juegos de "encuentra las diferencias"?
Carmen: ¡Exactamente ese es el principio! Imagina que tienes dos fotos de una casa. Son idénticas, excepto que en la segunda alguien dibujó un recuadro rojo en la puerta.
Alejandro: Vale, te sigo.
Carmen: Si usamos la función cv2.absdiff, que calcula la diferencia absoluta píxel a píxel, ¿qué crees que pasará?
Alejandro: Mmm... supongo que donde las imágenes son iguales, la diferencia es cero, o sea, negro. Y donde está el recuadro rojo... ¡ahí la diferencia no será cero!
Carmen: ¡Bingo! El resultado será una imagen casi toda negra, con la única forma visible siendo ese recuadro rojo. Acabamos de aislar perfectamente lo que cambió entre las dos imágenes.
Alejandro: ¡Wow! Eso es... eso es la base de los sistemas de seguridad, ¿verdad? Comparar un fotograma con el siguiente para ver si algo se movió.
Carmen: Has dado en el clavo. Es una técnica increíblemente simple pero poderosa para la detección de movimiento. Todo se reduce a una simple resta.
Alejandro: De acuerdo, hemos deformado, combinado y comparado imágenes. Ahora, ¿cómo podemos entender las propiedades de una sola imagen? ¿Como saber si es muy oscura o muy clara sin siquiera mirarla?
Carmen: Para eso, usamos una herramienta llamada histograma. Piensa en el histograma como el ADN de la iluminación de una imagen. Es un gráfico que nos cuenta una historia.
Alejandro: ¿Una historia? Me gusta cómo suena eso. ¿Qué nos cuenta?
Carmen: En el eje horizontal, tenemos todos los niveles de intensidad posibles, desde el negro puro (cero) hasta el blanco puro (255). Y en el eje vertical, el gráfico nos dice cuántos píxeles hay en la imagen para cada uno de esos niveles de intensidad.
Alejandro: Ah, ya veo. Así que si el gráfico tiene un pico enorme a la izquierda, en la zona del cero...
Carmen: Significa que la imagen tiene muchísimos píxeles oscuros. Es una foto oscura. Si el pico está a la derecha, cerca del 255, es una imagen muy brillante, quizás sobreexpuesta. Es una forma de analizar una imagen de manera cuantitativa.
Alejandro: Es como tener una radiografía de la luz de la foto. Y supongo que OpenCV tiene una función para esto, ¿no?
Carmen: Por supuesto. Se llama cv2.calcHist. Le das la imagen y te devuelve este mapa detallado de su distribución de luz. Es fundamental para tareas más avanzadas como el ajuste de contraste o el brillo automático.
Alejandro: Bien, para recapitular... hemos visto cómo transformar la geometría con matrices, cómo operar con imágenes usando aritmética para detectar cambios, y cómo analizar su composición de luz con histogramas. Esto es un montón de herramientas poderosas.
Carmen: Y apenas estamos arañando la superficie. Todas estas técnicas son los bloques de construcción. Pero, ¿qué pasa si una imagen tiene... problemas? ¿Qué pasa si tiene mucho ruido o si los bordes no se ven claros?
Alejandro: ¿Podemos arreglar eso? ¿Como aplicar un filtro de Instagram pero con código?
Carmen: Es una muy buena analogía. Podemos aplicar filtros para mejorar o modificar una imagen. Generalmente, los dividimos en dos grandes familias.
Alejandro: ¿Y cuáles son?
Carmen: Tenemos los filtros de paso bajo, que son geniales para suavizar la imagen y eliminar el ruido, como si la difumináramos un poco. Y luego están los filtros de paso alto, que hacen todo lo contrario: realzan los detalles y nos ayudan a encontrar los bordes de los objetos.
Alejandro: Suavizar o resaltar... Suena a que son opuestos pero ambos muy útiles. Me dejas con la intriga.
Carmen: ¡Esa es la idea! En nuestro próximo segmento, nos sumergiremos de lleno en el mundo de los filtros y veremos cómo un simple desenfoque puede ser el primer paso para detectar objetos complejos.
Alejandro: Entonces, elegir ese umbral manualmente puede ser un poco a prueba y error. ¿Hay alguna forma de que la computadora haga el trabajo pesado por nosotros?
Carmen: ¡Claro que sí, Alejandro! Para eso existe la umbralización de Otsu. Es un método que selecciona el umbral de forma completamente automática.
Alejandro: ¿Automática? ¿Cómo sabe cuál es el valor correcto?
Carmen: Buena pregunta. Funciona de maravilla en histogramas que tienen dos picos claros, lo que se conoce como bimodal. Imagina dos montañas en tu histograma: una para los píxeles oscuros y otra para los claros.
Alejandro: Entiendo... como el fondo y un objeto.
Carmen: Exacto. El método de Otsu encuentra el punto más bajo en el valle que hay entre esas dos montañas para trazar la línea de separación. Es súper eficiente.
Alejandro: Suena genial, pero ¿qué pasa si la imagen no tiene una iluminación perfecta? Pienso en fotos con sombras o reflejos.
Carmen: Ahí es donde Otsu puede fallar. Para esos casos, usamos la umbralización adaptativa. Es mucho más inteligente.
Alejandro: ¿Adaptativa? ¿Se adapta a la imagen?
Carmen: Sí. En lugar de usar un único umbral para toda la imagen, calcula un umbral diferente para cada pequeña región. Básicamente, mira la vecindad de cada píxel.
Alejandro: ¿La vecindad? ¿Como los píxeles que viven al lado?
Carmen: ¡Justo así! Es como una especie de comité vecinal de píxeles que decide el umbral para esa zona específica. Esto es ideal para imágenes con gradientes de luz o sombras.
Alejandro: O sea que tenemos dos métodos principales: Otsu para imágenes bien contrastadas y adaptativo para las más complicadas.
Carmen: Correcto. Y lo mejor es que en la actividad práctica, van a poder jugar con ambos. Usarán una barra deslizante, un *trackbar*, para ver en tiempo real cómo cambia la imagen.
Alejandro: ¡Eso suena mucho más divertido! Ver el efecto al instante seguro ayuda a entenderlo mejor.
Carmen: Por supuesto. La clave es experimentar. Verán cómo un umbral global a veces no es suficiente y por qué el enfoque adaptativo es tan poderoso. Así que, recapitulando, no hay un solo umbral para gobernarlos a todos... a veces necesitas uno para cada vecindario.
Alejandro: Vale, ya sabemos cómo ajustar colores y brillos, pero... ¿qué pasa con la forma de los objetos en una imagen? ¿Podemos, no sé, modificarlos?
Carmen: ¡Absolutamente! Para eso existe la morfología matemática. Suena muy técnico, pero piensa en ello como jugar con plastilina digital.
Alejandro: ¿Plastilina digital? Me gusta cómo suena eso. ¿Cómo funciona?
Carmen: Usamos algo llamado 'elemento estructurante', o Kernel. Imagina que es un pequeño sello que vamos pasando por toda la imagen, y según la forma de ese sello, modificamos la geometría de lo que hay debajo.
Alejandro: Interesante. ¿Y qué tipo de modificaciones podemos hacer?
Carmen: Las dos operaciones básicas son la dilatación y la erosión. La dilatación... es como inflar un globo. Hace los objetos más grandes, une regiones cercanas y cierra pequeños huecos.
Alejandro: Entendido, como 'engordar' el objeto. ¿Y la erosión es lo contrario?
Carmen: Exacto. Es como lijar los bordes de la figura. Reduce el tamaño de los objetos, elimina el ruido blanco y puede separar elementos que estén muy juntos.
Alejandro: Entonces podemos combinar estas operaciones, ¿verdad?
Carmen: ¡Ahí está la magia! Si haces primero una erosión y luego una dilatación, se llama Apertura. Es fantástica para eliminar pequeñas motas de ruido sin alterar el objeto principal.
Alejandro: Vale, ¿y si lo hacemos al revés?
Carmen: Si primero dilatas y luego erosionas, tienes un Cierre. Esto es útil para rellenar pequeños agujeros dentro de un objeto. Piensa en tapar los huecos de un queso suizo.
Alejandro: ¡Genial! Así que tenemos Apertura para quitar ruido y Cierre para rellenar huecos. Sencillo.
Carmen: Y hay más. El Gradiente Morfológico, que es la diferencia entre la imagen dilatada y la erosionada, nos da solo el contorno de los objetos.
Alejandro: ¡Solo el borde! Eso es muy útil.
Carmen: Sí. Y luego están Top Hat y Black Hat, que son geniales para resaltar detalles muy pequeños, ya sean claros sobre un fondo oscuro o viceversa.
Alejandro: Increíble todo lo que se puede hacer solo cambiando la forma. Entonces, para resumir: dilatación agranda, erosión reduce, apertura limpia y cierre rellena.
Alejandro: Y hablando de identificar formas, eso nos lleva directamente a nuestro último tema: la detección de bordes.
Carmen: Exacto. Y para esto, una de las herramientas más famosas es el filtro Canny. Su trabajo es identificar los límites de los objetos en una imagen.
Alejandro: O sea, dibujar el contorno de todo lo que ve. Suena útil.
Carmen: Lo es, pero es un proceso de múltiples etapas. Primero, como las imágenes pueden tener ruido, el algoritmo aplica un filtro gaussiano para suavizarla y no confundir el ruido con un borde real.
Alejandro: ¿Y cómo le decimos a la computadora que haga todo eso? ¿Es complicado?
Carmen: Para nada. En OpenCV, es una sola línea. Usas la función cv2.Canny() y le pasas la imagen y dos valores: un umbral inferior y uno superior.
Alejandro: ¿Umbrales? ¿Es como decirle qué tan exigente debe ser?
Carmen: ¡Justo eso! Le dices: "solo considera un borde si el cambio de intensidad es suficientemente fuerte". Por ejemplo, cv2.Canny(img, 100, 200).
Alejandro: ¡Entendido! Así evitamos que dibuje el contorno de una mota de polvo.
Carmen: Precisamente. Jugando con esos umbrales, obtienes más o menos detalles en los bordes detectados.
Alejandro: Entonces, para recapitular, el filtro Canny es un detector de bordes inteligente que primero limpia la imagen y luego traza los contornos basándose en umbrales que nosotros definimos. ¡Genial!
Carmen: Así es. Y con esto, hemos cubierto desde los filtros básicos hasta técnicas más avanzadas como esta. Un gran recorrido por el procesamiento de imágenes.
Alejandro: Sin duda. Ha sido un episodio increíble, Carmen, muchas gracias por tu claridad. Y a todos los que nos escuchan, gracias por acompañarnos en Studyfi Podcast. ¡Hasta la próxima!
Carmen: ¡Adiós a todos!