基于单高斯视频背景估计的运动目标分割

文章目录

基于单高斯视频背景估计的运动目标分割

原理

上图为单高斯视频背景估计的运动目标分割流程图,主要包括以下步骤:

(1)单高斯背景模型的初始化。

将背景模型初始化为均值 μ ( x , y ) \mu(x,y) μ(x,y)和方差 σ 2 ( x , y ) = 1 \sigma^2(x,y)=1 σ2(x,y)=1的高斯分布。

(2)运动目标分割

利用如下公式对当前帧的每个像素点 I t ( x , y ) I^t(x,y) It(x,y)进行判断,如果像素点的概率值大于阈值 T T T:
P [ I t ( x , y ) ] = 1 2 π [ σ ′ ( x , y ) ] 2 exp ⁡ { − [ I t ( x , y ) − μ t ( x , y ) ] 2 2 [ σ ′ ( x , y ) ] 2 } > T P\left[I^{t}(x, y)\right]=\frac{1}{\sqrt{2 \pi\left[\sigma^{\prime}(x, y)\right]^{2}}} \exp \left\{-\frac{\left[I^{t}(x, y)-\mu^{t}(x, y)\right]^{2}}{2\left[\sigma^{\prime}(x, y)\right]^{2}}\right\}>T P[It(x,y)]=2π[σ′(x,y)]2 1exp{−2[σ′(x,y)]2[It(x,y)−μt(x,y)]2}>T

则判定该像素点为背景点,否则为前景点。实际实现中,可以用以下公式代替判断:
∣ I ( x , y ) − μ t ( x , y ) ∣ < β σ t ( x , y ) \left|I(x, y)-\mu^{t}(x, y)\right|<\beta \sigma^{t}(x, y) I(x,y)−μt(x,y) <βσt(x,y)

表示认为正态分布离均值中心 ± β σ t ( x , y ) \pm \beta \sigma^{t}(x, y) ±βσt(x,y)范围内的像素点属于背景。在掩码中将属于背景的像素点置零,其他置1,得到运动目标的分割掩码。用掩码对当前帧分割,即可得到运动目标。

(3) 单高斯背景模型的更新
μ t ( x , y ) = ( 1 − α ) μ t − 1 ( x , y ) + α I t ( x , y ) [ σ t ( x , y ) ] 2 = ( 1 − α ) [ σ t − 1 ( x , y ) ] 2 + α [ I t ( x , y ) − μ t ( x , y ) ] 2 \begin{array}{c} \mu^{t}(x, y)=(1-\alpha) \mu^{t-1}(x, y)+\alpha I^{t}(x, y) \\ {\left[\sigma^{t}(x, y)\right]^{2}=(1-\alpha)\left[\sigma^{t-1}(x, y)\right]^{2}+\alpha\left[I^{t}(x, y)- \mu^{t}(x, y)\right]^{2}} \end{array} μt(x,y)=(1−α)μt−1(x,y)+αIt(x,y)[σt(x,y)]2=(1−α)[σt−1(x,y)]2+α[It(x,y)−μt(x,y)]2

式中 α \alpha α为更新参数,表示背景更新的速度快慢,取值范围为0~1。 t − 1 t-1 t−1表 示 前一 帧, t t t表示当前帧。可以指定到达一定帧数时停止更新。

改进

针对单高斯背景估计算法容易误判背景(将背景点判定为运动目标)的问题,对其进行改进:

(1) 使用形态学方法对掩码进行处理,填补掩码的各个非零区域。

(2) 对输入进行高斯滤波,平滑输入的图像,从而减少因为形态学处理导致的更明显的掩码误判。

(3) 帧差法:将连续两帧的图像数据进行差分法,即进行相减操作, 如果其相减后的绝对值小于阈值,则认为其为背景点,令像素点变为0。 通过帧差法减少背景点的误判。

代码

python 复制代码
import cv2
import numpy as np

np.set_printoptions(precision=2, suppress=True)
beta = 1.5  # 前后景区分常数
alpha = 0.015  # 学习率

# 读取视频
cap = cv2.VideoCapture('高速公路.AVI')
isFirst = True
i = 0
while cap.isOpened():
    ret, frame = cap.read()
    if frame is not None:
        i += 1
        print(i)
        gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
        if i == 1:
            mu = np.zeros(gray.shape)
            var = np.ones(gray.shape)
            last = np.zeros(gray.shape)
        else:
            # 标识目标
            gray = cv2.GaussianBlur(gray, (3, 3), 0, 1)
            gray1 = gray.copy()
            gray1[np.abs(gray - mu) > beta * np.sqrt(var)] = 1  
            gray1[np.abs(gray - mu) < beta * np.sqrt(var)] = 0

            gray2 = gray1.copy()
            kernel = np.ones((3, 3), np.uint8)
            kernel2 = np.ones((5, 5), np.uint8)
            gray2 = cv2.dilate(gray2, kernel, iterations=3)
            gray2 = cv2.erode(gray2, kernel2, iterations=1)
            gray2[np.abs(gray - last) < 10] = 0
            gray2 = cv2.dilate(gray2, kernel, iterations=1)
            # 更新参数
            if i<200:
                mu = (1 - alpha) * mu + alpha * gray
                var = (1 - alpha) * var + alpha * (gray - mu) ** 2
            cv2.imshow('RGB', frame)
            cv2.imshow('tracking_gray', gray1 * 255)
            cv2.imshow('tracking2_gray', gray2 * 255)
            cv2.imshow('tracking', np.expand_dims(gray1, -1).repeat(3, axis=2) * frame)
            cv2.imshow('tracking2', np.expand_dims(gray2, -1).repeat(3, axis=2) * frame)

            cv2.waitKey(0)
            last = gray.copy()

            if 0xFF == ord('q'):
                break
    else:
        cap = cv2.VideoCapture('高速公路.AVI')

结果

相关推荐
知来者逆4 分钟前
研究大语言模型在心理保健智能顾问的有效性和挑战
人工智能·神经网络·机器学习·语言模型·自然语言处理
云起无垠13 分钟前
技术分享 | 大语言模型赋能软件测试:开启智能软件安全新时代
人工智能·安全·语言模型
老艾的AI世界27 分钟前
新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)
图像处理·人工智能·深度学习·神经网络·目标检测·机器学习·ai换脸·视频换脸·直播换脸·图片换脸
翔云API1 小时前
PHP静默活体识别API接口应用场景与集成方案
人工智能
浊酒南街1 小时前
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.9-4.10
人工智能·深度学习·神经网络·cnn
Tony聊跨境1 小时前
独立站SEO类型及优化:来检查这些方面你有没有落下
网络·人工智能·tcp/ip·ip
懒惰才能让科技进步1 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
Qspace丨轻空间2 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
没有不重的名么2 小时前
门控循环单元GRU
人工智能·深度学习·gru
love_and_hope2 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习