使用Python绘制HeatMap

时间:2019-06-27 20:07:45

标签: python python-3.x matplotlib graph heatmap

我正在研究对象检测的本地化问题。我得到了不同视频帧中矩形框的坐标。所以我的numpy数组看起来像这样-

[[403 172 614 326]
 [345 153 652 383]
 [345 172 537 326]
 ...
 [134115326307]
 [153 57 403 307]
 [191 19479 230]]

每列中的4个值分别是x1,y1,x2,y2,它们基本上是定义为-

的矩形框的坐标
    __________________(x2,y2)
    |                |
    |                |
    |                |
    _(x1,y1)__________

(x1,y1)和(x2,y2)是如图所示的矩形本地化框的坐标。
 帧大小(从视频中获取)是恒定的。是480 *850。
我需要为这些值绘制热图,说更多的像素所占据的像素数。盒子要更亮。

 Sample Heat Map
基本上,这不是普通的热图(根据2d数组的值对其进行绘图)。
谁能建议如何以这种方式获取热图?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则您有一个长度为M的数组nM的每个元素(例如第一个元素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