首页 > 其他分享 >【CV】视频图像背景分割MOG2,KNN,GMG

【CV】视频图像背景分割MOG2,KNN,GMG

时间:2024-05-27 22:59:01浏览次数:17  
标签:KNN random GMG 模型 MOG2 cv2 分割器 背景 高斯分布

当涉及背景分割器(Background Subtractor)时,Mixture of Gaussians(MOG2)、K-Nearest Neighbors(KNN)和Geometric Multigid(GMG)是常用的算法。它们都用于从视频流中提取前景目标,并在计算机视觉和图像处理任务中发挥重要作用。

Mixture of Gaussians (MOG2):
MOG2 是一种基于高斯混合模型的背景分割器,它使用多个高斯分布对每个像素的颜色进行建模。该模型适用于场景中有很多变化和动态光照条件的情况。MOG2 背景分割器在处理光照变化和动态背景时表现良好。

K-Nearest Neighbors (KNN):
KNN 背景分割器利用K最近邻算法来识别像素的前景或背景。该算法根据像素的颜色特征和邻近像素的情况进行分类。KNN 背景分割器在处理运动目标和部分遮挡时可能表现良好。

Geometric Multigid (GMG):
GMG 背景分割器结合了几何学和统计学的方法,通过对几何变化和像素之间的关系进行建模来进行背景分割。GMG 背景分割器在动态背景和光照变化下具有较好的鲁棒性。

优劣对比:

MOG2 适用于动态光照条件下的场景,但对于相对静态的背景可能效果不佳。
KNN 对于处理运动目标和部分遮挡情况可能更有效,但在复杂动态背景下表现可能欠佳。
GMG 在动态背景和光照变化下表现较好,但对于较为静态的场景可能不够精确。

示例代码(使用OpenCV库):
下面是一个简单的示例代码,演示了如何使用OpenCV库中的这三种背景分割器:

import cv2

# 读取视频文件
cap = cv2.VideoCapture('input_video.mp4')

# 创建背景分割器对象
mog2_bg_subtractor = cv2.createBackgroundSubtractorMOG2()
knn_bg_subtractor = cv2.createBackgroundSubtractorKNN()
gmg_bg_subtractor = cv2.bgsegm.createBackgroundSubtractorGMG()

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 背景分割
    mog2_mask = mog2_bg_subtractor.apply(frame)
    knn_mask = knn_bg_subtractor.apply(frame)
    gmg_mask = gmg_bg_subtractor.apply(frame)

    # 显示前景对象
    cv2.imshow('MOG2 Foreground', mog2_mask)
    cv2.imshow('KNN Foreground', knn_mask)
    cv2.imshow('GMG Foreground', gmg_mask)

    if cv2.waitKey(30) & 0xFF == 27:  # 按下Esc键退出
        break

cap.release()
cv2.destroyAllWindows()

P.S.简单补充下高斯混合模型的知识
高斯混合模型(Gaussian Mixture Model,GMM)是一种用于对数据进行建模的概率模型。它假设数据是由多个高斯分布组合而成的,每个高斯分布对应着数据的一个聚类。GMM通常用于聚类分析和密度估计。

在GMM中,每个高斯分布都由均值和方差参数化,整个模型由多个高斯分布组成。给定数据后,可以使用期望最大化(Expectation-Maximization,EM)算法来估计GMM的参数,包括每个高斯分布的均值、方差和混合系数。

下面是一个使用Python的示例,演示如何使用scikit-learn库中的GaussianMixture类来构建和拟合一个GMM模型:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture

# 生成示例数据
np.random.seed(0)
n_samples = 1000
# 生成两个高斯分布的数据
X = np.concatenate([np.random.normal(0, 1, int(0.3 * n_samples)),
                    np.random.normal(5, 1, int(0.7 * n_samples))]).reshape(-1, 1)

# 构建并拟合GMM模型
gmm = GaussianMixture(n_components=2, random_state=42)
gmm.fit(X)

# 绘制拟合的GMM模型
x = np.linspace(-5, 10, 1000)
x = x.reshape(-1, 1)
plt.hist(X, bins=30, density=True, alpha=0.5)
plt.plot(x, np.exp(gmm.score_samples(x)), label='GMM')
plt.xlabel('x')
plt.ylabel('Probability')
plt.legend()
plt.show()

在使用 GaussianMixture 模型时,random_state 参数用于控制初始化高斯混合模型的随机性,包括初始化聚类中心、对数似然函数等,从而控制着模型中的随机数生成过程
设置 random_state 参数的主要目的是为了在需要重复实验或结果可复现的情况下,确保每次运行模型时都能得到相同的结果。
当设置了 random_state 参数时,模型将会使用指定的随机种子来初始化,确保每次运行模型时都得到相同的随机初始化结果。这样可以使得模型的输出对于其他人来说更容易理解和复现。
参数 random_state 可以传入一个整数值,例如 random_state=42,这个整数值就是随机种子。通过设置相同的随机种子,可以确保在相同数据集上运行模型时得到一致的结果。

标签:KNN,random,GMG,模型,MOG2,cv2,分割器,背景,高斯分布
From: https://blog.csdn.net/ZSZ_shsf/article/details/139249422

相关文章

  • 机器学习-KNN算法
    一、KNN算法原理与简单实现1、KNN算法的概念K最近邻(k-NearestNeighbor,KNN)分类算法,是最简单的机器学习算法之一,涉及高等数学知识近乎为0,虽然它简单,但效果很好,是入门机器学习的首选算法。但很多教程只是一笔带过,在这里通过该算法,我们可以学习到在机器学习中所涉及的其他知识......
  • KNN原理+实战(Pyhton)
    目录简介:1基本思路:2算法流程:3 KNN代码Python实现3.1K值的确定3.2KNN主程序简介:    KNN(k-NearestNeighbor),也称K-近邻分类算法。分类的目的是学会一个分类器。该分类器能把数据映射到事先给定类别中的某一个类别。分类属于一种监督学习方式,分类器的学习......
  • 配置orangepi5pro运行rknn版本的yolov5
    摘要配置orangepi5pro运行rknn版本的yolov5,使用npu进行目标检测.关键信息板卡:orangepi5pro芯片:RK3588S环境:rknn2转换工具:rknn-tool-kit2:1.5.0系统:ubuntu20.04原理简介npu简介NPU(NeuralProcessingUnit,神经处理单元)是一种专门设计用于加速人工智能计算的硬件加......
  • 二叉树进阶:二叉搜索树、平衡二叉树、KD树(实现KNN算法的快速寻找k个邻居)
    二叉搜索树二叉搜索树又称为二叉排序树、二叉查找树。请记住,本篇所介绍的所有树,都是二叉搜索树,也就是说都用到了二分查找的思想。二叉搜索树的特征:每个结点的左结点都小于结点本身,右结点都大于结点本身。用中序遍历来遍历一棵二叉搜索树,结果必然是有序的。时间复杂度很低......
  • R语言结合新冠疫情COVID-19对股票价格预测:ARIMA,KNN和神经网络时间序列分析
    原文链接:http://tecdat.cn/?p=24057原文出处:拓端数据部落公众号1.概要本文的目标是使用各种预测模型预测Google的未来股价,然后分析各种模型。Google股票数据集是使用R中的Quantmod软件包从YahooFinance获得的。2.简介预测算法是一种试图根据过去和现在的数据预测未来值的过......
  • 机器学习-K近邻算法-KNN
    1K-紧邻算法简介1.1什么是K-近邻算法直观上理解,就是根据距离的远近来判断你所处于的类别。但是,也会存在一些问题,距离最近的样本所属于的类别与你需要判断的类别可能不是同一种类别。1.1KNN概念KNearestNeighbor算法又叫做KNN算法,这个算法是机器学习里面比较经典的算法,总......
  • KNN算法思想与Python实现
    古语说得好,物以类聚,人以群分;近朱者赤,近墨者黑。这两句话的大概意思就是,你周围大部分朋友是什么人,那么你大概率也就是这种人,这句话其实也就是K最近邻算法的核心思想。kNN(k-NearestNeighbor)法即k最邻近法,最初由Cover和Hart于1968年提出,是一个理论上比较成熟的方法,也是最简单的机......
  • knn算法的实现
      目录1.概念2.代码实战3.关于如何解决预测不准  3.1)调整k的值会影响预测值  3.2)增加数据的维度4.空间和维度  4.1)一维空间  4.2)二维空间  4.3)三维空间  4.4)空间中两点距离的计算5.精度问题之数据归一化处理  1.概念   KNN(K-N......
  • 机器学习实践篇第二篇-KNN算法学习
    一.了解什么是K-NN算法  1.KNN算法原理KNN(K-NearestNeighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为......
  • 机器学习KNN算法实现例子
    KNN算法(k近邻算法)是一种有监督分类算法,它的原理非常简单,下面以一个简单的例子引入。已知两种酒的标签:赤霞珠和黑皮诺,在这个情景中,我们对酒进行分类的依据是酒精浓度和颜色深度,如下图所示:红色代表赤霞珠,紫色代表黑皮诺,图中有一分类未知的黄点,给定一个K值,我们找到距离黄点最近的K个......