ViBe:基于Python实现的加速版(2019.10)

针对ViBe算法Python实现的效率问题,本文介绍了如何通过使用numpy库进行优化,以提高初始化速度,实现更接近实时的效果。分享了从C++版本汲取灵感并结合社区智慧的改进方案。
摘要由CSDN通过智能技术生成

网络上流行的ViBe算法的python实现版本运行速度非常慢,根本达不到实时的目的;而论文作者提供的C++版本则速度超快。借鉴一些网络上的说法改成numpy来操作速度更快,有些大佬也给出了新的思路。新的代码初始化速度有明显提升,记录于此。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 11 13:19:31 2019
升级版vibe(速度更快)
@author: youxinlin
"""

import numpy as np
import cv2


class ViBe:
    '''
    ViBe运动检测,分割背景和前景运动图像
    '''
    def __init__(self,num_sam=20,min_match=2,radiu=20,rand_sam=16):
        self.defaultNbSamples = num_sam            #每个像素的样本集数量,默认20个
        self.defaultReqMatches = min_match          #前景像素匹配数量,如果超过此值,则认为是背景像素
        self.defaultRadius = radiu                  #匹配半径,即在该半径内则认为是匹配像素
        self.defaultSubsamplingFactor = rand_sam    #随机数因子,如果检测为背景,每个像素有1/defaultSubsamplingFactor几率更新样本集和领域样本集
    
        self.background = 0 
        self.foreground = 255
    
    def __buildNeighborArray(self,img):
        '''
        构建一副图像中每个像素的邻域数组
        参数:输入灰度图像
        返回值:每个像素9邻域数组,保存到self.samples中
        '''
        height,width=img.shape
        self.samples=np.zeros((self.defaultNbSamples,height,width),dtype=np.uint8)
        
        #生成随机偏移数组,用于计算随机选择的邻域坐标
        ramoff_xy=np.random.randint(-1,2,size=(2,self.defaultNbS
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值