这三种背景减法有什么区别?
发布于 2016-03-12 04:03:20
您可以参考此链接。
为此目的,介绍了几种算法。OpenCV实现了三个这样的算法,非常容易使用。我们会一个接一个地见他们。
BackgroundSubtractorMOG 这是一种基于高斯混合的背景/前景分割算法。本文介绍了P. KadewTraKuPong和R. Bowden于2001年提出的一种改进的基于阴影检测的自适应背景混合模型。该方法利用K高斯分布(K =3~ 5)对每个背景像素进行建模。混合色的重量代表了这些颜色在场景中停留的时间比例。可能的背景颜色是那些保持更长和更静态的颜色。 在编写代码时,我们需要使用函数cv2.createBacklandSubtractorMonitor()创建一个背景对象。它有一些可选的参数,如历史长度、高斯混合数、阈值等,都设置为一些默认值。然后在视频循环中,使用backgroundsubtractor.apply()方法获取前景掩码。 下面是一个简单的例子: 进口numpy为np2进口cv2 3 4 cap =cv2。如果k == 27: 16破坏17 18 cap.release() 19 cv2.devyAllWindows,则输入numpy(‘vtest.avi’)5 6 fgbg =cv2.createBack基底减法组()7 8,帧= cap.read() 10 11 fgmask =fgbg.apply(帧) 12 13 cv2.imShow(‘vtest.avi’,fg掩膜)14k=cv2.warkey(30)& 0xff 15 (如果k==27:16破坏17 18 cap.release()19 cv2.dedeycap.release()) (所有结果都显示在最后以供比较)。 BackgroundSubtractorMOG2 它也是一种基于高斯混合的背景/前景分割算法。它基于Z.Zivkovic的两篇论文,2004年的“改进的自适应Gausian混合模型”和2006年的“背景减法任务的有效的每幅图像像素自适应密度估计”。该算法的一个重要特点是为每个像素选择合适的高斯分布数目。(记住,在最后一个例子中,我们在整个算法中采用了K高斯分布)。它提供了更好的适应性,以适应不同的场景,由于光照的变化等。 与以前的情况一样,我们必须创建一个背景减法器对象。在这里,您可以选择是否检测到阴影。如果detectShadows = True (默认情况下是这样的),它会检测和标记阴影,但会降低速度。阴影将被标记为灰色。 1导入np2 cv2 3 4 cap =cv2.视频捕获(‘vtest.avi’)5 6 fgbg =cv2.cap.release 2()7 8,而(1):9 ret,frame = cap.read() 10 11 fgmask =fgbg.apply(框架) 12 13 cv2.imShow(‘vtest.avi’,fg掩膜)14k=cv2.warkey(30)& 0xff 15如果k == 27: 16坏17 18 cap.release() 19 cv2.deyAllWindows() (最后给出的结果) BackgroundSubtractorGMG 该算法将统计背景图像估计和每像素贝叶斯分割相结合.它是由安德鲁·B·戈德贝( Andrew B. Godbehere )、松川明弘( Akihiro Matsukawa )、肯·戈德伯格( Ken Goldberg )在2012年发表的论文“可变照明条件下人类访客的视觉跟踪”中介绍的。根据论文,该系统运行了一个成功的交互式音频艺术装置,名为“我们在那里吗?”2011年3月31日至7月31日,加利福尼亚旧金山当代犹太博物馆。 它使用前几个(默认情况下为120)帧进行背景建模。它采用概率前景分割算法,利用贝叶斯推理来识别可能的前景对象。估计是自适应的;为了适应可变的光照,较新的观测比旧的观测要重得多。几种形态滤波操作,如关闭和开放,以消除不必要的噪音。你会得到一个黑色的窗口,在前几帧。 将形态学开度应用于噪声去除效果更好。 1导入np2 cv2 3 4 cap =cv2;视频捕获(‘vtest.avi’)5 6内核=cv2. cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)7 fgbg =cv2.create背景cv2.MORPH_OPEN(8 9);(1):10,frame = cap.read() 11 12 fgmask = fgbg.apply(frame) 13 fg掩膜=cv2.ologyEx(fg掩膜,cv2.MORPH_OPEN,内核) 14 15 cv2.imShow(框架,cv2.MORPH_OPEN,内核)如果k == 27: 18破坏19 20 cap.release() 21 cv2破坏cap.release()
在OpenCV、、GMG、和的更新版本中,在bgsegm子模块中的contrib (opencv-contrib-python==3.4.2.16)提供:
cv2.bgsegm.createBackgroundSubtractorGMG()
cv2.bgsegm.createBackgroundSubtractorMOG()https://stackoverflow.com/questions/33266239
复制相似问题