I有两个RGB图像,表示某些几何形状上的标量变量的图。我的目标是找到一种方法来绘制两个图像之间的变量差异并用自定义的colormap上色(请参阅附件图像)。
我猜想的起点是以灰度转换两个图像,但是在此之后,我在理解如何正确地映射负面值并从数组差异上绘制了值。到目前为止,我已经编写了这件代码:
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")
但要产生想要的结果是很远的。
“ delta”绘图betweentwo图像
im*255
128+im*8
假设您的输入图像类似于您展示的示例。手动调整比例因子,直到您喜欢结果为止。
要做到这一点,然后在所得差的图像中找到最小值和最大值,然后重新汇总它,以使
im
映射到0和
im_min
至255。充分利用UINT8的动态范围。
im_max
可能已经有一个函数重新列出字节图像以使用PIL中的全范围。有并且可能比滚动代码更可取。例如
im = np.uint8(128+(im-im_min)*255/(im_max-im_min))
但是,您可能希望做到这一点,以便任何一个较大的或更大的尺度都决定了尺度,以便零保持在像素值128上。做到这一点的缩放因子是读者的练习。