首页 > 解决方案 > 如何从一组图像中显示像素随时间的变化?(随时间成像的亮度变化对象)

问题描述

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

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

这是其中一张图像的示例

标签: pythonimage-processingheatmappixelvariance

解决方案


生成一些合成数据:

  • 所有像素都随着标准 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()

在此处输入图像描述

我们拿回了我们的面具。


推荐阅读