Wie kann ich ein Delta -Diagramm zwischen zwei RGB -Bild mit derselben Pixelgröße erstellen?Python

Python-Programme
Anonymous
 Wie kann ich ein Delta -Diagramm zwischen zwei RGB -Bild mit derselben Pixelgröße erstellen?

Post by Anonymous »

Ich habe zwei RGB -Bilder mit der Darstellung des Diagramms einer skalaren Variablen für einige Geometrie. Mein Ziel ist es, einen Weg zu finden, um den Unterschied dieser Variablen zwischen den beiden Bildern zu zeichnen und ihn mit einem benutzerdefinierten Colormap zu färben (siehe angehängtes Bild). < /P>
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")
Aber es ist weit, das gewünschte Ergebnis zu erzeugen:

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')
Bild 3

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post