invariant hashing (caclulation of the hamming or the levenshtein distance when the image is flipped, rotated or cropped)

Description

flip-rotate-crop an image and caclulate the hamming or the levenshtein distance for phash, average_hash, dhash

Usage

1
2
3
invariant_hash(image, new_image, method = "phash", mode = "binary",
  hash_size = 8, highfreq_factor = 4, resize = "nearest", flip = T,
  rotate = T, angle_bidirectional = 10, crop = T)

Arguments

image

a 2-dimensional matrix or data frame (only gray-scale images are valid)

new_image

a new image to be compared with the previous input image

method

one of 'phash', 'average_hash', 'dhash'

mode

one of 'binary', 'hash'

hash_size

an integer specifying the hash size. IF method = 'phash' : the hash_size * highfreq_factor should be less than number of floor(rows * 0.8) or floor(columns * 0.8) of the gray_image IF method = 'dhash' or 'average_hash' : the hash_size should be less than number of floor(rows * 0.8) or floor(columns * 0.8) of the gray_image

highfreq_factor

an integer specyfing the highfrequency factor (IF method = 'phash' : the hash_size * highfreq_factor should be less than number of floor(rows * 0.8) or floor(columns * 0.8) of the gray_image)

resize

corresponds to one of 'nearest', 'bilinear' (resizing method)

flip

if TRUE the new_image will be flipped both horizontal and vertical

rotate

if TRUE the new_image will be rotated for a specified angle (see angle_bidirectional)

angle_bidirectional

a float specifying the angle that the images should be rotated in both directions. For instance, if angle_bidirectional = 10 then the image will be rotated for 10 and 350 (360-10) degrees.

crop

if TRUE the new_image will be cropped 10 or 20 percent (equally spaced horizontally and vertically)

Details

This function performs the following transformations : flips an image (no-flip, horizonal-flip, vertical-flip), rotates an image (no-angle, angle_bidirectional, 360-angle_bidirectional) and crops an image (no-crop, 10-percent-crop, 20-percent-crop). Depending on the type of mode ('binary', 'hash'), after each transformation the hamming or the levenshtein distance between the two images is calculated.

Value

If flip, rotate and crop are all FALSE then the function returns either the hamming distance (if mode = 'binary') or the levenshtein distance (if mode = 'hash') for the two images. If any of the flip, rotate, crop is TRUE then it returns the MIN, MAX of the hamming distance (if mode = 'binary') or the MIN,MAX of the levenshtein distance (if mode = 'hash').

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
path1 = system.file("tmp_images", "1.png", package = "OpenImageR")

path2 = system.file("tmp_images", "2.jpg", package = "OpenImageR")

image1 = rgb_2gray(readImage(path1))

image2 = rgb_2gray(readImage(path2))

res1 = invariant_hash(image1, image2, hash_size = 3, flip = TRUE, crop = FALSE)

res2 = invariant_hash(image1, image2, mode = 'hash', hash_size = 3, angle_bidirectional = 10)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.