Yolo pensé primero: TinEye


En un blog que frecuento, Halón Disparado, sacan una imagen y preguntan qué puede ser, dejando la solución para el día siguiente.

La imagen ya la conocía de hace tiempo, pero la entrada no es para hablar de ella, sino de algo con lo que vengo trasteando hace unos días: TinEye, un buscador de imágenes similares.

De momento hay que darse de alta y no encuentra muchas cosas, pero por lo que he visto, tiene pinta de que van aumentando la base de datos a marchas forzadas.








¿Qué hace? pues le pasas una imagen (desde el PC o por URL) y te busca imágenes similares. Con este servicio, responder a la pregunta del blog está chupao:






























Si pones la URL te saca las imágenes de la página para que elijas la que quieres buscar.

Para probar, he cogido la primera imagen de tux que me ha salido en google y la he recortado:












y ha encontrado las imágenes enteras:





























Luego he modificado más la imagen recortada pasándola a grises y/o girándola y ya se pierde.

Esto lo pensé yo primero: supongo que lo hará buscando algún tipo de "huella" en las imágenes almacenadas que luego pueda comparar con la "huella" de la que pasas para buscar. Por muy bien que hagas la "huella", habrá que comparar huellas parecidas, no excatamente iguales, y ahí está el problema. Lo que no entiendo, lo haga como lo haga, es por qué no busca (sobre todo cuando no encuentra nada) con los 3 giros a mayores de 90º y los 2 reflejos especulares.

La idea que yo tenía de huella partía de algo muy simple: cojo la imagen y la reduzco, por ejemplo, cada cuadrado de 100x100 a un único píxel. Y además, al color de este píxel, le reduzco el rango dinámico (vaya, que lo paso a menos colores: muchos menos, por ejemplo a los 3 colores básicos, sus complementarios y el blanco y el negro que son 8 colores o cosa parecida). Con eso, una imagen de 1000x1000=1mega se convertiría en una de 10x10=100px y cada píxle 3 bits=300bits=unos 40 bytes. Para que las imágenes con poco rango dinámico (pojemplo: todo en medios tonos rojos) no acabaran con la misma "huella", se puede ampliar el rango previamente.

Luego está el problema de los recortes (búsqueda dentro de la clave) y de la aproximaciones (más complejillo) pero no me pareció inabordable.

Se me ocurrieron más métodos; por ejemplo hacer una red neuronal a la que entrenas con variaciones de una imagen para que la huella resultante sea la misma (y luego basta aplicar y punto) o cosas parecidas.

Bueno, por lo menos el TinEye éste sirve para organizar la red con una semántica distinta a la habitual. Eso, mezclado con lo que quería hacer Google (¿lo tiene hecho?) de analizar y almacenar en texto lo que hablan en los videos (creo que lo empezó a hacer con los telediarios) y que luego pudieras buscar por lo que dice el video y no por lo que escibió alguiensobre ese video, y ya sólo nos faltan el gusto, el olfato y el tacto.

Comentarios

oztralian ha dicho que…
La forma de localizar finamente la imagen es simple, el sistema es una busqueda de marcas comunes dispersas.

Escoges tu imagen, y seleccionas un cuadrado al azar y tratas de localizar esa referencia en tus imagenes, una vez encontradas esas con tu patron, seleccionas otro, igualmente azaristicamente, así cuantas veces quieras, con el objetivo de localizar la imagen más parecida posible.

No deja de ser el mismo sistema que se emplea en genética de ADN. Y de igual forma puedes crear una firma por imagen de patrones aleatorios ..... Y TACHAN! ... imagenes de igual firma, imagenes iguales.

.... si todo eso ya está inventado, el problema es que no se usa..... ¿porqué?
Pirilón ha dicho que…
Supongo que no se usa porque usa mucha cpu.
No sé si usarán los algoritmos más modernos, pero yo he leido bastante sobre eso y lo que se hace es lo que tú dices. Buscan "features" que se podría traducir por "peculiaridades", "propiedades" o "marcas" de la imagen, que sean invariantes ante transformaciones afines, cambios de luminosidad y distorsiones del color, siempre que sean locales. Eso lo hacen utilizando lo que sábemos de cómo funciona el cortex visual humano, que precisamente hace eso. Del cortex humano sabemos los filtros que se aplican a las imágenes que vemos. Estos filtros preservan la parte estadísticamente invariante de la imagen así que implementando filtros equivalentes en un programa se consigue extraer una parte de las "features" de la imagen. A medida que vayamos conociendo más del cortex visual podremos utilizar invariantes más complejas, que capturen información más "conceptual" o compleja, como el concepto esquina, area cerrada o abierta y cosas así.

La ventaja de esto es que lo que almacenamos es mucho menor en tamaño que la imagen original y por tanto más rápido de comparar entre unas y otras. La otra ventaja es que la representación en el espacio de "features" no tiene escala, así que no nos preocupamos del tamaño de las imágenes.
Pirilón ha dicho que…
http://spiedl.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=PSISDG005297000001000287000001&idtype=cvips&gifs=yes

Si mirais este articulillo, describen algo bastante parecido a lo que hace esta web. La parte de los filtros de Gabor es la que extrae las "features".
rober ha dicho que…
Hmm... esto que decís es algo parecido al compresor de imágenes "fractal", que buscaba "features" coincidentes dentro de una imagen para así disminuir la ocupación pero recuperar la información posteriormente. Sería más trabajoso que buscar sólo "features" coincidentes, porque era un compresor y tendría que recuperar después la imagen entera. Salió hace años (muchos ya) en Investigación y Ciencia.

Pero este TinEye o lo han programado mal o no usa esa técnica, porque no encuentra un simple giro ¡¡ de la imagen exacta !! Lo comentan en sus características, pero no dicen nada del algoritmo empleado:

http://tineye.com/faq

Dice que admite imágenes que hayan sido "...cropped, colour adjusted, resized, heavily edited or slightly rotated". Es decir, que admite rotaciones pequeñas lo que, a mi entender, quiere decir que no realiza ningún análisis con trasfondo vectorial, sino de bitmap. Creo que la idea que planteo de reducir la imagen a 10x10 estará más en la línea. Aunque sigo sin entender porqué coño no cogen la imagen y la rotan 3 veces y la "espejan" dos veces y hacen 6 búsquedas sucesivas. Es algo que hasta el usuario puede hacer (si sospechara que iba a valer par algo). Quizá sea precisamente por eso: si quieres encontrar una foto de la torre Eiffel del revés, no quieres que te salgan antes las 500.000 del derecho.

Entradas populares