EN JA ZH ES

Tecnología de huellas digitales de imágenes - Detección de imágenes similares con pHash y dHash

· 9 min de lectura

Qué es la huella digital de imagen - Fundamentos del hash perceptual

La huella digital de imagen (hash perceptual) es una tecnología que convierte imágenes en valores hash compactos de longitud fija. A diferencia de los hashes criptográficos (MD5, SHA), el hash perceptual produce valores similares para imágenes visualmente parecidas, incluso si han sido redimensionadas, comprimidas o ligeramente modificadas.

Diferencia con los hashes criptográficos:

  • Hash criptográfico: un cambio de 1 bit produce un hash completamente diferente. Se usa para verificar la integridad de archivos
  • Hash perceptual: imágenes visualmente similares producen hashes cercanos. Se usa para detección de similitud

Casos de uso:

  • Detección de imágenes duplicadas: encontrar imágenes duplicadas o casi duplicadas en grandes colecciones
  • Protección de derechos de autor: detectar uso no autorizado de imágenes (incluso recortadas, redimensionadas o con filtros)
  • Moderación de contenido: detectar variantes de imágenes prohibidas conocidas
  • Búsqueda inversa de imágenes: encontrar el origen según el contenido de la imagen
  • Deduplicación de caché: evitar almacenar múltiples copias de imágenes visualmente idénticas

aHash (Average Hash) - El hash de imagen más simple

aHash es el algoritmo de hash perceptual más simple, que genera valores hash comparando cada píxel con el brillo promedio.

Pasos del algoritmo:

  • Reducir la imagen a 8x8 (64 píxeles), eliminando diferencias de tamaño
  • Convertir a escala de grises
  • Calcular el valor promedio de brillo de los 64 píxeles
  • Comparar cada píxel con el promedio: mayor que el promedio es 1, de lo contrario 0
  • Generar un hash de 64 bits

Ventajas:

  • Implementación extremadamente simple, velocidad de cálculo máxima
  • Cierta robustez ante redimensionamiento y cambios leves de brillo

Desventajas:

  • Sensible a corrección gamma y ajustes de histograma
  • Baja capacidad de discriminación, propenso a falsos positivos
  • No puede manejar modificaciones locales (como marcas de agua)

Casos de uso: prefiltrado rápido, como primer paso de filtrado para métodos más precisos. Deduplicación simple donde la precisión no es crítica.

dHash (Difference Hash) - Hash rápido basado en gradientes

dHash genera hashes comparando las diferencias de brillo (gradientes) entre píxeles adyacentes, capturando mejor la información estructural de la imagen que aHash.

Pasos del algoritmo:

  • Reducir la imagen a 9x8 (72 píxeles, una columna extra de ancho para calcular diferencias)
  • Convertir a escala de grises
  • Para cada fila, comparar píxeles adyacentes: si el píxel derecho es más brillante que el izquierdo es 1, de lo contrario 0
  • 8 filas x 8 columnas de diferencias = hash de 64 bits

Por qué es mejor que aHash:

  • Captura cambios relativos de brillo (gradientes) en lugar de brillo absoluto, más robusto ante ajustes globales de brillo/contraste
  • Preserva la información estructural de la imagen (dirección de bordes)
  • Velocidad de cálculo comparable a aHash

Implementación (Python):

  • from PIL import Image
  • img = Image.open(path).resize((9, 8)).convert("L")
  • Comparar píxeles adyacentes para generar la cadena de bits

Casos de uso: escenarios que requieren rapidez y mayor precisión que aHash. Método preferido para deduplicación de imágenes a gran escala.

pHash (Perceptual Hash) - Hash de alta precisión basado en DCT

pHash utiliza la Transformada Discreta del Coseno (DCT) para extraer características de frecuencia de la imagen, ofreciendo la mayor precisión pero también el mayor costo computacional.

Pasos del algoritmo:

  • Reducir la imagen a 32x32, convertir a escala de grises
  • Aplicar la transformada DCT a la imagen de 32x32
  • Tomar los coeficientes de baja frecuencia 8x8 de la esquina superior izquierda (representan la estructura general de la imagen, ignorando detalles de alta frecuencia)
  • Calcular la mediana de los 64 coeficientes
  • Comparar cada coeficiente con la mediana: mayor que la mediana es 1, de lo contrario 0
  • Generar un hash de 64 bits

Por qué tiene la mayor precisión:

  • La DCT transforma la imagen del dominio espacial al dominio de frecuencia; los coeficientes de baja frecuencia representan la estructura esencial de la imagen
  • Naturalmente insensible al ruido de alta frecuencia (artefactos de compresión, desenfoque leve)
  • Usar la mediana en lugar del promedio lo hace más robusto ante valores atípicos

Comparación con dHash:

  • pHash tiene mejor robustez ante compresión JPEG, rotación leve y ajustes de color
  • dHash es más rápido (no requiere DCT), adecuado para prefiltrado a gran escala
  • En la práctica se combinan: filtrado rápido con dHash + verificación precisa con pHash

Puntuación de similitud por distancia de Hamming y diseño de umbrales

La distancia de Hamming (número de bits diferentes) entre dos valores hash mide el grado de similitud entre imágenes. La elección del umbral afecta directamente la precisión y la exhaustividad de la detección.

Cálculo de la distancia de Hamming:

  • Realizar operación XOR entre dos hashes de 64 bits y contar la cantidad de 1 en el resultado
  • Distancia 0: hashes idénticos (muy probablemente la misma imagen)
  • Distancia 1-10: muy similares (posiblemente diferentes versiones de la misma imagen)
  • Distancia > 20: muy probablemente imágenes diferentes

Diseño de umbrales:

  • Coincidencia estricta (distancia ≤ 5): detecta solo imágenes casi idénticas. Alta precisión, baja exhaustividad
  • Coincidencia flexible (distancia ≤ 10): detecta imágenes similares modificadas. Equilibrio entre precisión y exhaustividad
  • Coincidencia difusa (distancia ≤ 15): detecta imágenes visualmente relacionadas. Alta exhaustividad, posibles falsos positivos

Estrategia de combinación de múltiples hashes:

  • Calcular dHash y pHash simultáneamente; solo considerar similar si ambos cumplen el umbral
  • O usar combinación ponderada: puntuación total = 0.4 * distancia dHash + 0.6 * distancia pHash
  • Ajustar pesos y umbrales según el escenario de aplicación

Patrones de implementación y arquitectura de sistemas reales

Desplegar un sistema de huellas digitales de imágenes en producción requiere considerar el almacenamiento, la indexación y la eficiencia de consultas.

Almacenamiento e indexación:

  • Almacenamiento en base de datos: almacenar el hash de 64 bits como tipo BIGINT, compatible con consultas de operaciones de bits
  • Índice por segmentos: dividir el hash en múltiples subsegmentos (por ejemplo, 4 segmentos de 16 bits), crear un índice invertido para cada segmento. Al consultar, buscar en cada segmento por separado y tomar la intersección
  • VP-Tree: Vantage-Point Tree, estructura de índice espacial diseñada específicamente para distancia de Hamming. Soporta consultas de rango eficientes

Arquitectura de sistemas a gran escala:

  • Flujo de ingesta: carga de imagen → cálculo de múltiples hashes (dHash + pHash) → almacenamiento en base de datos → construcción de índice
  • Flujo de consulta: imagen de consulta → cálculo de hash → búsqueda de candidatos en índice → cálculo preciso de distancia de Hamming → retorno de imágenes similares
  • Actualización incremental: al ingresar nuevas imágenes, comparar con la base existente para detectar duplicados

Referencia de rendimiento:

  • Colección de millones de imágenes: consulta de índice dHash < 10ms
  • Colección de decenas de millones: requiere índice distribuido (como plugin de vectores de bits de Elasticsearch)
  • Cálculo de hash: imagen individual < 5ms (dHash), < 20ms (pHash)

Artículos relacionados

Métodos de comparación de diferencias de imagen - Del nivel de píxel a la comparación semántica

Guía sistemática para detectar y visualizar diferencias de imagen. Cubre comparación de píxeles, similitud estructural, diferencia perceptual e implementación práctica.

Detección de manipulación de imágenes - Técnicas de análisis forense y sus limitaciones

Explicación sistemática de las técnicas de análisis forense para detección de manipulación de imágenes. Cubre ELA, análisis de metadatos, detección de clonación, métodos de aprendizaje profundo y las limitaciones de cada técnica.

Guía completa de estrategias de caché de imágenes - Cache-Control, ETag y configuración CDN

Aprende estrategias de caché para imágenes web, incluyendo diseño de cabeceras Cache-Control, solicitudes condicionales con ETag, configuración de caché CDN y soporte offline con Service Worker.

Tipos de umbralización de imágenes y determinación óptima del umbral - Del método de Otsu a la umbralización adaptativa

Explicación sistemática del procesamiento de binarización de imágenes. Cubre umbral fijo, método de Otsu y umbralización adaptativa con diseño práctico de umbrales para imágenes de documentos y sensores.

Estrategia de optimización del tamaño de archivos de imagen web - Técnicas para reducir tamaño manteniendo la calidad

Aprende sistemáticamente métodos de optimización del tamaño de archivos de imagen para maximizar el rendimiento web, desde la selección de formato hasta la eliminación de metadatos.

Procesamiento de imágenes en la inspección industrial - De la inspección visual a la medición dimensional

Explicación sistemática de la aplicación del procesamiento de imágenes en la inspección industrial. Cubre detección de defectos, medición dimensional, inspección de superficies y métodos de aprendizaje profundo.

Términos relacionados