Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/06/2011, 08:19
Curda
 
Fecha de Ingreso: septiembre-2009
Ubicación: Queretaro
Mensajes: 51
Antigüedad: 14 años, 7 meses
Puntos: 2
Programa para borrar marcas de agua (RETO)

Saludos

aquí les tengo un reto que se me hace muy bueno explotarlo.

Entre la ayuda del Internet tengo el planteamiento y tmb tengo un programa de ejemplo de como utilizar los pixeles de una imagen via php.

Bueno aquí el planteamiento para eliminar marcas de agua (gracias guille)

Cita:
Premisa 1: una marca de agua es una imagen que se superpone con cierto grado de transparencia a la imagen original, de modo que el color de cada pixel final es una combinación lineal del color de la imagen original y la marca de agua:

final = p * original + (1-p) * marca
siendo 0 < p < 1 la transparencia (mayor p, menos visible la marca)

Para obtener el color original no habría más que despejar:

original = (final - (1-p) * marca) / p

Premisa 2: en todos sus pixels la marca de agua presenta un color uniforme y además se superpone a la imagen original con un grado de transparencia uniforme también. Por tanto las incógnitas 'marca' y 'p' son constantes en todas las zonas afectadas por la marca.

Así solo tenemos que calcular esos dos parámetros. Para ello podemos tomar dos zonas cualesquiera de la imagen donde tengamos tanto el color original como el resultado de aplicar la marca, formando un sistema de dos ecuaciones con dos incógnitas que aunque no es lineal se resuelve de inmediato:

f(final), a(original), m(marca), p(transparencia)

f1 = p * a1 + (1-p) * m
f2 = p * a2 + (1-p) * m

resolviendo:

p = (f1 - f2) / (a1 - a2)
m = (f1 * a2 - f2 * a1) / (f1 - f2 - a1 + a2)

Este sistema se puede calcular para cualquier doble pareja de pixels que se nos ocurra. Se puede resolver para muchas parejas de pixels y promediar resultados, o bien promediar el color de dos zonas uniformes y entonces resolver. Todo ello para reducir varianza. Aunque lo cierto es que yo arriba solo he usado 4 pixels para coger el peor caso y aún así ha salido muy bien.
Luego ya no habría más que aplicar en las zonas afectadas por la marca la expresión:

a = (f - (1-p) * m) / p
aquí el programa q manipula la imagen en php.

[URL="http://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2793&lngWId=8"]http://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2793&lngWId=8 [/URL]

Pues a ver quien es el valiente de desarrollar el codigo en php del planteamiento que he dejado arriba.