123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import cv2
- import khandy
- import numpy as np
- def _convert_bool_matrix_to_int(bool_mat):
- hash_val = int(0)
- for item in bool_mat.flatten():
- hash_val |= int(item)
- hash_val <<= 1
- hash_val >>= 1
- return hash_val
-
-
- def calc_image_ahash(image):
- """Average Hashing
- References:
- http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
- """
- assert khandy.is_numpy_image(image)
- if image.ndim == 3:
- image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- resized = cv2.resize(image, (8, 8))
-
- mean_val = np.mean(resized)
- hash_mat = resized >= mean_val
- hash_val = _convert_bool_matrix_to_int(hash_mat)
- return hash_val
-
-
- def calc_image_dhash(image):
- """Difference Hashing
- References:
- http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
- """
- assert khandy.is_numpy_image(image)
- if image.ndim == 3:
- image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- resized = cv2.resize(image, (9, 8))
-
- hash_mat = resized[:,:-1] >= resized[:,1:]
- hash_val = _convert_bool_matrix_to_int(hash_mat)
- return hash_val
-
-
- def calc_image_phash(image):
- """Perceptual Hashing
-
- References:
- http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
- """
- assert khandy.is_numpy_image(image)
- if image.ndim == 3:
- image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- resized = cv2.resize(image, (32, 32))
- dct_coeff = cv2.dct(resized.astype(np.float32))
- reduced_dct_coeff = dct_coeff[:8, :8]
-
- # median of coefficients excluding the DC term (0th term)
- # mean_val = np.mean(reduced_dct_coeff.flatten()[1:])
- median_val = np.median(reduced_dct_coeff.flatten()[1:])
- hash_mat = reduced_dct_coeff >= median_val
- hash_val = _convert_bool_matrix_to_int(hash_mat)
- return hash_val
-
|