Class MedianHash

  • All Implemented Interfaces:
    Serializable

    public class MedianHash
    extends AverageHash
    Calculate a hash value based on the median luminosity in an image.

    Really good performance almost comparable to average hash. So far does a better job matching images if watermarks are added but trades this off for a little bit worse detection rating if handling rescaled images.

    - Slower to compute

    Since:
    2.0.0
    Author:
    Kilian
    See Also:
    Serialized Form
    • Constructor Detail

      • MedianHash

        public MedianHash​(int bitResolution)
        Parameters:
        bitResolution - The bit resolution specifies the final length of the generated hash. A higher resolution will increase computation time and space requirement while being able to track finer detail in the image. Be aware that a high key is not always desired.

        The median hash will produce a hash with at least the number of bits defined by this argument. In turn this also means that different bit resolutions may be mapped to the same final key length.

          64 = 8x8 = 65 bit key
          128 = 11.3 -> 12 -> 144 bit key
          256 = 16 x 16 = 256 bit key
                              
    • Method Detail

      • hash

        protected BigInteger hash​(BufferedImage image,
                                  HashBuilder hash)
        Description copied from class: HashingAlgorithm
        Calculate a hash for the given image. Invoking the hash function on the same image has to return the same hash value. A comparison of the hashes relates to the similarity of the images. The lower the value the more similar the images are. Equal images will produce a similarity of 0.

        This method is intended to be overwritten by implementations and takes a baseHash argument to allow concatenating multiple hashes as well to be able to compute the effective hash length in HashingAlgorithm.getKeyResolution(). Preceding 0's are omitted in big integer objects, while the usual hamming distance can be calculated due to xoring without issue the normalized distance requires the potential length of the key to be known.

        Overrides:
        hash in class AverageHash
        Parameters:
        image - Image whose hash will be calculated
        hash - a hash builder used to construct the hash
        Returns:
        the hash encoded as a big integer