Как отобразить дисперсию пикселей во времени из набора изображений?(изменение яркости объекта, отображаемого с течением времени) - PullRequest
1 голос
/ 10 июля 2019

Я хотел бы отобразить с помощью тепловой карты изменение интенсивности / яркости во времени набора изображений.Это изображения объекта, изменяющего яркость, отображаемого с течением времени.Это было бы полезно, чтобы увидеть, какие части объекта (какие пиксели) имеют наибольшую дисперсию яркости.

В настоящее время я использую OpenCV для управления этими изображениями, но не могу найти какой-либо прямой способ получения этой тепловой карты.В дополнение к этому, если кто-то может предложить способ вычисления дисперсии без необходимости создания отдельного массива для значений для каждого пикселя (может быть, вычисление его непосредственно из стека изображений?), Это также будет полезно.

Это пример того, как выглядит одно из изображений

1 Ответ

0 голосов
/ 11 июля 2019

Генерирует некоторые синтетические данные:

  • Все пиксели изменяются со стандартным значением 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

Набор созданных изображений выглядит следующим образом:

enter image description here

код для рендеринга изображений:

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()

enter image description here

Мы получили нашу маскуназад.

...