🖼️
🎨

Algorithm Features

Choose the right image hashing algorithm for your specific needs. Each algorithm has its strengths and optimal use cases.

📊
O(1)

Average Hash (aHash)

The simplest and fastest hashing algorithm that reduces the image to a grayscale 8x8 thumbnail, calculates the average color value, and sets each bit based on whether each pixel is above or below the average. This creates a 64-bit fingerprint representing the basic luminance structure.

Advantages

  • Very fast computation
  • Low memory usage
  • Good for basic duplicate detection
  • Works well with resize operations

Limitations

  • Sensitive to color changes
  • May not detect rotations well
  • Less robust to transformations

Best For:

Quick duplicate detection and basic similarity matching

🔍
O(n log n)

Perceptual Hash (pHash)

A more sophisticated algorithm that uses the Discrete Cosine Transform (DCT) to analyze the image in the frequency domain. It identifies the most important visual features by examining frequency patterns rather than raw pixel values, making it highly robust to transformations.

Advantages

  • Robust to scaling and rotation
  • Good compression resistance
  • Handles lighting changes well
  • More reliable than aHash

Limitations

  • More computationally expensive
  • Slightly higher memory usage
  • May be overkill for simple tasks

Best For:

Professional image matching and content-based retrieval

📈
O(1)

Difference Hash (dHash)

Calculates the hash based on the relative brightness differences between adjacent pixels (typically horizontal). It creates a 9x8 grayscale image and compares each pixel with its neighbor, setting bits based on which pixel is brighter. This tracks gradients and structural changes effectively.

Advantages

  • Good for structural similarity
  • Fast computation (as fast as aHash)
  • Tracks relative gradients effectively
  • Two variants: horizontal and vertical

Limitations

  • Sensitive to significant transformations
  • May not work well with very noisy images
  • Less robust than pHash

Best For:

Detecting structural changes, crops, and minor edits with very fast performance

🌊
O(n log n)

Wavelet Hash (wHash)

Uses the Haar wavelet transform to capture both spatial and frequency information, providing a good balance between robustness and computational efficiency.

Advantages

  • Balanced robustness
  • Good for multi-scale analysis
  • Handles various transformations
  • Efficient frequency domain analysis

Limitations

  • More complex implementation
  • Moderate computational cost
  • May be sensitive to extreme transformations

Best For:

General-purpose image matching with good robustness

Performance Comparison

Compare different algorithms across key performance metrics. All hashes are compared using Hamming distance - the number of different bits between two hashes.

MetricaHashpHashdHashwHash
Speed
95%
70%
90%
75%
Accuracy
70%
95%
80%
85%
Memory Usage
95%
80%
90%
85%
Robustness
60%
95%
75%
85%

Hash Comparison Method:

All hash algorithms produce fixed-length fingerprints that are compared using Hamming distance - counting the number of differing bits. Lower distances indicate more similar images. A distance of 0 means identical hashes, while distances of 1-10 typically indicate similar images with minor variations.

Usage Recommendations

🚀 For Speed

When performance is critical and you need to process thousands of images quickly.

ImageHasher.averageHash(image)

🎯 For Accuracy

When you need the most reliable results and can afford slightly slower computation.

ImageHasher.perceptualHash(image)

✂️ For Crops

When you need to detect cropped or edited versions of images.

ImageHasher.differenceHash(image)

⚖️ For Balance

When you need a good balance of speed, accuracy, and robustness.

ImageHasher.waveletHash(image)

© 2025 dart_imagehash. Built with ❤️ using Svelte and Tailwind CSS.