Binarizar imagen Java

Lester Meneses
14 May 201514:31

Summary

TLDREl video ofrece una explicación detallada sobre cómo binarizar una imagen, un proceso esencial en el procesamiento de imágenes que se utiliza en Inteligencia Artificial. El presentador, Lester Meneces, comparte su conocimiento adquirido a través de extensas investigaciones y explica que la binarización consiste en reducir la información de una imagen a dos valores: cero (negro) y 255 (blanco). Para ello, utilizamos la clase BufferedImage y métodos como getRGB y setRGB para manipular los píxeles. Además, se discute la importancia de definir un ancho y alto máximo para las imágenes para optimizar el rendimiento en proyectos que involucran redes neuronales. El vídeo incluye un ejemplo práctico de cómo binarizar una imagen de Superman, mostrando cómo el resultado varía con diferentes valores umbral.

Takeaways

  • 📚 Binarización es una técnica de procesamiento de imágenes que reduce la información de una imagen a dos valores: cero (negro) y 255 (blanco).
  • 🔍 El proceso de binarización es útil en Inteligencia Artificial, especialmente cuando se trata de procesar imágenes para tareas como el seguimiento de un camino por un carrito.
  • 🖼️ Para trabajar con imágenes, es necesario redimensionar y luego binarizar la imagen para reducir la información a lo esencial.
  • 📏 Se utilizan variables estáticas finales para definir el ancho y el alto máximo permitidos de una imagen, lo que ayuda a controlar el rendimiento del procesamiento.
  • 💾 Una imagen se puede representar como una matriz de píxeles, donde cada píxel tiene un valor de color compuesto por los componentes rojo, verde y azul (RGB).
  • 🔢 El método `getRGB` se utiliza para obtener el valor del color de un píxel en una posición específica de la imagen.
  • 🎨 El umbral de binarización es el límite que determina si un píxel será considerado negro o blanco. Un valor umbral más alto puede resultar en una imagen más oscura (más negros), mientras que un valor umbral más bajo dará una imagen más clara (más blancos).
  • 🔄 Para binarizar una imagen, se calcula el promedio de los colores de cada píxel y se compara con el umbral; si es mayor, el píxel es blanco, de lo contrario es negro.
  • ➡️ Después de binarizar la imagen, es necesario convertir la matriz de colores de regreso en una imagen利用`BufferedImage` y el método `setRGB`.
  • 🖥️ La clase `BufferedImage` y el método `ImageIO.write` se utilizan para guardar y escribir la imagen binarizada en un archivo.
  • 📉 El rendimiento del procesamiento de imágenes puede verse afectado por el tamaño de la imagen; por ello, se recomienda restringir el ancho y el alto a valores máximos permitidos para mejorar el rendimiento.

Q & A

  • ¿Qué es la binarización en el procesamiento de imágenes?

    -La binarización es una técnica del procesamiento de imágenes que consiste en reducir la información de una imagen digital a dos valores: cero, que representa el negro, y 255, que representa el blanco.

  • ¿Por qué es importante binarizar una imagen en el contexto de Inteligencia Artificial?

    -La binarización es importante en Inteligencia Artificial porque permite reducir a lo más básico la información de una imagen, lo que es útil para procesar imágenes de manera eficiente en tareas como el seguimiento de un camino por parte de un carrito, por ejemplo.

  • ¿Cuál es el propósito de las variables estáticas en el código?

    -Las variables estáticas en el código son aquellas que mantienen el mismo valor en todo el programa y en todas las instancias de la variable. Esto significa que el espacio asignado en memoria para la variable es único y su valor no puede ser modificado después de su inicialización.

  • ¿Cómo se carga una imagen en la clase para procesarla?

    -Para cargar una imagen en la clase, se utiliza el constructor de la clase, el cual recibe un String que representa la ruta del archivo de la imagen. Luego, se utiliza la clase BufferedImage y el método 'getImage' de la clase ImageIO para decodificar y cargar la imagen en una variable de tipo BufferedImage.

  • ¿Cómo se determina si una imagen debe ser restringida por su tamaño en el procesamiento?

    -Se determina si una imagen debe ser restringida por su tamaño comparando su ancho y alto con los valores máximos permitidos definidos en el código. Si el ancho o el alto de la imagen excede estos valores, la imagen se restringe al ancho o alto permitido, lo que puede resultar en una pérdida de información.

  • ¿Cómo se convierte cada píxel de una imagen en un valor del arreglo de colores?

    -Para convertir cada píxel de una imagen en un valor del arreglo de colores, se utilizan dos ciclos para recorrer filas y columnas de la imagen. Se llama al método 'getRGB' para obtener el valor del color del píxel en una posición específica y se asigna ese valor al arreglo de colores correspondiente.

  • ¿Qué es el método 'getRGB' y para qué sirve?

    -El método 'getRGB' se utiliza para obtener el valor del color del píxel en una posición específica de la imagen. Retorna el valor del color en un valor entero que representa la combinación de los colores rojo, verde y azul (RGB).

  • ¿Cómo se realiza el proceso de binarización de una imagen?

    -El proceso de binarización de una imagen consiste en comparar cada píxel de la imagen con un umbral determinado. Si el valor del píxel es más claro que el umbral, se considera como blanco; de lo contrario, se considera como negro. Esto se hace calculando el promedio de los valores de color de cada píxel y comparándolo con el umbral.

  • ¿Cómo se imprime una imagen binarizada?

    -Para imprimir una imagen binarizada, se utiliza la clase BufferedImage nuevamente, creando una nueva instancia con el ancho y el alto de la imagen. Luego, se utiliza un ciclo para recorrer la matriz de colores y el método 'setRGB' para asignar los valores de color a cada píxel de la nueva imagen. Finalmente, se utiliza la clase ImageIO y su método 'write' para escribir y guardar la imagen binarizada.

  • ¿Cómo afecta el valor del umbral la calidad de la binarización de una imagen?

    -El valor del umbral afecta directamente la calidad de la binarización. Un valor de umbral demasiado alto puede resultar en una imagen predominantemente negra, mientras que un valor demasiado bajo puede hacer que la imagen sea predominantemente blanca. Es importante encontrar un valor intermedio que permita una transición clara entre los colores negros y blancos.

  • ¿Por qué es necesario guardar el ancho y el alto de la imagen original?

    -Es necesario guardar el ancho y el alto de la imagen original para poder crear una nueva imagen de salida con las mismas dimensiones después del proceso de binarización. Esto asegura que la imagen binarizada tenga la misma resolución que la original.

Outlines

00:00

😀 Introducción a la binarización de imágenes

El primer párrafo introduce el tema de la binarización de imágenes, una técnica de procesamiento de imágenes que reduce la información a dos valores: negro (0) y blanco (255). El objetivo es preparar imágenes para su procesamiento en inteligencia artificial, como en el caso de un carrito que sigue un camino. Se menciona que el código para realizar la binarización está disponible en la descripción del video y se ofrece una explicación detallada del proceso.

05:00

🖼️ Procesamiento de imágenes y limitación de tamaño

Este párrafo se enfoca en la preparación de la imagen antes de la binarización. Se describe cómo se carga una imagen en la clase y se establecen límites máximos para el ancho y la altura de la imagen para optimizar el rendimiento del procesamiento. Se utiliza la clase `BufferedImage` para manejar la imagen y se explica el uso de variables estáticas y finales para definir estas limitaciones.

10:01

🔄 Conversión de píxeles a valores numéricos

En este párrafo, se aborda cómo convertir cada píxel de la imagen en un valor numérico utilizando dos ciclos para recorrer filas y columnas. Se utiliza el método `getRGB` para obtener el valor del color de cada píxel, el cual se almacena en una matriz. Se destaca la importancia de comprender el modelo de color RGB y cómo se relaciona con los valores numéricos de los píxeles.

📈 Binarización y selección de umbral

El proceso de binarización se describe en detalle en este párrafo. Se compara cada píxel de la imagen con un umbral para determinar si es negro o blanco. Se calcula el promedio de los valores de color de cada píxel y se decide su clasificación en función de si supera el umbral. Luego, se explica cómo imprimir la imagen binarizada utilizando la clase `BufferedImage` y el método `setRGB` para asignar los valores de color.

Mindmap

Keywords

💡binarizar

Binarizar es el proceso de convertir una imagen digital a solo dos valores posibles, generalmente 0 y 255, representando los colores negro y blanco respectivamente. Esta técnica reduce la complejidad visual de una imagen para facilitar su análisis o procesamiento posterior. En el video, se usa para simplificar imágenes en un proyecto que involucra una red neuronal, permitiendo que el sistema procese más rápidamente la información visual.

💡procesamiento de imágenes

El procesamiento de imágenes es un campo del conocimiento que involucra técnicas para manipular y analizar imágenes digitales con el objetivo de mejorar su calidad o extraer información. En el contexto del video, se discute cómo manipular imágenes mediante técnicas como la binarización y la redimensión para adaptarlas a las necesidades de un proyecto de inteligencia artificial.

💡umbral

El umbral es un valor límite usado para determinar cómo se clasificarán los elementos de una imagen durante el proceso de binarización. En el video, se menciona el uso de un umbral para decidir si un píxel debe ser blanco o negro, basándose en la intensidad del color. Elegir correctamente este valor es crucial para obtener resultados adecuados en la binarización.

💡red neuronal

Una red neuronal es un modelo computacional que imita la manera en que las neuronas en el cerebro humano interaccionan, para realizar tareas de aprendizaje automático. En el video, se menciona que la binarización de imágenes forma parte de un proyecto que utiliza redes neuronales para procesar imágenes y facilitar que un carro autónomo siga un camino.

💡buffer image

Buffer Image se refiere a un tipo de objeto en programación utilizado para almacenar una imagen en memoria mientras se manipula. En el video, se utiliza la clase 'Buffer Image' para leer y modificar imágenes, y es fundamental en el proceso de cargar, modificar y finalmente escribir la imagen procesada.

💡getRGB y setRGB

getRGB y setRGB son métodos usados en programación para obtener y asignar valores de color a un píxel en imágenes. getRGB obtiene el color de un píxel específico en formato RGB, y setRGB asigna un valor RGB a un píxel. En el video, estos métodos son cruciales para el proceso de conversión y análisis de los píxeles durante la binarización.

💡clase ImageIO

ImageIO es una clase en Java que proporciona métodos estáticos para la lectura y escritura de imágenes. En el script, se utiliza para leer imágenes del disco y escribirlas de nuevo después de procesarlas, facilitando la manipulación de formatos de imagen como JPG o PNG.

💡método constructor

El método constructor en programación es una rutina especial que se llama al crear un objeto de una clase. En el video, el constructor de la clase de imagen recibe la ruta de una imagen y la utiliza para inicializar el objeto con los datos necesarios para su procesamiento.

💡variables estáticas y finales

En programación, una variable 'estática' mantiene un único valor compartido por todas las instancias de una clase, mientras que una variable 'final' no puede ser modificada una vez asignada. En el video, se usan estas variables para definir dimensiones máximas permitidas para las imágenes, asegurando que todas las operaciones sobre imágenes se manejen con consistencia.

💡matriz de colores

Una matriz de colores es una estructura de datos que representa los colores de los píxeles de una imagen en forma de matriz, lo que facilita el procesamiento y análisis por parte del software. En el video, se convierte la imagen en una matriz de colores para manipularla más fácilmente durante el proceso de binarización.

Highlights

Lester Meneces introduce el tema de binarizar una imagen, un proceso importante en el procesamiento de imágenes.

El binarización es una técnica que reduce la información de una imagen a dos valores: negro y blanco.

Se menciona la importancia de la binarización en el contexto de un curso de Inteligencia Artificial y su aplicación en un proyecto de seguimiento de carretes.

Se destaca la necesidad de redimensionar una imagen antes de binarizarla para procesarla de manera eficiente.

Se describe la estructura de la clase Imagen, donde se cargan y manipulan las imágenes.

Se explica el uso de variables estáticas para definir el ancho y el alto máximos permitidos de una imagen en el proyecto.

Se discute la importancia del rendimiento en la computadora y cómo las imágenes grandes afectan negativamente el mismo.

Se introduce el concepto de 'final' en programación, que asegura que una variable tenga un valor constante a lo largo del programa.

Se describe cómo se carga una imagen en la clase Imagen utilizando la clase BufferedImage y la clase ImageIO.

Se detalla el proceso de restringir el tamaño de una imagen si este excede los límites permitidos.

Se explica cómo convertir cada píxel de la imagen en una posición del arreglo de colores utilizando métodos de la clase Color.

Se menciona el uso del método 'getRGB' para obtener el valor del color de un píxel en una posición específica.

Se describe el proceso de binarización, que implica comparar cada píxel con un umbral determinado para asignarle un valor de negro o blanco.

Se discute la importancia de encontrar un valor intermedio para el umbral en la binarización para obtener resultados precisos.

Se muestra cómo imprimir la imagen binarizada utilizando la clase BufferedImage y el método 'setRGB'.

Se menciona el uso del método 'write' de la clase ImageIO para guardar la imagen binarizada en un archivo.

Se ilustra cómo el valor del umbral afecta la cantidad de negro o blanco en la imagen binarizada.

Se concluye la sesión con una demostración de la imagen binarizada y cómo cambiar el umbral afecta el resultado final.

Transcripts

play00:00

Hola bienvenidos amigos e Mi nombre es

play00:03

Lester meneces y hoy quiero enseñarles

play00:05

Cómo binarizar una imagen siempre como

play00:08

les he mencionado uno Busca busca y hay

play00:10

que indagar muchísimo para poder

play00:12

encontrar las respuestas que uno quiere

play00:14

eh ahora para los que quieran el código

play00:17

rápido y anden ahí necesitados el código

play00:21

está en la descripción pueden

play00:23

descargarlo es el mismo no se hace

play00:24

ninguna modificación ni nada y eh Para

play00:27

los que no para los que quieran aprender

play00:29

eh les voy a explicar eh una

play00:32

binarización la binarización es una

play00:34

técnica del procesamiento de imágenes

play00:37

que consiste en un tal vez en un proceso

play00:41

de reducción de la información de una

play00:43

imagen digital a dos valores cero que

play00:46

representa el negro y 255 que representa

play00:49

el blanco ahora por qué estoy haciendo

play00:52

todo esto Pues todos los tutoriales

play00:55

hasta ahora los el anterior redimensión

play00:57

y este que es binarización tiene que ver

play01:00

ver con un curso que que se llama

play01:01

Inteligencia artificial Entonces

play01:03

teníamos que hacer que un carrito se

play01:06

moviera y que siguiera un camino y

play01:08

Entonces teníamos que estar procesando

play01:09

imágenes sí Entonces para eso me servía

play01:12

tengo que se tiene que redimensionar una

play01:14

imagen luego binarizar se para ir

play01:16

reduciendo a lo más básico la

play01:18

información de una imagen que nosotros

play01:19

eh queremos procesar ahora

play01:23

Comencemos s seguimos trabajando en la

play01:26

misma clase imagen donde trabajamos la

play01:29

clase redimensionar Acá está pero ahora

play01:32

le hicimos ciertas

play01:34

modificaciones les comentaba de que

play01:36

en que en el anterior tutorial en la

play01:39

redimensión lo único que íbamos a tener

play01:42

era un un método pero ahora nuestro

play01:44

constructor cambió ahora vamos a

play01:46

procesar la imagen en la clase y por eso

play01:49

tenemos que cargar la imagen a la clase

play01:51

a nuestro proyecto

play01:54

ahora acá tenemos eh hicimos algunas

play01:57

agregamos algunas variables porque

play01:59

siempre pienso que es más fácil que yo

play02:01

les explique el código a que los esté

play02:03

escribiendo y ahí se pierda un poco de

play02:05

tiempo porque a veces hay errores y así

play02:07

Ahora Comencemos explicando Qué vamos a

play02:10

hacer necesitamos dos variables eh de

play02:14

tipo

play02:15

e dos variables que nos definan lo

play02:18

máximo permitido de una imagen en su

play02:20

ancho y su alto eh como algo un punto

play02:24

importante este código no lo pensé yo

play02:27

sino que de todo lo que investigué de

play02:30

todo lo que pude encontrar jalé lo más

play02:32

importante lo entendí para poder

play02:34

explicárselo Entonces no este código no

play02:37

es totalmente mío algunas partes sí

play02:39

otras no entonces declaramos dos anchos

play02:43

y dos altos permitidos por qué Porque

play02:45

hay imágenes que pueden ser muy grandes

play02:47

pero cuando se está haciendo el

play02:49

procesamiento de una imagen

play02:51

eh Y en este caso en mi proyecto

play02:54

teníamos que tener una red neuronal

play02:57

trabajando era eh muy necesitábamos

play03:01

mucho e rendimiento en la computadora el

play03:04

rendimiento Tenía que estar al máximo y

play03:06

mientras más grande sea una imagen más e

play03:09

más bajo es el rendimiento del

play03:11

procesamiento Bueno ahora para los

play03:13

programadores

play03:14

e tal vez

play03:17

Juniors Qué significa que una variable

play03:20

sea estática pues significa que la

play03:23

variable va a ser la misma en todo el en

play03:27

todo el programa en todas las instancias

play03:30

de la variable eh Para todos los objetos

play03:32

la variable siempre va a tener el mismo

play03:35

valor va a ser única el espacio que se

play03:37

le asigna en memoria va a ser un único

play03:40

espacio Qué significa

play03:42

eh que sea final final significa que el

play03:46

valor que yo le estoy asignando en este

play03:48

momento que sería 1024 este valor puede

play03:50

variar dependiendo Lo que ustedes

play03:52

quieran verdad pero este valor no va a

play03:54

poder ser modificado Ese es el valor que

play03:57

va a tener y así se queda hasta que

play03:59

finalice dice

play04:00

eh Hasta que finalice el programa Y así

play04:03

va a ser un ancho y un alto permitido Sí

play04:06

para restringir el límite Y por qué

play04:08

necesitamos eso porque nuestra imagen la

play04:10

vamos a traducir o la vamos a convertir

play04:13

a un arreglo de colores a un arreglo de

play04:17

píxeles imagínense cuando ustedes van a

play04:20

descargar una imagen o Quieren poner una

play04:22

imagen en su escritorio y la imagen es

play04:24

de es de

play04:27

1280 X 720 Qué significa eso que tiene

play04:31

12 1280 píxeles de ancho y 720 de alto

play04:37

Eso es lo que significa o o hasta eso es

play04:40

lo que yo he entendido

play04:43

e ahora y por eso vamos a toda la imagen

play04:46

imagínense que cada posición de la

play04:48

imagen o cada Pixel de la imagen va a

play04:50

estar guardado en un arreglo que se en

play04:53

sí es una matriz el nombre es

play04:55

indiferente Pero va a ser una nuestra

play04:57

matriz un arreglo de colores en sí

play05:00

tenemos dos variables enteras un ancho y

play05:03

un alto que nos van a servir más

play05:04

adelante y ahora qué pasa en el

play05:07

constructor porque lo primero que

play05:08

hacemos nosotros es llamar instanciar un

play05:11

objeto y le enviamos a su constructor la

play05:14

imagen que va a ser la que vamos a

play05:16

procesar el constructor va a recibir un

play05:20

un String que va a ser la ruta del

play05:22

archivo en dónde está guardado el

play05:24

archivo en este caso como yo la tengo en

play05:27

mi en la carpeta principal o sea el

play05:30

directorio raíz del proyecto Pues no le

play05:33

pongo así como c dos puntos sino que

play05:35

nada más el nombre de la imagen

play05:39

ahora

play05:41

inicializar un arreglo de colores si se

play05:44

dan cuenta para poder entrar a una

play05:46

imagen y obtener el valor del Pixel

play05:48

necesit podemos utilizar la clase color

play05:52

Sí y vamos a hacer una matriz cuadrada

play05:55

del ancho por el ancho Sí luego van a

play05:58

entender por qué ahora llamamos a un

play06:01

método llamado cargar imagen y le

play06:03

enviamos la ruta del archivo terminamos

play06:06

con la primera parte carguemos el

play06:08

archivo como habíamos hecho en

play06:10

redimensionar una imagen vamos a hacer

play06:12

uso de la clase buffer image que ustedes

play06:15

ya saben que la clase buffer image es

play06:17

una clase que extiende de la clase image

play06:20

y así hereda todo el funcionamiento de

play06:22

la clase Sí y esta clase image describe

play06:26

el funcionamiento de una imagen eso es

play06:27

lo que hace de amos una variable tipo

play06:30

buffer image que nos va a ayudar a poder

play06:33

eh

play06:34

leer la imagen así vamos a leer la

play06:38

imagen haciendo uso de la clase estática

play06:40

image io lo que hace es decodificar la

play06:44

imagen en el formato que sea jpg o png o

play06:48

el que ustedes gusten y la traduce a una

play06:52

variable de buffer image Sí eso también

play06:55

está en el tutorial anterior Ahora aquí

play06:58

viene eh el uso o la utilidad que le

play07:02

vamos a dar al ancho permitido y al

play07:04

ancho y aquí lo que decimos es de que si

play07:06

nuestra imagen nuestra imagen Ya ahora

play07:08

ya es bf si nuestra imagen eh el ancho

play07:11

de nuestra imagen es menor al ancho

play07:14

permitido Está bien entonces el ancho eh

play07:17

que vamos a utilizar en toda la clase

play07:19

para hacer los los procesos va a ser el

play07:22

mismo ancho de la imagen Sí ahora si no

play07:25

fuera así si el ancho excede el ancho

play07:28

permitido a la imagen se le restringe y

play07:31

se le eh asigna el ancho permitido esto

play07:36

lo esto si la imagen Es muy grande lo

play07:38

que va a pasar es de que puede va a

play07:40

perder como que solo una parte de la

play07:43

imagen se va a procesar como que si

play07:46

recortáramos la imagen y solo lo que

play07:48

podemos procesar eh se va a guardar

play07:51

dentro de la matriz y lo mismo se hace

play07:53

con el alto lo mismo es la misma lógica

play07:56

este contador háganle caso miso porque

play07:58

nada más me va a servir para poder

play08:00

enseñarles eh lo que viene a

play08:02

continuación ahora tenemos el buffer

play08:04

image Y tenemos la imagen ahora tenemos

play08:07

que convertir esa imagen o pasar cada

play08:09

píxel de la imagen a una posición del

play08:12

arreglo de colores por eso es que

play08:14

necesitamos dos ciclos para recorrer

play08:17

filas y columnas filas y columnas aquí

play08:19

va a ser el alto y el ancho Sí y lo que

play08:23

decimos es que nuestro arreglo de

play08:25

colores en la posición i j Ahí va a ser

play08:29

0,0 0,1 0,2 vamos a asignarle un nuevo

play08:33

color y ahora Aquí vamos a hacer el uso

play08:36

de un método llamado get rgb y Para qué

play08:40

funciona el método get rgb lo que hace

play08:44

aquí es que retorna el valor del color

play08:47

del pixxel en la posición eh J com y en

play08:51

la posición de la de la

play08:53

imagen y lo retorna en un valor entero

play08:57

ahorita les enseño cómo y para eso vamos

play08:59

a correr la imagen el programa antes de

play09:01

tiempo y acá si se dan cuenta utilizo el

play09:04

contador para decir En qué posición

play09:05

estoy eh jalando el valor rgb y rgb para

play09:09

quienes eh aún no lo saben yo esto no lo

play09:13

sabía antes eh significa Red Green y

play09:19

Blue son los son los colores es la es

play09:22

una un píxeles esa combinación de

play09:24

colores entonces vean corramos el

play09:27

programa y Acá está vamos a detenerlo

play09:30

porque no necesitamos mucha información

play09:32

en la posición

play09:34

11720 de nuestra imagen el valor rojo

play09:37

azul rojo verde y azul nos nos tira este

play09:41

valor este valor entero en este valor

play09:44

están los tres colores Sí y eso es lo

play09:47

que nosotros tenemos que hacer

play09:49

eh pasar el color del pixxel a un valor

play09:53

entero y ese valor del color se va a

play09:56

asignar al arreglo entonces volvamos

play09:59

vamos a comentar esto porque si no se

play10:01

tarda mucho y eso es lo que pasa cuando

play10:03

cargamos la imagen ahora que ya tenemos

play10:05

la imagen cargada en una matriz podemos

play10:08

procesar o binarizar la imagen como

play10:11

quieran llamarle porque el proceso de

play10:13

binarización lo que tiene que hacer es

play10:16

que consiste en comparar cada píxel de

play10:19

la imagen con un determinado umbral

play10:21

ahora el umbral que es este valor de

play10:24

umbral el valor de umbral es el límite

play10:27

es decir por ejemplo este píxel es muy

play10:30

oscuro entonces eh es un cero significa

play10:34

negro o este píxel es muy claro entonces

play10:38

significa un blanco Acá lo que hace es

play10:41

lo mismo recorrer una la matriz de

play10:43

colores declaramos una variable de tipo

play10:45

color para poder acc acceder a las

play10:48

propiedades de esa matriz y hacemos un

play10:51

promedio un promedio del color azul rojo

play10:55

y verde y lo dividimos dentro tres es

play10:58

simplemente un promedio decir ese

play11:00

promedio se pasa es más grande que el

play11:02

umbral sí es más grande que el umbral

play11:04

Entonces es blanco si no es negro Sí y

play11:07

eso es en sí la binarización ahora

play11:10

Necesitamos eh eh imprimir la imagen

play11:13

porque la imagen en sí está ahorita en

play11:15

una matriz de colores tenemos que hacer

play11:18

el proceso inverso de cargarla para eso

play11:20

vamos a volver a utilizar el la clase

play11:23

buffer image en una con una variable y

play11:25

le vamos a asignar el ancho y el alto de

play11:27

la imagen por eso importante guardarlo

play11:30

para poder devolver una nueva imagen y

play11:32

eh eh tomamos un el tipo del buffer que

play11:37

va a ser un valor entero en rgb para

play11:40

poder asignarle aquí en asignarle el

play11:44

otra vez los valores en rgb y que estos

play11:47

puedan ser traducidos nuevamente en un

play11:49

Pixel entonces en esta salida en su

play11:53

antes teníamos un get rgb y ahora

play11:56

tenemos un set rgb ponemos la posición

play11:59

en donde queremos asignar

play12:01

el esos valores y e la matriz luego

play12:05

retornamos la salida que sería un wofer

play12:08

image y ya podemos imprimir la imagen

play12:11

normal entonces eh regresemos a nuestro

play12:13

método Main declaramos un obj instanci

play12:17

un objeto lo declaramos como ustedes

play12:18

quieran llamarle eh

play12:20

e mandamos la imagen como parámetro y

play12:23

acá está esta eh este valor de umbral

play12:27

Mientras más grande sea el valor de de

play12:30

umbral más exacto o más inexacto más

play12:33

bien Perdón más inexacto va a ser

play12:36

esa esa conversión decir este es negro

play12:39

este es blanco este es negro este es

play12:41

blanco sí entonces tiene que haber un

play12:42

valor intermedio luego eh esto Esta

play12:45

línea lo único para que nos sirve es

play12:47

para poder volver a imprimir la imagen y

play12:49

si se recuerdan en el método imprimir

play12:51

imagen devolvemos un buffer image por lo

play12:53

que si lo guardamos en otro buffer image

play12:55

pues no hay ningún problema nuevamente

play12:58

usamos la clase estática image io con su

play13:01

método Wi para poder escribir la salida

play13:04

Entonces corramos el programa y veamos

play13:06

Cuáles son las Cuál es el resultado de

play13:10

esto de momento está corriendo y esta es

play13:13

nuestra entrada Sí nuestra entrada es

play13:16

este esta imagen de Superman y esta es

play13:20

nuestra

play13:22

salida Entonces si se pueden dar cuenta

play13:26

ahí lo tenemos imagen normal imagen

play13:29

binarizar blancos y

play13:32

negros vamos a cambiar el valor de la

play13:35

función

play13:37

umbral y se darán cuenta cómo es que va

play13:40

a variar Por ejemplo si acá Nosotros le

play13:42

queremos poner

play13:47

200 ahora la imagen está casi negra

play13:50

porque los valores eran de puede que

play13:53

sean demasiado oscuros Entonces se

play13:56

traducen a un negro sí

play14:00

cambiémoslo

play14:02

50 y vean Qué sucede nuevamente tenemos

play14:07

la imagen y ahora la imagen es más

play14:09

blanco que negro Entonces por eso les

play14:11

decía tienen que encontrar un valor

play14:15

intermedio nuevamente con

play14:20

100 corremos el programa y vemos nuestra

play14:23

salida y ahora sí Ese es el valor

play14:25

intermedio pueden variando espero a

play14:28

verlos ayudado y nos vemos en una

play14:30

próxima

Rate This

5.0 / 5 (0 votes)

Related Tags
Binarización de ImágenesProcesamiento de ImágenesInteligencia ArtificialTecnología de ImagenUmbrales de ColorProgramaciónTutoriaisOptimización de ImagensDesarrollo de SoftwareCódigo en EspañolNeural Networks
Do you need a summary in English?