Создание HeatMap с использованием Python - PullRequest
2 голосов
/ 27 июня 2019

Я работаю над проблемой локализации обнаружения объектов. Я получил координаты прямоугольников в разных кадрах видео. Так что мой массив numy выглядит так -

[[403 172 614 326]
[345 153 652 383]
[345 172 537 326]
...
[134 115 326 307]
[153 57 403 307]
[191 19 479 230]]

Здесь 4 значения в каждом столбце - это x1, y1, x2, y2, которые в основном являются координатами прямоугольного прямоугольника, определенного как -

    __________________(x2,y2)
    |                |
    |                |
    |                |
    _(x1,y1)__________

(x1, y1) и (x2, y2) являются координатами прямоугольного локализованного прямоугольника, как показано.
Размер кадра (взятый из видео) постоянен. Это 480 * 850.
Мне нужно построить тепловую карту для этих значений, говоря, что пикселей больше нет. коробки должны быть ярче.

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

1 Ответ

0 голосов
/ 27 июня 2019

Если я правильно понимаю, у вас есть массив M длины n. Каждый элемент M, скажем, первый элемент M[0], представляет собой массив из четырех элементов [x_1, y_1, x_2, y_2], который определяет поле в большем пространстве. Затем эти блоки могут перекрываться, и вам нужна тепловая карта, которая создается общей комбинацией / расслоением всех этих блоков.

Я начну с генерации случайных данных:

import numpy as np
M = np.random.randint(0, high=500, size=(50,4))

Затем мы инициализируем пустую матрицу (я предполагаю, что полученная тепловая карта имеет размеры 500x500 на основе предоставленных вами данных образца, но вы можете настроить их соответствующим образом):

R = np.zeros((500,500))

Затем для каждой записи во входном массиве массивов мы заполняем соответствующий квадрат, добавляя 1 к каждому «пикселю», который покрывается размерами квадрата:

for row in M:
    x1, y1, x2, y2 = row
    for x in range(x1,x2+1):
        for y in range(y1,y2+1):
            R[x,y] += 1

Наконец, мы можем построить получившуюся тепловую карту:

import matplotlib.pyplot as plt
import seaborn as sns

sns.heatmap(R)
plt.show()

Что даст нам тепловую карту с перекрывающимися прямоугольниками, по желанию: Resulting heatmap

...