A raiz de una foto que publicó un forero a gran tamaño en otro foro:
http://www.ojodigital.com/foro/showthread.php?t=131096Se me ha ocurrido una idea para intentar eliminar su marca de agua (la suya y la de cualquier desprevenido que use marcas de agua de color liso). Lo he probado y funciona, recupera de forma indistinguible el color de lo que en la foto original estuviera "marcado con agua".
El programa que he hecho tras pensarlo un poco he decidido no subirlo porque en cierto modo va en contra de los derechos de quien hace una foto y por tanto de la mayoría de nosotros. Pero a que resulta curioso?
Me dicen que con los modos de fusión de PS se puede conseguir. Yo digo que sí, pero con un número tal de variables que el método de prueba error se hace inviable. Podéis intentarlo, os reto
.
En el ejemplo que os muestro me han bastado
4 pixels de la foto marcada para tener perfectamente caracterizada la marca de agua.
Foto original con marca de agua:
Salida del programa una vez borradas las partes que no estaban enmascaradas:
(en la capa de abajo estaba la imagen con máscara de arriba)
Me he basado en el siguiente planteamiento:
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
Conclusión: hay que tener ojo con las marcas de agua si queremos proteger nuestras fotos. Os diré que si la marca hubiera tenido un degradado, cambios de color, un borde considerable,... el método no habría servido. En cualquier caso, por si las avispas yo nunca subiría una foto que quisiera proteger a un tamaño utilizable para impresión.
Un saludo.