técnica qué para misma huella hashes generador funciones funcion encriptacion ejemplos ejemplo diferentes crea contraseña algoritmo algorithm image hash

algorithm - qué - huella hash



¿Para qué se usa el hashing de imágenes? (5)

A veces escucho este término y me pregunto para qué se usa.


En la práctica, el hashing de imágenes es popular para buscar imágenes similares en una secuencia de fotogramas o videos, o para insertar una marca de agua con varias imágenes, como muchos de los estudios cinematográficos ahora lo hacen (¡casi escuchado en Fight Club en un sentido espeluznante!).


Mientras que normalmente el hash de un archivo mezcla los bits individuales de datos del archivo, el hashing de imagen funciona en un nivel ligeramente superior. La diferencia es que con el hash de imágenes, si dos imágenes parecen prácticamente idénticas pero están en un formato o resolución diferente (o hay corrupción menor, quizás debido a la compresión), deben hacer un hash al mismo número. A pesar de que los bits reales de sus datos son totalmente diferentes, si se ven parácticamente idénticos a los humanos, tienen el mismo aspecto.

Una aplicación de esto es la búsqueda. TinEye.com le permite cargar una imagen y encontrar muchas de sus ocurrencias en Internet. al igual que google, tiene un rastreador web que rastrea las páginas web y busca imágenes. A continuación, hash estas imágenes y almacena el hash y la url en una base de datos. Cuando carga una imagen, simplemente calcula el hash y recupera todas las URL que enlazan con ese hash en la base de datos. Los usos de muestra de TinEye incluyen encontrar versiones de imágenes de mayor resolución, o encontrar el facebook / myspace / etc público de alguien. perfil de su imagen (suponiendo que estos perfiles usen la misma foto).

El hash de imágenes también se puede usar con almacenamiento en caché o almacenamiento local para evitar la retransmisión de una foto o el almacenamiento de duplicados, respectivamente.

Hay muchas otras posibilidades, incluida la autenticación de imágenes y la búsqueda de marcos similares en un video (como lo mencionó otra persona).


Umm .... ¿Para comparar imágenes (en el sentido amplio, imágenes u otros binarios) rápido sin comparar todo el archivo?


el hash en general es una forma útil de reducir una gran cantidad de datos a un número corto (ish) que se puede usar para identificar esa imagen.

A veces se intentan solo para proporcionar una forma práctica de identificar un archivo sin la intervención de un ser humano, especialmente en presencia de varios autores paralelos que no se puede confiar en que incrementen algún contador maestro (JPG001 JPG002) sin superposición.

A veces los hash son intencionales para ser inolvidables, de modo que puedo decir: si la imagen Hash que generas es la misma que hice cuando te envié la imagen, entonces puedes estar seguro de que proviene de mí (y no ajustada por un malhechor) ) Sin embargo, no todos los valores hash pueden hacer esta garantía, y cada pocos años un popular hash "criptográfico" tiene fallas fatales.


Hashing es una función que se aplica a datos arbitrarios y produce datos de un tamaño fijo (principalmente un tamaño muy pequeño). Hay muchos tipos diferentes de hashes, pero si hablamos de hash de imágenes, se usa para:

  • encuentra duplicados muy rápido. Casi cualquier función hash funcionará. En lugar de buscar la imagen completa, buscará el hash de la imagen.
  • encontrar imágenes similares, que explicaré más adelante

Las imágenes que parecen idénticas a nosotros, pueden ser muy diferentes si simplemente compara los bytes sin formato. Esto puede ser debido a:

  • cambio de tamaño
  • rotación
  • gamma de color ligeramente diferente
  • diferente formato
  • un poco de ruido, marcas de agua y artefactos

Incluso si encuentra una imagen que será diferente solo en un byte, si aplica una función hash, el resultado puede ser muy diferente (para hashes como MD5, SHA probablemente sea completamente diferente).

Entonces necesitas una función hash que creará un hash similar (o incluso idéntico) para imágenes similares. Uno de los genéricos es hashing sensible a la localidad . Pero sabemos qué tipo de problemas pueden ser con las imágenes, por lo que podemos llegar a un tipo de hash más especializado .

Los algoritmos más conocidos son:

  • a-hash . El hashing promedio es el algoritmo más simple que usa solo algunas transformaciones. Escala la imagen, conviértela en escala de grises, calcula la media y binariza la escala de grises en función de la media. Ahora convierta la imagen binaria en el número entero. El algoritmo es tan simple que puedes implementarlo en una hora.
  • p-hash . El hash perceptual utiliza un enfoque similar, pero en lugar de promediar, se basa en la transformación discreta del coseno (transformación popular en el procesamiento de la señal).
  • d-hash . El hash de diferencia usa el mismo enfoque que a-hash, pero en lugar de usar información sobre valores promedio, usa degradados (diferencia entre píxeles adyacentes).
  • w-hash . Muy similar a p-hash, pero en lugar de DCT utiliza la transformación wavelet .

Por cierto, si usas Python, todos estos hashes ya están implementados en esta biblioteca .