¿Cuál es la diferencia entre hashing perceptual y hashing local sensible?

[Nota: he cambiado esta respuesta para reflejar mejor los aspectos del hash sin ambigüedad.]

El término hashing local sensible es un poco vago y puede significar algunas cosas diferentes e incluso pasar a términos que suenan contradictorios, pero que a menudo no lo son. Permítanme definir 2 técnicas de hash diferentes que pueden alinearse con esto, pero demuestran la diferencia básica con la mayoría de hashing y hashing perceptual.

Hay contexto de hashing desencadenado. Aquí es donde una condición en los datos hace que los datos se tomen y se usen para formar un hash. La elección de la condición y cómo contribuye al hash es clave para qué tan bien los resultados representan los datos. En el mundo forense, hay un SSdeep que funciona bien, pero un trabajo único y los resultados se pueden comparar como cadenas para encontrar archivos o imágenes forenses (no imágenes) que tienen corridas grandes que son casi iguales. Hay otros usos para el hash activado por contexto para acelerar el procesamiento de grandes cantidades o la transmisión de datos. Tampoco está lejos de todo el mundo de la culebrilla en los principios básicos.

El segundo es más una dilución binaria de datos. Puede tomar un gran bloque de datos y representarlo como un bit o un pequeño conjunto de bits. En el caso más ingenuo, puede sumar todos los bytes y, como resultado, tomar el bit menos significativo. Ese número único o pequeño de bits se convierte en una parte del hash más grande para la totalidad de los datos. Las secciones que cambian causan un aumento en la distancia de hamming. Las inserciones de datos en el medio pueden requerir cálculos más complicados, pero las regiones aún coincidirán.

Ambas técnicas son insensibles a los cambios locales y sensibles a las ejecuciones locales que se han mantenido igual. Curiosamente, he visto los términos utilizados esencialmente para lo mismo, pero cuando comprendes el pequeño cambio de contexto, te das cuenta de que la diferencia es la perspectiva de la comparación. Vamos a llamarlos hashes difusos.

Los hashes difusos están relacionados con el cambio minimizado en bits. Si el primer 90% es el mismo, mientras que el último 10% es diferente, un hash difuso será casi igual. Realmente no le importa cómo se ven los datos para el usuario.

Entonces tomemos una imagen comprimida. Si recorto una línea estratégica que está cerca del comienzo del archivo, el resto del archivo se verá diferente debido a los cambios de compresión. El hash difuso será completamente diferente antes y después de esa operación, pero el humano no podrá distinguirlo sin mucha observación. Lo mismo es cierto para el escalado, la rotación leve o los cambios de color importantes, incluso sin compresión. Todos los bits cambian, por lo que el hash localmente insensible cambia por completo.

Un hash perceptual no se preocupa por los bits. Toma la representación de la imagen y la reduce a algo que forma un hash. El proceso de ebullición define la inmunidad a diferentes manipulaciones. También funciona en todos los formatos de imagen. Un JPEG, PNG, BMP, TIFF y GIF de la misma imagen coincidirán perceptualmente.

Las aplicaciones para los dos son muy diferentes. La naturaleza de las imágenes hace que los hash perceptuales sean una gran herramienta. Los archivos corruptos o anexos son el espacio de solución principal para muchos hashes difusos.

Interesante pregunta. LSH es una función hash que coloca entradas cercanas en el mismo contenedor. Espero que vea que todo depende de la métrica para medir la distancia entre las entradas.

Digamos que el espacio de entrada son fotografías. Una medida para medir la distancia entre ellos podría ser “cuán similares se ven (percepción) entre sí”. Una versión cruda para medir esta distancia podría ser encontrar la diferencia entre el color promedio de las fotografías.

Un hash perceptual pondría imágenes de aspecto similar en el mismo contenedor. Entonces, un hash perceptual es solo un tipo de LSH.

More Interesting

¿Es una buena idea modelar otras estructuras de datos después de STD :: Vector?

¿Cómo encuentra un ciclo en una lista "simple" usando solo dos punteros?

¿Hay alguna manera de extraer la palabra principal de una lista de sinónimos que representa la lista?

¿Por qué necesito el complemento de un gráfico?

Cómo convertirse en un maestro de algoritmos C y estructuras de datos

¿Cuál es el mejor y más fácil algoritmo de búsqueda?

He pensado en un algoritmo simple y cómo algunas empresas podrían usarlo. ¿Cómo puedo ganar dinero con eso?

¿Dónde puedo encontrar preguntas sobre estructuras de datos sabias para las ubicaciones?

¿Por qué los finalistas de Topcoder no comparten su experiencia en los tutoriales de YouTube para principiantes? Cualquier principiante agradecería la ayuda para desarrollar sus habilidades para resolver problemas.

¿Cuál es el intercambio de espacio temporal en las estructuras de datos?

Si tengo una matriz compuesta de cadenas de dígitos y guiones, ¿cómo puedo usar Javascript para agregar la suma de cada dígito mientras omito los guiones?

¿Puedes dar ejemplos de cómo usamos las estructuras de datos en el mundo real?

¿Podría haber estándares de cifrado que descansen en un problema NP-hard distinto de la factorización entera?

Si saco el bucle for más interno de un bucle for anidado y lo ejecuto solo, ¿cambiará la complejidad del tiempo?

¿Desde dónde debemos comenzar a aprender IA, aprendizaje automático y algoritmos?