Как я могу создать дельта -график между двумя изображениями RGB с одинаковым размером пикселя?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу создать дельта -график между двумя изображениями RGB с одинаковым размером пикселя?

Сообщение Anonymous »

У меня есть два изображения RGB представления графика скалярной переменной при некоторой геометрии. Моя цель состоит в том, чтобы найти способ построить разницу в этой переменной между двумя изображениями и окрасить его настраиваем преобразовать два изображения в сером шкале, но после этого я совершенно потерян в понимании того, как правильно отобразить отрицательные и положительные значения из разницы в массивах. < /p>
Пока я написал этот кусок кода: < /p>

Код: Выделить всё

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")
Но это далеко, чтобы получить разыскиваемый результат:

изображение 1

image 2
< /p>

Редактировать: < /p>
Я проверил предложение Мартина И получение этого с этим кодом: < /p>

Код: Выделить всё

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>
Изменить 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')
image 3


Подробнее здесь: https://stackoverflow.com/questions/794 ... pixel-size
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»