OpenCV视频分析背景提取与前景提取

小白学视觉

共 2279字,需浏览 5分钟

 ·

2021-12-14 21:00

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

基本思想


OpenCV中支持的两种背景提取算法都是基于模型密度评估,然后在像素级对图像进行前景与背景分类的方法,它们具有相同的假设前提 – 各个像素之间是没有相关性的,跟它们算法思想不同的方法主要是基于马尔可夫随机场理论,认为每个像素跟周围的像素是有相关性关系,但是基于马尔可夫随机场的方法速度与执行效率都堪忧!所以OpenCV中没有实现。

基于像素分类的背景分析方法

  • 自适应的背景提取(无参数化/ KNN)

  • 基于GMM的背景提取

  • 基于模糊积分的背景提取

这些背景建模的方法一般都可以分为如下三步完成

  • 背景初始化阶段(背景建模提取)

  • 前景检测阶段(视频分析,前景对象检测)

  • 背景维护与更新(视频分析过程中)

视频分析中,工作方式如下:


算法介绍


实现对前景与背景像素级别的建模,最常见的是RGB像素的概率密度分布,当对象没有变化的时候,通过连续的N帧进行建模生成背景模型

 

高斯混合模型(GMM)方式正好满足这种方式,对高斯混合模型中的每个componet进行建模,计算表达如下:

 

基于GMM的核密度估算需要考虑初始输入componet数目参数、OpenCV中实现的另外一种方法是基于简单的核密度估算方法,然后通过KNN对输出的每个像素进行前景与背景分类,实现了更加快速的背景分析。非参数话的模型更新

 

上述两种方法都是基于像素分类,采用非此即彼的方法,没有考虑到像素之间相似度的关联性,在实际应用场景中有些情况会带来问题。所以还有一种相似度进行模糊积分决策方法,它的算法流程如下:

 

其中颜色相似性度量如下:

 

代码与演示


OpenCV在release模块中相关API

Ptr cv::createBackgroundSubtractorMOG2(
 int history = 500,
 double varThreshold = 16,
 bool detectShadows = true 
)
参数解释
History表示的是历史帧数多少,这个跟作者论文提到的采样有关计算模型建立有关系
varThreshold表示马氏距离的阈值
detectShadows是否检测阴影


演示代码

import cv2 as cv

capture = cv.VideoCapture("D:/images/video/video_004.avi")
mog = cv.createBackgroundSubtractorMOG2()
se = cv.getStructuringElement(cv.MORPH_RECT, (33))
while True:
    ret, image = capture.read()
    if ret is True:
        fgmask = mog.apply(image)
        ret, binary = cv.threshold(fgmask, 220255, cv.THRESH_BINARY)
        binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se)
        bgimage = mog.getBackgroundImage()
        cv.imshow("bgimage", bgimage)
        cv.imshow("frame", image)
        cv.imshow("fgmask"binary)
        c = cv.waitKey(50)
        if c == 27:
            break
    else:
        break

cv.destroyAllWindows()


运行结果

画面解释:最左侧是输入视频的一帧,有一只小兔子在跑,中间是背景建模,右侧是前景检测,生成的移动对象mask,可见小兔子作为移动目标被成功捕获!


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报