背景减除算法之K-Nearest(KNN)和Mixture of Gaussians(MOG2)
来源:互联网 发布:psv幽浮优化补丁 编辑:程序博客网 时间:2024/06/03 20:03
Python版本:3.5.2,Opencv版本:3.2.0,网上安装教程很多,在此不再赘述
MOG2算法,即高斯混合模型分离算法,是MOG的改进算法。它基于Z.Zivkovic发布的两篇论文,即2004年发布的“Improved adaptive Gausian mixture model for background subtraction”和2006年发布的“Efficient Adaptive Density Estimation per Image Pixel for the Task of Background Subtraction”中提出。
KNN算法,即K-nearest neigbours - based Background/Foreground Segmentation Algorithm。2006年,由Zoran Zivkovic 和Ferdinand van der Heijden在论文”Efficient adaptive density estimation per image pixel for the task of background subtraction.”中提出。
下面介绍两种算法的具体实现,实验中所用到的视频为CASIA步态数据库,用以上两种算法分别提取步态轮廓图像
步态视频已上传到百度云,步态视频,提取密码:9mt0
(一)MOG2算法实现
import numpy as npimport cv2cap=cv2.VideoCapture('D:\gait-vedio\gait.avi')#混合高斯,对每一帧的环境进行学习,常用来对不同帧进行比较,并存储以前的帧,可按时间推移的方法提高运动分析的结果。fgbg=cv2.createBackgroundSubtractorMOG2() while(1): #默认第一帧为背景图片 ret,frame=cap.read() fgmask=fgbg.apply(frame) cv2.imshow('frame',fgmask) k=cv2.waitKey(30)&0xff#按'q'键退出循环 if k== ord('q'): breakcap.release()cv2.destroyAllWindows()
实验结果,
(一)KNN算法实现
采用KNN实现视频图像的背景分割算法,并且保存每一帧图像(与视频文件在相同的文件夹)
import cv2#视频文件路径datapath = "D:/test1gait/"bs = cv2.createBackgroundSubtractorKNN(detectShadows = False)#背景减除器,设置阴影检测#训练帧数history=20 bs.setHistory(history)frames=0camera = cv2.VideoCapture(datapath + "gait2.avi")count = 0while True: ret, frame = camera.read()#返回元组 ret=True/False,代表是否读取到了图片 if ret==True:#计算前景掩码,包含 前景的白色值 以及 阴影的灰色值 fgmask = bs.apply(frame) if frames < history: frames += 1 continue#读取每一帧 print('Read a new frame: ', ret)#对原始帧进行膨胀去噪,#前景区域二值化,将非白色(0-244)的非前景区域(包含背景以及阴影)均设为0,前景的白色(244-255)设置为255 th = cv2.threshold(fgmask.copy(), 244, 255, cv2.THRESH_BINARY)[1]#前景区域形态学处理 th = cv2.erode(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)), iterations = 2) dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8,3)), iterations = 2)#绘制前景图像的检测框 image, contours, hier = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours:#对轮廓设置最小区域,对检测结果降噪 if cv2.contourArea(c) > 1000: #获取矩形框边界坐标 (x,y,w,h) = cv2.boundingRect(c) cv2.rectangle(frame, (x,y), (x+w, y+h), (255, 255, 0), 2) cv2.imwrite("frame%d.jpg" % count, fgmask)#保存处理后的每一帧图片,JPEG格式的图片 #显示 cv2.imshow("mog", fgmask) cv2.imshow("thresh", th) cv2.imshow("diff", frame & cv2.cvtColor(fgmask, cv2.COLOR_GRAY2BGR)) cv2.imshow("detection", frame) count += 1 if cv2.waitKey(100) & 0xFF == ord('q'): break else: breakcamera.release()cv2.destroyAllWindows()
实验结果:
阅读全文
1 0
- 背景减除算法之K-Nearest(KNN)和Mixture of Gaussians(MOG2)
- 混合高斯模型和期望最大化算法(Mixture of Gaussians and the EM algorithm)
- 机器学习之KNN(k-nearest-neighbor)算法
- k-Nearest Neighbors(KNN)算法—程序和总结篇
- 混合高斯模型mixture Gaussians和EM算法
- k-近邻算法(k-Nearest Neighbor, kNN)
- k-近邻算法(k-Nearest Neighbor,KNN)
- KNN(k-nearest neighbor algorithm)算法
- KNN算法(K Nearest Neighbours)
- kNN算法 k-Nearest Neighbors algorithm
- KNN(K nearest neighbor)算法
- KNN(K-Nearest Neighbor)算法Matlab实现
- KNN(K-Nearest Neighbor)分类算法原理
- kNN(k-Nearest Neighbours)算法 原理
- kNN(K-Nearest Neighbor)算法简介
- 机器学习 cs229学习笔记2 (k-means,EM & Mixture of Gaussians)
- Clustering as a Mixture of Gaussians
- chapter2 机器学习之KNN(k-nearest neighbor algorithm)--K近邻算法从原理到实现
- 折半查找法
- 产品设计中的点线面法则
- Linux电源管理(12)_Hibernate功能
- JVM并发编程模型概览
- 微课堂迎圣诞送福利 | 姬十三@你:我想和你相聚社区共度圣诞良宵,约么?
- 背景减除算法之K-Nearest(KNN)和Mixture of Gaussians(MOG2)
- PMCAFF微课堂「已结束」 | 阿里资深运营揭秘电商运营与纯互联网运营的区别与互通
- 那些年送出去的交互方案-微博篇
- 翻译 | 2015年的最佳Material Design集锦 【上篇】
- 嘿,是时候重新认识下海淘了
- FAQ(11):Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot
- 问答专场 | 我是阿里巴巴无线创始人费杰,你有什么想问的?
- flask的web开发,用于机器学习(主要还是DL)模型的简单演示。
- Git的基本概念与入门