使用 Python 绘制热图
Plotting HeatMap using Python
我正在研究对象检测的定位问题。我得到了不同视频帧中矩形框的坐标。所以我的 numpy 数组看起来像这样--
[[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。
我需要为这些值绘制热图,表示被更多 no 占用的像素。盒子的数量需要更亮。
Sample Heat Map
基本上,这不是普通的热图(根据其值绘制二维数组)。
谁能建议如何以这种方式获取热图?
如果我没理解错的话,你有一个长度为 n
的数组 M
。 M
的每个元素,比如第一个元素 M[0]
,是一个 four-element 数组 [x_1, y_1, x_2, y_2]
,它在更大的 space 中定义了一个框。然后,这些框可以重叠,并且您想要由所有这些框的总数 combination/layering 生成的热图。
我将从生成一些随机数据开始:
import numpy as np
M = np.random.randint(0, high=500, size=(50,4))
然后,我们初始化一个空矩阵(我在这里假设生成的热图根据您提供的示例数据具有尺寸 500x500,但您可以适当调整):
R = np.zeros((500,500))
然后,对于输入数组数组中的每个条目,我们 fill-in 相应的正方形,方法是将正方形的维度覆盖的每个 "pixel" 加 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()
这将根据需要为我们提供带有重叠框的热图:
我正在研究对象检测的定位问题。我得到了不同视频帧中矩形框的坐标。所以我的 numpy 数组看起来像这样--
[[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。
我需要为这些值绘制热图,表示被更多 no 占用的像素。盒子的数量需要更亮。
Sample Heat Map
基本上,这不是普通的热图(根据其值绘制二维数组)。
谁能建议如何以这种方式获取热图?
如果我没理解错的话,你有一个长度为 n
的数组 M
。 M
的每个元素,比如第一个元素 M[0]
,是一个 four-element 数组 [x_1, y_1, x_2, y_2]
,它在更大的 space 中定义了一个框。然后,这些框可以重叠,并且您想要由所有这些框的总数 combination/layering 生成的热图。
我将从生成一些随机数据开始:
import numpy as np
M = np.random.randint(0, high=500, size=(50,4))
然后,我们初始化一个空矩阵(我在这里假设生成的热图根据您提供的示例数据具有尺寸 500x500,但您可以适当调整):
R = np.zeros((500,500))
然后,对于输入数组数组中的每个条目,我们 fill-in 相应的正方形,方法是将正方形的维度覆盖的每个 "pixel" 加 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()
这将根据需要为我们提供带有重叠框的热图: