Ich denke, der Startpunkt ist zu Konvertieren Sie die beiden Bilder in Graustufen, aber danach bin ich ziemlich verloren, wie korrekt negative und positive Werte aus dem Array -Differenz zugeordnet sind. < /p>
Code: Select all
import numpy as np
import matplotlib as mpl
from PIL import Image, ImageChops
img1 = Image.open('img1.png').convert('L')
img2 = Image.open('img2.png').convert('L')
cm = mpl.colormaps['bwr']
img1_array = np.asarray(img1)
img2_array = np.asarray(img2)
diff_img = img1_array - img2_array
im = cm(diff_img) im = np.uint8(im * 255)
im = Image.fromarray(im).save("test_diff.png")
Bild 1
Bild 2
< /p>
Bearbeiten: < /p>
Ich habe Martins Vorschlag getestet und dies mit diesem Code erhalten: < /p>
Code: Select all
from PIL import Image, ImageChops
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
# open images
img1 = Image.open('img1.png').convert('L')
img2 = Image.open('img2.png').convert('L')
w,h = img1.width, img1.height
arr1 = np.array(img1)
arr2 = np.array(img2)
im = (arr2 - arr1)
im_min = im.min()
im_max = im.max()
im = np.uint8(128+(im-im_min)*255/(im_max-im_min))
figure, axes = plt.subplots(1,1)
img = axes.imshow(np.array(im))
img.set_cmap('bwr')
axes.patch.set_linewidth(1)
axes.patch.set_edgecolor('k')
axes.get_xaxis().set_visible(False)
axes.get_yaxis().set_visible(False)
figure.colorbar(img, ax=axes, shrink=0.25, orientation="horizontal", pad=0.01)
figure.set_size_inches(w/150,h/150)
figure.tight_layout()
figure.savefig('foo.png', dpi=150, bbox_inches='tight')
< /code>
Bearbeiten 2: < /p>
from PIL import Image, ImageChops
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import cv2 as cv
from scipy.interpolate import interp1d
# open images
img1 = Image.open('test_1.png').convert('L')
img2 = Image.open('test_2.png').convert('L')
#img1.save('test_L.png')
#img2.save('test_L.png')
w,h = img1.width, img1.height
arr1 = np.asarray(img1)
arr2 = np.asarray(img2)
diff = arr1 - arr2
m = interp1d([0,255],[-3, 1])
arr1_m = []
arr2_m = []
for n, val in enumerate(arr1):
arr1_m.append((m(val)).tolist())
arr1_m = np.array(arr1_m)
for n, val in enumerate(arr2):
arr2_m.append((m(val)).tolist())
arr2_m = np.array(arr2_m)
diff = arr2_m - arr1_m
figure, axes = plt.subplots(1, 1)
normalize = mpl.colors.Normalize(vmin=-0.5, vmax=0.5)
img = axes.imshow(np.array(diff), norm=normalize)
img.set_cmap('bwr')
axes.patch.set_linewidth(1)
axes.patch.set_edgecolor('k')
axes.get_xaxis().set_visible(False)
axes.get_yaxis().set_visible(False)
figure.colorbar(img, ax=axes, shrink=0.25, orientation="horizontal", pad=0.01)
figure.set_size_inches(w/150,h/150)
figure.tight_layout()
figure.savefig('foo.png', dpi=150, bbox_inches='tight')