Created
May 16, 2017 14:38
-
-
Save morris821028/a5fc9c0e557ce1ad125f1082dc1a2df6 to your computer and use it in GitHub Desktop.
Image Difference with Heat map
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
python ./diff-img.py lhs.jpg rhs.jpg | |
""" | |
import numpy as np | |
import sys | |
from PIL import Image | |
def rgb(minimum, maximum, value): | |
minimum, maximum = float(minimum), float(maximum) | |
ratio = 2 * (value-minimum) / (maximum - minimum) | |
b = int(max(0, 255*(1 - ratio))) | |
r = int(max(0, 255*(ratio - 1))) | |
g = 255 - b - r | |
return r, g, b | |
def normalize(arr1, arr2): | |
""" | |
Linear normalization | |
""" | |
arr1 = arr1.astype('float') | |
arr2 = arr2.astype('float') | |
for i in range(3): | |
arr1[...,i] -= arr2[...,i] | |
arr1[...,i] = abs(arr1[...,i]) | |
for i in range(len(arr1)): | |
for j in range(len(arr1[i])): | |
avg = (arr1[i][j][0] + arr1[i][j][1] + arr1[i][j][2])/3 | |
for k in range(3): | |
arr1[i][j][k] = avg | |
diff_mn = 0 | |
# diff_mx = np.amax(arr1[...,...,0]) | |
diff_mx = 10 | |
for i in range(len(arr1)): | |
for j in range(len(arr1[i])): | |
(arr1[i][j][0], arr1[i][j][1], arr1[i][j][2]) = rgb(diff_mn, diff_mx, arr1[i][j][0]) | |
return arr1 | |
def demo_normalize(lFILENAME, rFILENAME): | |
limg = Image.open(lFILENAME).convert('RGBA') | |
rimg = Image.open(rFILENAME).convert('RGBA') | |
arr1 = np.array(limg) | |
arr2 = np.array(rimg) | |
new_img = Image.fromarray(normalize(arr1, arr2).astype('uint8'),'RGBA') | |
new_img.save('normalized.jpg') | |
if __name__ == '__main__': | |
demo_normalize(sys.argv[1], sys.argv[2]) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment