Как получить среднее значение тепловой карты внутри области ограничительной рамки - PullRequest
1 голос
/ 03 апреля 2019

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

enter image description here

Я добавил минимальный рабочий пример, который повторяет то, что я пытаюсь достичь:

import numpy as np
mask = np.zeros((10,10))
mask[3:-3, 3:-3] = 1 # white square in black background
im = mask + np.random.randn(10,10) # random image
masked = np.ma.masked_where(mask == 0, mask)
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(im, 'BuGn')
plt.imshow(masked, 'jet',  alpha=0.9)
plt.show()

, где яхотел бы рассчитать среднее значение im внутри синего квадрата (masked).

enter image description here

Есть ли у кого-нибудь какие-либо предложения?

1 Ответ

1 голос
/ 03 апреля 2019

Я думаю, что вы ищете это:

#!/usr/bin/env python3

import numpy as np

# Make mask of first 4 diagonal elements
h, w = 6, 10
mask = np.zeros((h,w),dtype=np.uint8)
mask[0][0] = 1
mask[1][1] = 1
mask[2][2] = 1
mask[3][3] = 1

# Make image of random small numbers under 10 that Mark is capable of adding up
# Go for predictable randomness because Mark is not a physicist
np.random.seed(42)
im = np.random.randint(1,10,(h,w),dtype=np.uint8)

# Calculate mean of numbers where mask>0
mean = im[mask>0].mean()

Вот как выглядит маска:

array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

Вот как выглядит изображение:

enter image description here

Вот среднее значение:

In [33]: mean                                                                                       
Out[33]: 5.75

Проверка :

(7 + 5 + 3 + 8) /4 = 23/4 = 5.75
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...