Los filtros sobre imágenes son básicamente transformaciones de los pixeles. Por ejemplo, se puede pasar de una imagen en color a tonos de grises mediante la conversión del color de cada pixel (con componentes rojo, verde y azul (RGB)), mediante esta fórmula:

Gris = (R + G + B) div 3

y colocando el valor Gris en lo que viene a ser su respectivo rojo, verde y azul.

Muchos filtros usan una matriz de valores para realizar este tipo de transformaciones. Por ejemplo, la «convolución» es simplemente una matriz de número impar de columnas y renglones, en donde se colocan valores, los cuales se multiplican a los correspondientes pixeles, y esto permite filtros que permiten encontrar bordes, o bien, hace una imagen más borrosa, o más precisa, o bien, quitándole «artefactos», que no son otra cosa que pixeles indeseables en la imagen que se está procesando.

Hay un filtro de convolución para encontrar bordes. Sin embargo, la siguiente idea puede hacer lo mismo con menos procesamiento y de manera muy simple. Veamos: La idea es usar un filtro de esta naturaleza para hacer que se parezca a un dibujo hecho a lápiz. El algoritmo es éste:

  • Obténgase el color del pixel que queremos procesar.
  • Obténgase el coor del pixel exactamente abajo de éste.
  • Calcúlese el promedio de los componentes R, G y B para cada pixel y tómese el valor absoluto de la diferencia de los promedios.
  • Si la diferencia entre los promedios está por debajo de un valor UMBRAL, coloque el pixel actual en blanco, sino en negro.

Pero entendamos cómo funciona el filtro. En esencia lo que se hace es sacar la diferencia entre dos pixeles y ver si esta diferencia es mayor que un valor que llamamos «umbral». Esto es equivalente a decir que si la diferencia es mayor, estamos ante un borde en la imagen, es decir, la diferencia de los dos valores resulta ser demasiado grande. En términos conceptuales el algoritmo es muy simple.

Teniendo esto definido, escribir el código correspondiente es muy fácil. He aquí el fragmento en Delphi:

Fragmento del código fuente (en Delphi)

Aplicando el código a una imagen (pasada a tonos de grises para hacer el trabajo más simple), se encontró el siguiente resultado (ver imagen que ilustra el artículo).

Desde luego que este filtro dista ser uno que parezca como si la imagen se hubiese hecho a lápiz. Hay artículos técnicos muy interesantes al respecto, como éste, que usa una técnica muy elaborada.

Quien le interese jugar con mi software, escríbame a [email protected] y se lo mando a su correo de forma gratuita.