image - para - reconocimiento de huellas dactilares matlab
Huella digital de imagen para comparar la similitud de muchas imágenes (12)
¡o puede usar http://tineye.com que hace exactamente lo que quiere! (consulte la API comercial)
pero estoy interesado en cómo lo hacen, qué tecnología, etc.
Necesito crear huellas dactilares de muchas imágenes (aproximadamente 100.000 existentes, 1000 nuevas por día, RGB, JPEG, tamaño máximo 800x800) para comparar cada imagen con cada otra imagen muy rápido. No puedo usar métodos de comparación binarios porque también deben reconocerse imágenes que son casi similares.
Lo mejor sería una biblioteca existente, pero también algunos consejos sobre los algoritmos existentes me ayudarían mucho.
¿Literalmente quieres comparar cada imagen con las demás? ¿Cuál es la aplicación? ¿Quizás solo necesites algún tipo de indexación y recuperación de imágenes basadas en ciertos descriptores? Entonces, por ejemplo, puede consultar el estándar MPEG-7 para Interfaz de descripción de contenido multimedia. Luego, podría comparar los diferentes descriptores de imagen, que no serán tan precisos, pero mucho más rápidos.
A partir de 2015 (de vuelta al futuro ... en esta pregunta de 2009 que ahora ocupa un lugar destacado en Google), la similitud de la imagen se puede calcular utilizando técnicas de aprendizaje profundo. La familia de algoritmos conocidos como Auto Encoders puede crear una representación vectorial que se puede buscar por similitud. Hay una demo here .
Así que quieres hacer "coincidencia de huellas dactilares" que es bastante diferente a "coincidencia de imágenes". El análisis de huellas dactilares ha sido profundamente estudiado durante los últimos 20 años, y se han desarrollado varios algoritmos interesantes para asegurar la tasa de detección correcta (con respecto a las medidas FAR y FRR - tasa de aceptación falsa y tasa de rechazo falso ).
Le sugiero que consulte mejor la clase de técnicas de detección de LFA (Análisis de funciones locales) , en su mayoría basada en la inspección minutiae. Las minucias son características específicas de cualquier huella digital y se han clasificado en varias clases. El mapeo de una imagen ráster a un mapa de minucias es lo que en realidad la mayoría de las Autoridades Públicas hacen para archivar a criminales o terroristas.
Vea here para más referencias
Definitivamente deberías echar un vistazo a phash .
Para la comparación de imágenes hay este proyecto de php : https://github.com/kennethrapp/phasher
Y mi pequeño clon de javascript : https://redaktorcms.com/dev/phasher/demo_js/index.html
Lamentablemente, esto se basa en "bitcount", pero reconocerá las imágenes giradas. Otro enfoque en javascript fue construir un histograma de luminosidad a partir de la imagen con ayuda de lienzo. Puede visualizar un histograma de polígono en el lienzo y comparar ese polígono en su base de datos (por ejemplo, mySQL espacial ...)
Esta es una demostración de histogramas de video: https://redaktorcms.com/dev/globetrottr/testHashVideo.php
Hace mucho tiempo trabajé en un sistema que tenía algunas características similares, y esta es una aproximación del algoritmo que seguimos:
- Divida la imagen en zonas. En nuestro caso, estábamos lidiando con video de resolución 4: 3, así que usamos 12 zonas. Hacer esto elimina la resolución de las imágenes de origen de la imagen.
- Para cada zona, calcule un color general: el promedio de todos los píxeles en la zona
- Para toda la imagen, calcule un color general: el promedio de todas las zonas
Entonces, para cada imagen, está almacenando n + 1
valores enteros, donde n
es el número de zonas que está rastreando.
Para las comparaciones, también debe mirar cada canal de color individualmente.
- Para la imagen general, compare los canales de color de los colores generales para ver si están dentro de un cierto umbral, por ejemplo, 10%
- Si las imágenes están dentro del umbral, luego compara cada zona. Si todas las zonas también están dentro del umbral, las imágenes son lo suficientemente fuertes como para al menos marcarlas para una mayor comparación.
Esto le permite descartar rápidamente imágenes que no coinciden; también puede usar más zonas y / o aplicar el algoritmo recursivamente para obtener una mayor confianza de coincidencia.
Hay un enfoque mucho menos ad-hoc que las variantes de imagen reducida que se han propuesto aquí que conserva su sabor general, pero que proporciona una base matemática mucho más rigurosa para lo que está sucediendo.
Tome una wavelet de Haar de la imagen. Básicamente, la wavelet Haar es la sucesión de diferencias desde las imágenes de menor resolución a cada imagen de mayor resolución, pero ponderada por la profundidad con la que se encuentre en el "árbol" de mipmaps. El cálculo es directo. Luego, una vez que tengas la wavelet de Haar apropiadamente ponderada, descarta todos los k coeficientes más grandes (en términos de valor absoluto), normaliza el vector y guárdalo.
Si tomas el producto escalar de dos de esos vectores normalizados, te da una medida de similitud donde 1 es casi idéntico. Publiqué más información here .
Los algoritmos de cálculo de hash normal o CRC no funcionan bien con los datos de imagen. La naturaleza dimensional de la información debe tenerse en cuenta.
Si necesita una huella digital extremadamente robusta, de modo que se tengan en cuenta las transformaciones afines (escalado, rotación, traslación, volteo), puede usar una transformación Radon en la fuente de la imagen para generar un mapeo normativo de los datos de imagen; almacénelo con cada imagen y luego compara solo las huellas dactilares. Este es un algoritmo complejo y no para los débiles de corazón.
algunas soluciones simples son posibles:
- Cree un histograma de luminosidad para la imagen como una huella digital
- Cree versiones reducidas de cada imagen como una huella digital
- Combine la técnica (1) y (2) en un enfoque híbrido para mejorar la calidad de comparación
Un histograma de luminosidad (especialmente uno que está separado en componentes RGB) es una huella digital razonable para una imagen, y se puede implementar de manera bastante eficiente. Restar un histograma de otro producirá un nuevo historial que puede procesar para decidir qué tan similares son dos imágenes. Los histogramas, porque solo se evalúa la distribución y la ocurrencia de la información de luminosidad / color, manejan las transformaciones afines bastante bien. Si cuantifica la información de luminosidad de cada componente de color hasta un valor de 8 bits, 768 bytes de almacenamiento son suficientes para la huella dactilar de una imagen de casi cualquier tamaño razonable. Los histogramas de luminosidad producen falsos negativos cuando se manipula la información de color en una imagen. Si aplica transformaciones como contraste / brillo, posterizar, cambio de color, cambios de información de luminosidad. Los falsos positivos también son posibles con ciertos tipos de imágenes ... como paisajes e imágenes donde un solo color domina a los demás.
El uso de imágenes escaladas es otra forma de reducir la densidad de información de la imagen a un nivel que es más fácil de comparar. Por lo general, las reducciones por debajo del 10% del tamaño de la imagen original pierden demasiada información para ser utilizadas, por lo que una imagen de 800x800 píxeles puede reducirse a 80x80 y aún así proporcionar suficiente información para realizar una buena toma de huellas dactilares. A diferencia de los datos de histograma, debe realizar una escala anisotrópica de los datos de imagen cuando las resoluciones de origen tienen relaciones de aspecto variables. En otras palabras, la reducción de una imagen de 300x800 en una miniatura de 80x80 causa la deformación de la imagen, de modo que cuando se compara con una imagen de 300x500 (que es muy similar) producirá falsos negativos. Las huellas dactilares en miniatura también suelen producir falsos negativos cuando se trata de transformaciones afines. Si gira o gira una imagen, su miniatura será bastante diferente de la original y puede dar como resultado un falso positivo.
La combinación de ambas técnicas es una forma razonable de proteger sus apuestas y reducir la aparición de falsos positivos y falsos negativos.
Para la comparación de imágenes del iPhone y la comprobación de desarrollo de similitud de imágenes, visite: http://sites.google.com/site/imagecomparison/
Para verlo en acción, consulte eyeBuy Visual Search en iTunes AppStore.
Parece que los algoritmos de hashing de imagen especializados son un área de investigación activa, pero tal vez un cálculo de hash normal de los bytes de imagen haría el truco.
¿Busca imágenes idénticas idénticas en lugar de buscar imágenes derivadas de la misma fuente, pero puede tener un formato o resolución diferente (lo cual me parece un problema bastante difícil).
Similar a la respuesta de Ic: puede intentar comparar las imágenes en múltiples resoluciones. Entonces cada imagen se guarda como 1x1, 2x2, 4x4 .. 800x800. Si la resolución más baja no coincide (sujeta a un umbral), puede rechazarla inmediatamente. Si coincide, puede compararlos en la siguiente resolución más alta, y así sucesivamente ...
Además, si las imágenes comparten una estructura similar, como imágenes médicas, es posible que pueda extraer esa estructura en una descripción que sea más fácil / más rápida de comparar.
Una forma de hacerlo es cambiar el tamaño de la imagen y soltar la resolución de manera significativa (¿quizás hasta 200x200?), Almacenando una versión más pequeña (promediada en píxeles) para hacer la comparación. Luego defina un umbral de tolerancia y compare cada píxel. Si el RGB de todos los píxeles está dentro de la tolerancia, tienes una coincidencia.
Su ejecución inicial es O (n ^ 2) pero si cataloga todas las coincidencias, cada nueva imagen es solo un algoritmo O (n) para comparar (solo tiene que compararla con cada imagen insertada previamente). Sin embargo, eventualmente se descompondrá a medida que la lista de imágenes para comparar se haga más grande, pero creo que estás a salvo por un tiempo.
Después de 400 días de funcionamiento, tendrá 500,000 imágenes, lo que significa (descontando el tiempo para cambiar el tamaño de la imagen) 200(H)*200(W)*500,000(images)*3(RGB)
= 60,000,000,000 de comparaciones. Si cada imagen es una coincidencia exacta, te vas a quedar atrás, pero probablemente ese no sea el caso, ¿verdad? Recuerde, puede descontar una imagen como una coincidencia tan pronto como una comparación individual caiga fuera de su umbral.