"No one is harder on a talented person than the person themselves" - Linda Wilkinson ; "Trust your guts and don't follow the herd" ; "Validate direction not destination" ;

January 14, 2020

Day #318 - Image Comparison Techniques

Image is a set of points (vectors). We could use different techniques for image similarity comparison. Listed below some of out of box techniques. Dlib based comparison was earlier discussed.
  • Haar, Extract Region
Comparison Techniques
  • Euclidean distance
  • Cosine distance
  • Hamming distance
  • Jaccard-Needham dissimilarity


Ref - Link

SSIM Approach Technique of structural similarity
import cv2
img1 = cv2.imread(r'D:\PetProject\image_comparison\4.jpg',0)
face_cascade = cv2.CascadeClassifier(r'D:\PetProject\image_comparison\Haar.xml')
#Perform Haar
faces = face_cascade.detectMultiScale(img1, 1.3, 5)
for (x,y,w,h) in faces:
#Extract
face1 = img1[y:y+h, x:x+w]
#Resize
face1 = cv2.resize(face1,(120,120), interpolation = cv2.INTER_CUBIC)
img2 = cv2.imread(r'D:\PetProject\image_comparison\5.jpg',0)
#Perform Haar
#Extract
#Resize
faces = face_cascade.detectMultiScale(img2, 1.3, 5)
for (x,y,w,h) in faces:
face2 = img2[y:y+h, x:x+w]
face2 = cv2.resize(face2,(120,120), interpolation = cv2.INTER_CUBIC)
cv2.imshow('face1 1',face1)
cv2.waitKey(0)
cv2.imshow('face2 2',face2)
cv2.waitKey(0)
#Euclidean Distance
import scipy.spatial.distance as dist
import numpy as np
#Convert to 1D
img1_data= face1.reshape(-1)
#Normalize
img1_data= img1_data/255.0
img2_data= face2.reshape(-1)
img2_data = img2_data/255.0
print(len(img1_data))
print(len(img2_data))
#Computes the Euclidean distance between two 1-D arrays
print(dist.euclidean(img1_data,img2_data))
#Compute the Cosine distance between 1-D arrays.
#A.B= A.B/(|A||B|)
print(dist.cosine(img1_data,img2_data))
#Compute the Hamming distance between two 1-D arrays
#Hamming distance is the number of bit positions in which the two bits are different
print(dist.hamming(img1_data,img2_data))
#Compute the Jaccard-Needham dissimilarity between two boolean 1-D array
#Jaccard distance, which measures dissimilarity between sample sets
print(dist.jaccard(img1_data,img2_data))
cv2.destroyAllWindows()
Happy Learning!!!

No comments: