24小时热门版块排行榜    

CyRhmU.jpeg
查看: 966  |  回复: 1
【悬赏金币】回答本帖问题,作者残雪执念将赠送您 200 个金币

残雪执念

新虫 (小有名气)

[求助] 行人轨迹预测可视化

行人轨迹预测可视化图叫密度分布图? 怎么画
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

溟渊逸影

铁虫 (小有名气)

【答案】应助回帖

行人轨迹预测可视化中,密度分布图是一种常用展现形式,用于呈现行人在空间、时间维度上的分布特征,以下为您详细讲解其绘制思路、步骤及常用工具实现方法:
一、明确数据基础
数据采集:
通常需先获取行人轨迹数据,可通过视频监控(利用目标检测与跟踪算法提取行人位置序列 )、室内定位系统(如 UWB 定位、蓝牙信标 )、公开数据集(如 ETH/UCY 行人轨迹数据集 )等方式获得。数据格式一般包含行人 ID、时间戳、二维或三维空间坐标(如
(x,y,t)

x,y
为平面位置,
t
为时间 ) 。
对原始数据进行预处理,包括去除噪声点(如因检测错误产生的异常坐标 )、补全缺失轨迹(通过插值算法 )、统一时间与空间坐标尺度等,确保数据质量。
数据结构梳理:整理后的数据需清晰关联每个行人的轨迹点序列,以及对应时间、空间信息,为后续计算密度做准备。
二、密度计算原理与方法
核密度估计(KDE,Kernel Density Estimation ):
这是绘制密度分布图的核心算法。对于每个轨迹点,将其视为核函数的中心,通过核函数(如高斯核 )向周围空间 “扩散” 密度贡献。公式为:
f
^

(x)=
nh
1


i=1
n

K(
h
x−x
i



)

其中,
f
^

(x)
是位置
x
处的密度估计值,
n
是轨迹点总数,
h
是核函数的带宽(控制密度扩散范围,需合理设置,过小会使密度分布破碎,过大则过度平滑 ),
K
是核函数(如高斯核
K(u)=



1

e

2
u
2




),
x
i


是第
i
个轨迹点坐标。
简单理解:每个行人轨迹点会在其周边一定范围内(由带宽决定 )产生密度值,空间中某点的总密度是所有轨迹点在该点产生密度的叠加,这样就能将离散的轨迹点转化为连续的密度分布场。
网格离散化:为了可视化呈现,需将连续的密度分布离散到规则网格上。把研究区域(如监控场景的二维平面 )划分成若干大小一致的网格(如
100×100
像素网格 ),计算每个网格中心点或网格单元内的密度值,作为该网格的密度代表。
三、绘制步骤(以 Python 结合 Matplotlib、Seaborn 或专业 GIS 软件为例 )
方式一:Python 代码实现(以二维平面轨迹为例,数据为 Pandas DataFrame 格式,含 'x', 'y' 坐标列 )
环境准备:安装必要库,如 numpy(数值计算 )、pandas(数据处理 )、matplotlib(绘图 )、scipy(科学计算,用于核密度估计 ) 。
bash
pip install numpy pandas matplotlib scipy
代码流程:
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# 1. 读取轨迹数据(假设数据文件为 'trajectory_data.csv',含 'x', 'y' 列 )
data = pd.read_csv('trajectory_data.csv')
x = data['x'].values
y = data['y'].values

# 2. 核密度估计
# 联合(x, y)计算核密度
kde = gaussian_kde([x, y])  
# 生成网格点,覆盖数据范围
xi, yi = np.mgrid[x.min():x.max():100j, y.min():y.max():100j]
# 在网格点上计算密度值
zi = kde([xi.flatten(), yi.flatten()]).reshape(xi.shape)

# 3. 绘制密度分布图
plt.figure(figsize=(10, 8))
# 绘制等高线图(密度分布),cmap 控制颜色映射,如 'viridis' 'jet' 等
plt.contourf(xi, yi, zi, levels=20, cmap='jet')
# 添加颜色条,展示密度与颜色对应关系
plt.colorbar(label='Density')
plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Pedestrian Trajectory Density Distribution')
plt.show()
关键参数调整:
带宽
h
:在 gaussian_kde 中,可通过 kde.set_bandwidth(bw_method=0.2) 等方式设置(bw_method 为带宽系数,值越小带宽越窄,需根据数据分布测试调整,比如在 ETH/UCY 数据集上,可尝试 0.1 - 0.5 范围 ) 。
网格分辨率:np.mgrid 中 100j 表示生成 100 个网格点,可增大数值提升分辨率(如 200j ),但会增加计算量,需平衡效果与效率。
颜色映射 cmap:不同映射会呈现不同视觉效果,如 'hot' 强调高密度区域的暖色,'cool' 突出冷色,可根据需求选择。
方式二:利用专业 GIS 软件(如 ArcGIS、QGIS ,适合带地理坐标的轨迹数据 )
数据导入:将轨迹数据(含经纬度或平面坐标 )导入软件,确保坐标系统一(如 WGS84 地理坐标或当地投影坐标 ) 。
核密度分析工具:
在 ArcGIS 中,使用 Spatial Analyst Tools → Density → Kernel Density 工具,设置输入要素为轨迹点图层,指定输出像元大小(即网格分辨率 )、搜索半径(对应带宽,软件会根据数据建议,也可手动调整 ),运行工具生成密度 raster 图层。
在 QGIS 中,安装 QGIS Processing Toolbox 中的 Kernel Density Estimation 插件,类似设置参数(输入点图层、带宽、输出分辨率等 ),生成密度图层。
可视化设置:对生成的密度 raster 图层进行符号化设置,选择合适的色带(如 Jet Rainbow )、分类方式(等间距、自然间断点等 ),添加图例、标题等,输出密度分布图。
方式三:结合深度学习可视化库(如 PyTorch + Matplotlib ,若轨迹预测是基于深度学习模型输出 )
模型输出处理:若通过 LSTM、Transformer 等模型预测行人未来轨迹,模型输出为一批轨迹点序列(如 predicted_trajectories ,形状为 [batch_size, time_steps, 2] ,2 为 xy 坐标 ) 。
密度计算与绘图:将预测的轨迹点展开为离散点,按照上述 Python 代码思路,用 gaussian_kde 计算密度并绘图,可对比真实轨迹与预测轨迹的密度分布差异,代码示例(简化 ):
python
import torch
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# 假设 predicted_trajectories 是模型输出的预测轨迹张量,shape: [batch, time, 2]
predicted_trajectories = torch.randn(100, 20, 2)  # 示例随机数据,需替换为真实预测结果
x_pred = predicted_trajectories[:, :, 0].flatten().numpy()
y_pred = predicted_trajectories[:, :, 1].flatten().numpy()

# 核密度估计与绘图,同之前流程
kde_pred = gaussian_kde([x_pred, y_pred])
xi, yi = np.mgrid[x_pred.min():x_pred.max():100j, y_pred.min():y_pred.max():100j]
zi_pred = kde_pred([xi.flatten(), yi.flatten()]).reshape(xi.shape)

plt.figure(figsize=(10, 8))
plt.contourf(xi, yi, zi_pred, levels=20, cmap='viridis')
plt.colorbar(label='Predicted Density')
plt.title('Predicted Pedestrian Trajectory Density Distribution')
plt.show()
四、其他可视化形式拓展(除密度分布图外,辅助分析 )
轨迹动画:用 matplotlib.animation 将行人轨迹随时间动态展示,观察轨迹变化趋势,结合密度分布了解不同时刻高密度区域转移。
矢量流图(Streamplot ):若轨迹数据包含速度方向信息,可绘制矢量流图,展示行人运动趋势与密度分布的关联,在 Python 中用 matplotlib.pyplot.streamplot 实现。
三维密度分布:当轨迹含时间维度或三维空间坐标(如楼层信息 ),可扩展为三维密度图,用 matplotlib 的 3D 绘图功能或 Mayavi 库实现,展示
(x,y,t)

(x,y,z)
下的密度分布。
总之,行人轨迹预测密度分布图绘制的核心是通过核密度估计将离散轨迹转化为连续密度场,再借助可视化工具呈现。您可根据数据类型(二维 / 三维、有无地理坐标 )、使用场景(学术分析、工程部署 )选择合适的工具和方法,重点调整带宽、网格分辨率等参数优化可视化效果,辅助理解行人轨迹分布规律与预测结果 。
弈中藏妙理,局内隐乾坤。浅笑风云变,闲观世事纷。
2楼2025-07-06 16:01:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 残雪执念 的主题更新
不应助 确定回帖应助 (注意:应助才可能被奖励,但不允许灌水,必须填写15个字符以上)
信息提示
请填处理意见