Monday, April 24, 2017

Usando "Dithering"... O cuando la impresora es blanco y negro


Estamos acostumbrados a procesar imágenes con muchos colores. Las tarjetas gráficas actuales pueden desplegar 16 millones de colores y de hecho, ya el ojo no llega a distinguir diferencias entre algunos tonos. Esa parece ser la razón por la cual los fabricantes de hardware ya no buscan más colores o más resolución, pues estamos llegando a los límites que nuestro ojo puede percibir.

Pero curiosamente, a pesar de la gran tecnología que ahora tenemos ya incluso en nuestras casas, hay procedimientos que se necesitan seguir haciendo como hace ya muchos años. Por ejemplo, consideremos que tenemos una impresora que solamente usa tinta negra. En ese caso solamente tendremos dos posibles "colores" para imprimir: blanco (sin imprimir) y negro (impresión con tinta). Esto significa un problema, porque si tenemos una imagen en tonos de grises, es decir, con 256 posibles tonos de gris, entonces no podríamos imprimirla para que se viesen esos tonos.

El problema se puede solucionar si observamos cómo vemos e interpretamos. Por ejemplo, si hacemos una especie de tablero de ajedrez con dos colores, digamos rojo y azul, pues veremos una malla con colores alternativos. Pero hagamos las casillas más chicas. En la medida que las reducimos, podemos ver de pronto que el rojo y el azul se transforman en un violetas. Si usamos una lupa podremos ver que ese violeta no existe, lo que ocurre es que nuestro cerebro se encarga de interpretar así lo que vemos. Pues bien, esto es lo que se llama dithering y es el proceso que de alguna u otra manera usan las impresoras actuales cuando tienen que imprimir imágenes de las cuales no tienen todos los colores.


El "dithering" o tramado, tiene que ver con un concepto fundamental: "la difusión del error". Por ejemplo, supongamos que queremos imprimir la imagen en tonos de gris pero en una impresora que sólo tiene dos posibles colores, como mencionamos negro (tinta) y blanco (no tinta). Podemos entonces ejecutar el siguiente procedimiento: Consideremos que el primer pixel tiene un valor de 96 (considerando que es una imagen en tonos de gris en donde el Rojo, Verde y Azul de cada punto gráfico tiene el mismo valor). Podemos preguntarnos entonces ¿qué tan lejos está el valor 96 del 255 o del 0. ¿De cuál está más cerca? Hallaremos que el 96 está más cerca del 0 y entonces diremos que el error en la impresión es de 96 tonos. Es decir, como el 0 es el negro, el 96 está a esa cantidad de tonos del negro.

Consideremos ahora que el siguiente valor en nuestra imagen es también 96. Aquí es donde el dithering se usa. Tomamos el error y lo sumamos al pixel que estamos procesando. esto nos dará 192 y este valor está más cerca del blanco que del negro, por lo que pintamos un punto en blanco (es decir, no imprimimos nada en ese punto en la hoja) y vemos qué tan lejos está el 192 del 255. Veremos que está a -63 puntos de ese valor. Es decir, cuando me acerco al 255 el error es negativo. Cuando estoy más cerca del negro, el valor es positivo.


En la medida que seguimos con este algoritmo, veremos que estamos "difundiendo el error" de forma tal que el pixel anterior (y su error), inciden en el siguiente pixel y así sucesivamente. Cuando termino con una línea de pixeles, redefino la difusión del error en cero y vuelvo a empezar a procesar la siguiente línea.

Cabe señalar que hay que tener cuidado por si ocurre que un valor se sale de rango hacia arriba (mayor de 255) o hacia abajo (menor que cero). En este caso, la difusión del error es igual a cero.

El algoritmo básico (en Delphi) es éste:

begin
   for i := 1 to Image1.Picture.Height do
    begin
      Application.ProcessMessages;
      Error_Dif := 0;
      k := 1;
      for j := 1 to Image1.Picture.Width do
       begin
        R := (Image1.Canvas.Pixels[j,i] shr 16) and $FF;
        NewByte := Error_Dif + R;
        if NewByte >= 255 then
        begin
          NewByte := 255;
          Image2.Canvas.Pixels[j,i] := RGB(255,255,255);
          Error_Dif := 0;
        end
        else
        if NewByte <= 0 then
        begin
          NewByte := 0;
          Image2.Canvas.Pixels[j,i] := RGB(0,0,0);
          Error_Dif := 0;
        end
        else
        if 255 - NewByte > 127 then
        begin
          //pixel en negro
          Image2.Canvas.Pixels[j,i] := RGB(0,0,0);
          k := 1;
          Error_Dif := NewByte * k;
        end
        else
        begin
          //pixel en blanco
          Image2.Canvas.Pixels[j,i] := RGB(255,255,255);
          k := -1;
          Error_Dif := 255 - (NewByte);
          Error_Dif := Error_Dif * k;
        end;
      end;
    end;

Tomé una imagen ejemplo que usan en el artículo que leí (ver referencias), y hallé que mi resultado es el esperado.

En los próximos artículos seguiremos hablando de otras interesantes técnicas para hacer "dithering", algo que hacen las impresoras hoy en día y que muchos no estaban siquiera enterados de este proceso.

Referencias:

TannerHelland (blog) 


Wednesday, April 19, 2017

Me gané una suscripción a la revista Peón de Rey



Hace unas semanas entré a una trivia que lanzó la revista Peón de Rey, dirigida por el GM Miguel Illescas y el blog de Federico Marín, en el periódico ABC. La trivia tenía como título "Cuánto sabes de ajedrez". Curiosamente vi una sola pregunta y me sorprendí, porque pensé que la trivia era diferente. Contesté y me olvidé del asunto. Y resulta que hace un par de días me mandaron un correo informándome que había ganado una de las tres suscripciones virtuales a Peón de Rey.

Nunca me gano nada y menos en estos concursos donde el azar está presente. Pero aquí los números estuvieron conmigo y aparecí como uno de los tres elegidos. Este es el video del concurso y la selección azarosa (ver minuto 2:17 en adelante).



Agradezco la promoción, a Peón de Rey, a Federico Marín y a la suerte que tuve. Creo que disfrutaré mucho más la revista ahora que tuve la fortuna de ser uno de los elegidos.

Sunday, April 16, 2017

Reflexiones sobre la captura de Javier Duarte


Javier Duarte ("Javidú"), el ex-gobernador de Veracruz fue finalmente capturado por la Interpol. Un par de días antes apareció una foto del ahora apresado pero en Vancouver, Canadá, supuestamente en un restaurante, pero al siguiente día este gobierno dio la noticia de que el prófugo de la justicia había sido localizado y apresado en Guatemala.

Los políticos modernos, los de esta "nueva generación priísta", han hecho de la transa y el robo algo cotidiano. Padrés, César Duarte, entre otros gobernadores y ex-gobernadores, son acusados de haberse robado miles de millones de pesos. En el caso de Javidú parece ser que tenía 35 empresas fantasmas a quienes el gobierno de Duarte pagaba sumas millonarias por servicios y bienes inexistentes. A esto se le ha agregado una serie de situaciones que rayan en la infamia y que probablemente muchas de ellas no sean siquiera ciertas. Me refiero particularmente a sustituir los costosos tratamientos contra el cáncer con agua, cosa que de lo deleznable que es, nadie podría creer que es un invento, pero cuando se trata de cargarle la mano al chivo expiatorio del momento, todo se vale.

Javidú desde luego no es ningún santo y el hecho de que en lugar de enfrentar las acusaciones haya decidido huir lo convierten en más allá de presunto culpable. Y sí, aunque se supone que en este país todos son inocentes hasta que se les demuestre lo contrario, queda claro que con sus acciones es difícil que Duarte salga incólume de todas las acusaciones en donde se involucran desfalcos millonarios. Si a esto le añadimos que los medios ya lo han culpado de facto, el gordito miserable es culpable casi por definición. Quien piense que puede ser inocente o está loco o no entiende nada, aunque en principio la parte acusadora tendría que demostrar todos los delitos que le ha fincado.

Yo no quiero pensar cómo puede ser la vida de alguien que llega a ser gobernador de un estado cuyas intenciones parecen ser las de ver cómo lo exprime y cómo se hace de tantos millones de pesos. ¿A poco creía que podía salirse con la suya? Y cuando el hombre ya había decidido huir, ¿cómo le hizo para tener recursos y viajar a otros países para no ser capturado si la Procuraduría dice que le congeló 112 cuentas en bancos? Seguramente tenía más. Pero aparte de esto, ¿qué sentirá un tipo de estos huyendo? ¿No le tendrá miedo de hasta su sombra? ¿No se sentirá casi paranoico porque todo a su alrededor le parecería que conspira en su contra para ser atrapado? ¿Y su linda mujercita, que de acuerdo a los "diarios" que se le encontraron y que se dieron a conocer, qué pensará ahora de esto de "merecerse la abundancia" que escribió una y otra vez en planas como si se tratara de tarea escolar para niños castigados?

Sé que algunos criminales que han huido por años, al ser atrapados tienen un descanso, una relajación que tiene que ver con esto de que "ya la pesadilla terminó" y entonces enfrentan la ley desde una posición menos fea, más amable a la vida misma, ya liberados pues. Quizás Javidú ahora se sienta ya más relajado porque finalmente ya no tiene que vivir escondido. Se habrá dado cuenta que todos esos miles de millones desaparecidos por él fue lo peor que se le pudo haber ocurrido hacer. Se debe haber dado cuenta, si tiene dos dedos de frente, que vivir perseguido por la justicia en este mundo ultra comunicado puede ser una de las peores pesadillas.

Vamos a ver cómo se dan las cosas a partir de esta captura. Cuando extraditen al nefasto ex-gobernador seguramente le querrán aplicar un castigo ejemplar y pasará años en prisión. Vamos a ver si además, se puede recuperar el dinero que se robó porque finalmente si se demuestra que se lo robó, debiese estar en alguna parte.

El ser humano pierde toda sensatez, todo raciocinio, cuando le gana la ambición. Los fraudes -a todos los niveles- se hacen bajo este precepto de ofrecer algo valioso por muy poco esfuerzo y así han surgido por ejemplo, el fraude nigeriano, en donde por correo alguien desconocido te ofrece millones de dólares a cambio de nada. Y uno diría, ¡qué tonta la gente que cae en eso! pero de nuevo, los fraudes se basan en este principio de que la ambición le gana al razonamiento.

Javidú es pues el ejemplo más moderno de un político que estuvo su momento en los cuernos de la Luna pero no pudo contra la realidad. Ahora pasará muchos años en la cárcel y ojalá eso de verdad fuese una lección para todos aquellos que sienten que pueden hacerse de millones y verle la cara a todo un país.

Monday, April 10, 2017

Un autor buscando una editorial o... convirtiéndose en su propia editorial



Una de las actividades que realizo con frecuencia es la de escribir. En los últimos años he escrito obras de carácter científico y uno que otro libro de ajedrez. Desafortunadamente las editoriales no parecen interesarse en ninguno de los temas tratados, a menos que -como me dijo un importante sello editorial- pueda garantizar la venta de al menos 500 ejemplares. Y como son temas específicos en ciencias, es complicado saber si se pueden o no vender esos libros.

Con respecto al ajedrez, he intentado revivir el trato con la editorial que por años me ha publicado de este tema, pero parece que ya no le interesa. Mi último libro es sobre Aron Nimzowitsch, probablemente en su momento el tercer mejor jugador del mundo, por debajo de Alekhine y Capablanca.

Pero Nimzowitsch es algo más que un fuerte exponente del ajedrez mundial. Fue un jugador con su propia concepción del juego ciencia y escribió su libro "Mi Sistema", que caracteriza una serie de maniobras que eventualmente forman un sistema, aunque el GM Bent Larsen no esté de acuerdo. Nimzowitsch fue un escritor con una original pluma y hay suficiente información, partidas, artículos que él mismo escribió, anotaciones de sus propias partidas, que sin duda han hecho del viejo maestro un clásico.

Mi libro, sin embargo, no es una biografía más de Nimzowitsch. En lugar de eso me di a la tarea de tratar de entender su ajedrez y qué mejor que usar la técnica del ajedrez solitario sobre sus partidas más significativas (un subconjunto, pues Nimzowitsch jugó decenas y decenas de partidas muy ilustrativas). En este esquema de ajedrez solitario, que parece haber sido preconizado por Irving Chernev, se hacen las primeras jugadas de una partida de nuestro personaje contra algún fuerte jugador, y entonces de pronto no se hacen más jugadas, porque el lector debe tratar de acertar la siguiente jugada de Nimzowitsch. Entonces, si acierta, se le otorgan una cantidad de puntos. Si no acierta, entonces se hace la jugada que hizo el maestro en la partida, se ejecuta en el tablero la jugada del rival y de nuevo, a pensar porque hay que acertar la siguiente jugada de Nimzowitsch. Al final se suman los puntos obtenidos y se da una especie de gradación sobre qué tan bien el lector lo hizo.

"La letra con sangre entra" y en ajedrez no hay nada como la experiencia que uno pueda adquirir jugando en torneos. Así, la idea del ajedrez solitario es hacer que el lector sienta que está jugando como un gran maestro, en este caso como Nimzowitsch y aprenda de él, no sólo reproduciendo cada partida, sino intentando descubrir las propias jugadas del viejo maestro.

Después hay una sección de posiciones de táctica, de las propias partidas de nuestro héroe, problemas compuestos, una sección de "Piense como Nimzowitsch" y finalmente las respuestas a los ejercicios. Este es el contenido del libro:

Prólogo
Breve Biografía de Nimzowitsch  
Nimzowitsch: el anecdotario
“La amenaza es más fuerte que su ejecución”
¿Candidato a campeón mundial?
La escuela hipermoderna
Los elementos de Mi Sistema
El Bloqueo
La sobreprotección y la profilaxis
Nimzowitsch y la teoría de aperturas
Defensa francesa, variante del avance
Defensa Nimzowitsch
Defensa Nimzoindia
Ajedrez solitario
Sobre premios y castigos
Diferentes esquemas de ajedrez solitario
Partida 1: Spielmann – Nimzowitsch, Munich, 1906.
Partida 2: Nimzowitsch – Flues, G., Munich, 1906.
Partida 3: Schlechter – Nimzowitsch, Carlsbad, 1907.
Partida 4 : Nimzowitsch – Alapin, Carlsbad, 1911 (¿?)
Partida 5: Saemisch – Nimzowitsch, Copenhagen, 1923.
Partida 6: Nimzowitch – Spielmann, Hamburgo, 1910.
Partida 7: Nimzowitsch – Behting, Riga, 1919.
Partida 8: Nimzowitsch –Gilg, K, Kecskemet, 1927.
Partida 9: Nimzowitsch – Marshall, Nueva York, 1927.
Partida 10: Mieses – Nimzowitsch, Bad Kissingen, 1928.
Partida 11: Nimzowitsch – Capablanca, Carlsbad, 1929.
Partida 12: Mattison – Nimzowitsch, Carlsbad, 1929.
Partida 13: Alapin, S. – Nimzowitsch, Carlsbad, 1911.
Partida 14: Spielmann, R. – Nimzowitsch, Carlsbad, 1923.
Partida 15: Rubinstein – Nimzowitsch, Carlsbad, 1907.
Partida 16: Nimzowitsch – Salwe, G., Carlsbad 1911.
Partida 17: Nimzowitsch – Leonhardt, San Sebastián, 1911.
Partida 18: Nimzowitsch – Pritzel, Copenhagen, 1922.
Partida 19: Nimzowitsch – Alekhine, Semmering, 1926.
Partida 20: Johner, P. – Nimzowitsch, Dresden, 1926.
Ejercicios de táctica
Problemas compuestos
Nimzowitsch en los finales
Piense como Nimzowitsch
Ejercicio 1:
Ejercicio 2:
Ejercicio 3:
Ejercicio 4:
Ejercicio 5:
Ejercicio 6:
Ejercicio 7:
Conclusiones
Soluciones a los ejercicios de táctica
Soluciones a los problemas compuestos
Soluciones a Piense como Nimzowitsch
Bibliografía

Pues bien, como mencioné antes, el libro no parece poderse colocar en alguna editorial. Una casa editora en España me dijo que estaba en una coyuntura económica y no ha habido respuesta aún después de haber pasado muchos meses.

Considerando esto, el plan entonces es convertirme en editorial, al menos de forma experimental. La empresa Groppe (que está en Jalisco) puede imprimir en cantidades bajas, es decir, no necesariamente 1000 libros, que es más o menos la cantidad mínima que cualquier editorial hace. Por ello, propongo la idea de vender yo mismo mi libro (ya sea físico o en formato e-book) si hay suficientes interesados.


La pregunta es si hay lectores interesados. El costo del libro en papel (pasta blanda, no como en la imagen ilustrativa), sería alrededor de 300 pesos y quiero creer que eso podría incluir el costo de envío a provincia, pero tengo que averiguar eso.

Así pues, ¿quién se interesa por el libro impreso? ¿quién lo compraría como archivo virtual (más barato, desde luego)? Pueden dejarme comentario aquí en el blog o escribirme sus opiniones a morsa@la-morsa.com. Gracias.

¿La reforma educativa que viene?


Los gobiernos de este país funcionan y han funcionado todos, tanto el federal como los locales, siempre haciendo las cosas al "ahí se va", resolviendo o tratando de resolver los problemas "tapando el pozo cuando ya se ahogó el niño". Por ejemplo, hace un par de semanas un borracho estampó su BMW en una avenida importante de la ciudad de México. Cuatro de los cinco que estaban en el auto murieron. El coche se rompió a la mitad y el conductor, milagrosamente y debido a que tenía probablemente puesto el cinturón así como el efectivo uso de la bolsa de aire, salvó la vida con ligeros golpes. No tuvieron la misma suerte sus acompañantes. Pues bien, el encargado del tránsito en la ciudad dijo en una declaración que pondrían reductores de velocidad en Reforma y avenidas importantes, para así evitar que alguien chocara contra un poste de luz a 185 kms/hora. Improvisación muy del mexicano de la que se sienten muchos orgullosos pero que en realidad habla de lo mal que hacemos las cosas.

Y si hablo de esto es porque el gobierno de Peña Nieto ha querido impulsar una reforma educativa, aunque en realidad lo que han estado haciendo es tratar de eliminar los abusos que la "maestra Gordillo" le aplicaba a los dineros que el gobierno federal daba a la educación en México. "Hay que gastar mucho dinero para mantener pobre a la India", decían los ingleses cuando la India quería liberarse del yugo británico. Y en ese mismo tenor: "hay que gastar mucho dinero en la educación para seguir manteniendo al país atrasado en ese rubro". Y se gasta mucho dinero, que "la maestra" se embolsaba hasta que la detuvieron, la apresaron y "se hizo justicia".

Pero entonces el gobierno de Peña decidió que iba que ir más lejos y armó una serie de exámenes para ver qué maestros estaban capacitados para fungir como tales. Muchos reprobaron el examen y ojo, son los que enseñan a los niños de México. Otras facciones decidieron no hacer el examen y comenzaron las presiones. En Oaxaca hasta donde entiendo, sigue el problema con los del magisterio sin que se resuelva.

Por ende, la reforma de Peña fue meramente administrativa pero ¡ay! a alguien se le ocurrió que había que hacer esa reforma educativa y no solamente administrativa. Y salieron los educadores y didactas con sus grandes y geniales ideas, indicando que a los niños había que enseñarles a razonar y no a repetir como loros. Y entonces el gobierno de este país de la nada se saca una reforma que, antes de capacitar a los profesores, se les dice cómo deben enseñar. Desde luego que todo esto va hacia el fracaso pero no importa, para eso están los mercadólogos del gobierno, para darnos números inflados, datos falsos, mostrando un país que solamente está en los anuncios de la televisión pero que en la vida real se muestra como un fracaso más de estos gobiernos lamentables.

Pero veamos, ¿necesitamos enseñarles a los niños a razonar? Seguramente sí, pero también tendrán que aprender por repetición. ¿Quieren que puedan hacer las matemáticas más obvias del mundo, tendrán que aprender las tablas de multiplicación DE MEMORIA, por repetición. Aunque sepan razonarlas, eventualmente lo que interesa es que sepan hacer las multiplicaciones básicas. Va más allá de la repetición como loros, es simplemente una necesidad para sobrevivir en este mundo.

Y no todo se puede razonar. Yo puedo a alguien enseñarle de dónde Newton sacó sus tres leyes del movimiento pero después de que el alumno entienda de dónde salieron, tendrá que memorizarlas para poderlas aplicar. No se puede esperar que cada cosa que tenga que hacer busque re-razonar el asunto para llegar a la conclusión que ya debería haber memorizado.

Lo mismo ocurre con el álgebra elemental. Si se estudia historia hay que aprenderse fechas. Si se estudia geografía habrá que aprenderse nombres de lugares. Si se quiere escribir bien habrá que leer mucho y dejar a la memoria el cómo se escriben las palabras, porque si se trata de razonar cada vez, sobre cada palabra, si es grave, esdrújula o aguda, escribir cualquier texto podría ser poco menos que interminable. Y sí, habrá cosas que sean inútiles (habrá que ver cuáles son), y elaborar sobre eso para evitar repeticiones o razonamientos que sólo quitan el tiempo, pero el "razonar" no es la solución mágica como tampoco quizás lo sea el "repetir".

Pero además, pensemos en los músicos. ¿No ensayan como obsesivos una y otra vez? ¿No hacen lo mismo los actores para presentar una obra de teatro? ¿Por qué repiten? Porque es la única manera en que una representación salga bien o un concierto esté bien tocado pero ¡ay de nuevo! eso de repetir es tan antiguo que seguro está mal y hay que erradicarlo, aunque siga funcionando desde que el mundo es mundo.

Y la educación tiene toda una problemática, la cual este gobierno la quiere reducir al concepto de "razonar vs repetir", lo cual está equivocado. Es uno de esos parches modernos, que el gobierno que está en el poder quiere imponer de manera improvisada como todo lo que hace. Se sienten gobiernos que planean todo y terminan improvisando en todo.

Y no, mis queridos mexicanos (como lo soy yo también). Este país no va a ningún lugar con propuestas que no tienen ni pies ni cabeza, que no pasan el poner en tela de juicio esas ideas. La educación exige esfuerzo y resulta que en este país se está educando a los chicos a no hacer el mínimo esfuerzo. Aprender requiere de concentración, trabajo, hacer ejercicios, tareas, involucrarse porque sino, no se aprende. Y no, muchas veces no se aprende "jugando" (y si es así eso es para los niños muy chiquitos). Se aprende trabajando sobre un tema y en todo tema hay partes áridas y aburridas y ni modo, hay que solventarlas trabajando más duro sobre ellas.

Quien asuma que el modelo de educación que se ha dado en todo el mundo está mal, le aviso que quien así piensa probablemente salió de ese mismo modelo educativo y ¡ay una vez más! se cumple una curiosa paradoja: reniego del modelo educativo porque es malísimo, pero resulta que gracias a ese modelo educativo puedo pensar así.

Ahí lo dejo a la reflexión.

Thursday, April 06, 2017

Un nuevo reto de la programación lúdica



Dice la Wikipedia que “La marca de agua digital es una técnica esteganográfica de ocultación de información. Su objetivo principal es poner de manifiesto el uso ilícito de cierto servicio digital por parte de un usuario no autorizado. Concretamente, esta técnica consiste en insertar un mensaje (oculto o no) en el interior de un objeto digital (imágenes, audio, vídeo, texto, software), un grupo de bits que contiene información sobre el autor o propietario intelectual del objeto digital tratado (copyright)”.

Comúnmente vemos marcas de agua en algunos billetes, cuyo fin es precisamente evitar la falsificación. En el caso de las imágenes, hay empresas que venden fotografías para usos comerciales como pueden ser portadas de libros, anuncios, etcétera.

En este caso, para que los potenciales clientes puedan ver las fotos (y que no se puedan usar sin consentimiento de la empresa), a las imágenes comerciales se les reduce el tamaño y se les pone una marca de agua, por ejemplo, el logotipo de quien la vende o una imagen que está como fusionada con la imagen original de forma que parece una transparencia.

Así, los interesados pueden ver la foto que les interesa y si deciden de comprarla, entonces la compañía les manda la foto con toda la resolución y sin ninguna marca de agua.

Pues bien, en este enlace platiqué de cómo quitar la marca de agua de una serie de postales que realizó un artista para el encuentro del campeonato mundial de ajedrez de 1972 entre Fischer y Spassky. Alguien en la red vendía dichas postales y probablemente cuando vi esa página web ya las postales en cuestión se habrían vendido. Pero el dueño de las imágenes las puso en un sitio web con una marca de agua para que los interesados pudiesen verlas sin quitarles el atractivo de querer hacerse de ellas físicamente.

El reto de la programación lúdica es tomar las 18 postales originales (que pueden descargarse de este enlace), que tienen todas la marca de agua, y quitárselas mejor que en el algoritmo que yo usé. Por ejemplo, en las siguientes imágenes puede verse el error en el proceso:

 Se sigue viendo un poco la marca de agua (que es un letrero en rojo que dice “PREVIEW”). En los círculos rojos que puse puede discernirse parte de dicha palabra, es decir, no le pude quitar la marca de agua totalmente.


Dar click sobre la imagen para verla más grande

¿Quién lo puede hacer mejor?

El ganador (si es de la Ciudad de México), le daré una taza con el logotipo de la Morsa. Si es de otro país o de provincia, le mandaré un USB de al menos 8 GB.



Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero. El ganador cede su código fuente a la comunidad. Es decir, se promueve el código abierto.

En este caso no hay restricción en qué lenguaje usar. El concursante tiene que mandar su código fuente, el ejecutable (si aplica), y las 18 fotos procesadas. El concurso tendrá una vigencia de unas tres semanas. Y ahora que viene la Semana Mayor, quizá sea una idea interesante para sentarse a programar. Me tienen que mandar todo a mi correo: morsa@la-morsa.com.