如何显示一组图像中随时间变化的像素变化? (随时间成像的亮度变化物体)

How to display pixel variance over time from a set of images? (brightness changing object imaged over time)

我想用热图显示 intensity/brightness 一组图像随时间的变化。这些是随时间成像的亮度变化物体的图像。这对于查看对象的哪些部分(哪些像素)具有最高的亮度变化很有用。

我目前正在使用 OpenCV 来处理这些图像,但找不到任何直接获取此热图的方法。除此之外,如果有人可以建议一种计算方差的方法,而不必为每个像素的值创建一个单独的数组(也许直接从图像堆栈中计算它?),那也会有帮助。

This in an example of what one of the images looks like

生成一些合成数据:

  • 所有像素都随着 3 的标准变化
  • 一些像素发生变化(形状 X),标准为 5

代码:

import cv2    

lena = cv2.imread("lena.png", 0)
lena = cv2.resize(dices, (100,100))

images  = np.zeros((30, *lena.shape))
images[0] = lena.astype('float64')

mask = np.rot90(np.eye(100)) + np.eye(100)

for i in range(1,30):
    img = images[i-1]    
    img += np.random.randn(*lena.shape)*3
    img += mask*5
    images[i] = img

创建的图像集如下所示

渲染图像的代码:

plt.close('all')
plt.figure(figsize=(25,25))

for i in range(25):
    plt.subplot(5,5,i+1)
    plt.imshow(images[i],cmap='gray')
    plt.xticks([])
    plt.yticks([])
    plt.tight_layout()    
plt.show()

最后,热图找出图像中以不同速度变化的部分。

import seaborn as sns; sns.set()
ax = sns.heatmap(images.std(axis=0))
plt.show()

我们拿回了面具。