基于光流法和混合高斯模型对监控视频中的人群进行跟踪

Yonina ·
更新时间:2024-11-14
· 650 次阅读

实验数据:

UCSD Anomaly Detection Dataset

该数据集由加州大学圣迭戈分校提供,由一个安装在高处、俯瞰人行道的固定摄像机获取的监控视频。视频中人群密度由稀疏到密集不等。其中正常定义:视频中仅有行人;异常定义为:视频中出现自行车/汽车/滑板车/轮椅等异常运动模式。数据集中提供了两个场景,分别为UCSDped1和UCSDped2,每个场景下又分为Train和Test,下面又会分为N个片段,每个片段都会有200帧图像。本实验用到“UCSDped1/Train/Train007”这一片段,下面为该片段的视频演示:

实验代码:

环境:Win10 | Python 3.7.3 | OpenCV 4.1.0

步骤一:前景提取

利用高斯混合模型分离图像帧的前景和背景

# 创建混合高斯模型 fgbg = cv2.createBackgroundSubtractorMOG2() for frame in frames: frame_img = cv2.imread(frame_path + frame, 1) # 利用混合高斯模型提取前景 fgmask = fgbg.apply(frame_img)

提取前景后的视频演示:

步骤二:跟踪运动

利用Lucas Kanade光流法跟踪监控视频中的运动,这里利用上面提取的前景计算光流。

# Shi-Tomasi 角点检测参数 feature_params = dict( maxCorners = 100, qualityLevel = 0.3, minDistance = 7, blockSize = 7) # lucas kanade光流法参数 lk_params = dict( winSize = (15, 15), maxLevel = 2, criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)) first_rgbframe = cv2.imread(frameFG_path + frames[1], 1) # 计算第一帧的灰度图 first_frame = cv2.cvtColor(first_rgbframe, cv2.COLOR_BGR2GRAY) #获取图像中的角点,返回到p0中 p0 = cv2.goodFeaturesToTrack(first_frame, mask = None, **feature_params) # 创建一个蒙版用来画轨迹 mask = np.zeros_like(first_rgbframe) old_frame = first_frame new_frame = np.zeros_like(old_frame) for frame_i in frames: rgbframe = cv2.imread(frameFG_path + frame_i, 1) rgbframe_bg = cv2.imread(frame_path + frame_i, 1) frame = cv2.cvtColor(rgbframe, cv2.COLOR_BGR2GRAY) new_frame = frame # 计算光流 p1, st, err = cv2.calcOpticalFlowPyrLK(old_frame, new_frame, p0, None, **lk_params) if (p1 is None): continue # 选取好的跟踪点 good_new = p1[st == 1] good_old = p0[st == 1] # 画出轨迹 for i, (new, old) in enumerate(zip(good_new, good_old)): a,b = new.ravel() c,d = old.ravel() mask = cv2.line(mask, (a, b), (c, d), color[i].tolist(), 1) rgbframe = cv2.circle(rgbframe_bg, (a, b), 2, color[i].tolist(), -1) img = cv2.add(rgbframe, mask) cv2.imshow('frame', img) k = cv2.waitKey(30) & 0xff if k == 27: break # 更新上一帧的图像和追踪点 old_gray = frame.copy() p0 = good_new.reshape(-1,1,2) old_frame = new_frame

在光流跟踪时调用OpenCV的line和circle画图功能添加运动轨迹,并以蒙版的形式添加到原来的帧图像上,处理后的视频演示:

后续工作:

利用光流法得出的运动信息分析和预测视频中的异常行为。

基于光流法和混合高斯模型检测人群异常


作者:VG-Lin



监控 光流 模型 高斯

需要 登录 后方可回复, 如果你还没有账号请 注册新账号