计算机视觉项目实战-背景建模与光流估计(目标识别与追踪)_计算机视觉在不同光源下采集数据的像素值变化的规律

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

😊😊😊欢迎来到本博客😊😊😊
本次博客内容将继续讲解关于OpenCV的相关知识
🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉python网页爬虫、机器学习、计算机视觉(OpenCV)、群智能算法、深度学习等内容。以后可能会涉及到网络安全相关领域,毕竟这是每一个学习计算机的梦想嘛!
📝目前更新:🌟🌟🌟目前已经更新了关于网络爬虫的相关知识、机器学习的相关知识、目前正在更新计算机视觉-OpenCV的相关内容。

💛💛💛本文摘要💛💛💛

计算机视觉项目-背景建模 在这里插入图片描述

文章目录

|

在这里插入图片描述
这里我准备用自己的一个投篮来做试一下这个小项目!后期会做出结果。本来是要做视频的结果没有办法,总显示数据不存在,大家简单的看一下就好。

⭐️项目前言

熟悉OpenCV的小伙伴们都知道一点就是视频是由一帧一帧的图像组合而成,那么当我们传进来一个摄像头录制的图像的时候(因为摄像头录制的较为稳定),我们是不是也可以做这样的一件事:检测到那些物体或者说那些人在运动,那些物体没有在运动。也就是我们所谓的哪些是前景,那些是背景。那么我们就来具体看看背景建模都有那些方法。

⭐️背景建模-帧差法

首先我们来讲一下什么是帧差法:由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续两帧或者三帧图像进行像素值差分运算,不同帧对应的像素值进行相减,判断灰度值的绝对值。当绝对值超过了一定的阈值之后,既可以判断成运动目标,从而实现运动的目标检测功能。
在这里插入图片描述
在这里插入图片描述

侦差法非常简单,但是会引入噪音,和一些空洞问题。很明显两帧图像背景的部分,不可能像素值一点不变,变一点计算机都是可以识别的,所以他一定会出现一些噪音点,比如上方的图像就是出现了人的周围也出现了很多的噪音点。还有一个就是空洞问题,那么什么是一个空洞问题呢,就是上方图像中整个人都是在运动的,但是由于两帧图像中人移动的很小,把自己身体部分一部分一直处于一个黑色的状态,导致人体内部都是黑色的。没有识别出来。

⭐️背景建模-混合高斯模型

流程总览:在进行前景检测前,先对背景进行训练,对图像的每一个背景都进行一个混合高斯模型进行模拟,每个背景的混合高斯的个数可以自适应。对于新来的像素值进行GMM匹配,如果该像素数值能够匹配其中一个高斯模型,那么就可以认为是背景,否则认为是前景,由于整个过程GMM都在不断更新学习的过程,所以对于动态背景该算法也具有一定的鲁棒性,最后通过一个有树枝摇摆的动态背景进行前景检测,会取得较好的结果。
首先我们先来看一下什么是高斯模型:
高斯模型
对于像素值中的一个点的展示是这样:
在这里插入图片描述
背景的实际分布应当是多个高斯分布混合在一起,每个高斯模型也可以带有权重。
这里我们来具体说一下为什么说是混合高斯模型,为什么要混合呢?因为当你拿到一帧图像的时候,不可能在这个图像当中就一个背景的,可能有天空,可能有绿地,可能有具体的事物。那么这些背景的对应的高斯模型都是不相同的,那么就需要混合高斯模型来做这一件事。天空这个背景对应第一个高斯模型,草地这个背景对应第三个高斯模型。都被匹配上了,那么我们就认为他是一个背景,如果都没有被高斯模型匹配上,那么我们就认为他是一个运动的。
在这里插入图片描述
这里面就描述了两个高斯模型。
在这里插入图片描述
混合高斯模型学习方法

  1. 首先初始化每个高斯模型矩阵参数。
    这里我们初始化每一个高斯模型矩阵。比如我们拿到了第一个像素点的数值是100,然后对应的均值差默认值是5。
  2. 取视频中T帧数据图像用来训练高斯混合模型。来了第一个像素之后用它来当做第一个高斯分布。
    我们取得不是一帧图像,而是多帧,一般我们取值在200帧左右,第一帧的第一个像素点取完之后呢,然后我们取第二帧的第一个像素点,得到像素值是105,然后计算一下105-100=5<3*均值差=15。然后我们就把105归为这个高斯模型。
  3. 当后面来的像素值时,与前面已有的高斯的均值比较,如果该像素点的值与其模型均值差在3倍的方差内,则属于该分布,并对其进行参数更新。
  4. 如果下一次来的像素不满足当前高斯分布,用它来创建一个新的高斯分布。
    当第三帧图像来的时候,像素值假如是180,那么180-105=75>3*5,那么我们这个时候就要创建一个分布。

一般来说,我们创建的分布设定在3-5个就OK!
对于混合高斯模型来说,他有一个学习更新的过程。所以他要比帧差法要强很多。
在测试阶段,对于新来的像素点的数值,混合高斯模型中的每一个均值比较,如果差值在二倍的方差之间的话就可以认为他是一个背景,否则认为是前景。将前景赋值为255,背景赋值为0。这样就形成了一副前景二值图。

⭐️混合高斯模型背景建模实战

首先我们来看了一下官方标准案例。他是做了一个摄像头下的人物走动的视频,然后使用混合高斯模型进行背景建模。我们来看一下代码。

这里导入第三方库。

import numpy as np
import cv2

然后将视频导入,建立一个卷积核,并且创建混合高斯模型用于背景建模。

cap = cv2.VideoCapture('test.avi')
#形态学操作需要使用
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
#创建混合高斯模型用于背景建模
fgbg = cv2.createBackgroundSubtractorMOG2()

cv2.getStructuringElement这个函数的第一个参数表示内核的形状。共有三种。

  1. 矩形:MORPH_RECT;
  2. 交叉形:MORPH_CROSS;
  3. 椭圆形:MORPH_ELLIPSE;

mog = cv2.createBackgroundSubtractorMOG2(history,varThreshold,false);这个函数来说。

  1. history:用于训练背景的帧数,默认帧数为500帧,如果不动手设置learingRate,history就被用于计算当前的learningRate, 此时history越大,learningRate越小,背景更新越慢;
  2. varThreshold:方差阈值,用于判断当前像素是前景还是背景。一般默认为16,如果光照变化明显,如阳光下的水面,建议设为25,值越大灵敏度越低。
  3. detectShadows:是否检测影子,设为true为检测,false为不检测,检测影子会增加程序时间复杂度,一般设置为false;

然后mog->apply(src_YCrCb, foreGround, 0.005);

  1. image 源图
  2. fmask 前景(二值图像)
  3. learningRate 学习速率,值为0-1,为0时背景不更新,为1时逐帧更新,默认为-1,即算法自动更新;

然后进入循环

while(True):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    #形态学开运算去噪点
    fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
    #寻找视频中的轮廓
    contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

首先我们先来ret, frame = cap.read()用于摄像头或视频文件中,捕获帧信息。返回的两个值分别是:

  • ret 是返回的捕获到的帧,如果没有帧被捕获到,则该值为空。
  • frame表示帧捕获是否成功,如果成功,retval为True,失败为False。

然后利用cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel开运算。
在进行膨胀操作的时候我们介绍到了这个:
1.图像被腐蚀后,去除了噪声,但是会压缩图像。
2.对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原有形状。

*开运算(image)=膨胀(腐蚀(image))*

在这里插入图片描述
开运算就是先把图像进行腐蚀操作,然后进行膨胀操作的一个过程!
在这里插入图片描述

如果我们对于有噪声的图像单独的进行腐蚀操作,就会对图像进行压缩,如果我们想要恢复到原始图像就要进行相同程度上的膨胀,这个操作我们就成为开运算。

🌔开运算操作函数介绍
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

img:原始图像
cv2.MORPH_OPEN:表示进行开运算,相同的我们所知道的还有闭运算。
kernel:卷积核,同样我们对开运算的卷积核要进行设定。
然后contours, hierarchy = cv2.findContours这里是寻找轮廓,这里注意的是新的版本返回的是两个数值,旧的版本是3个数值。

for c in contours:
        #计算各轮廓的周长
        perimeter = cv2.arcLength(c,True)
        if perimeter > 188:
            #找到一个直矩形(不会旋转)
            x,y,w,h = cv2.boundingRect(c)
            #画出这个矩形
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)  

遍历每一个轮廓,然后计算轮廓的周长,进行筛选如果周长的数值大于188,那么我们把这个矩阵给画出来。

cv2.imshow('frame',frame)
    cv2.imshow('fgmask', fgmask)
    k = cv2.waitKey(150) & 0xff
    if k == 27:
        break
 
cap.release()
cv2.destroyAllWindows()

然后这里就结束了。我们来看一下视频。

这个是项目中的视频的结果。然后我们继续做一下开头投篮的一个背景建模视频。

在这里插入图片描述

这里和官方视频有很大的差距,分析了一下主要原因是由于我们手工录制的视频他一直在发抖,摄像头一直在抖动,稳定性不高导致的背景中的噪音点较多,但是我们去掉这个缺陷之后呢,可以看到运动中的篮球和人物展示的效果都是非常不错的。篮球在空中飞的过程中刻画的也是非常的清晰。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

-gMu8LkYS-1715834165146)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《halcon机器视觉算法原理与编程实战.pdf》是一本介绍Halcon机器视觉算法原理和编程实践的书籍。Halcon是一种功能强大的机器视觉软件库,广泛应用于工业自动化、医疗影像、质量检测等领域。 该书首先介绍了机器视觉算法的基本原理,包括图像预处理、特征提取、模式匹配等常用技术。然后扩展到更高级的视觉算法,如3D视觉建模、图像分割、深度学习等。书中不仅介绍了算法的原理,还提供了大量的代码实例和详细的算法流程,帮助读者理解和掌握Halcon编程。 此外,该书还重点介绍了Halcon软件的特点和应用案例。Halcon具有丰富的图像处理函数和工具,支持多种编程语言和平台,使得开发者可以根据实际需求进行开发和集成。书中通过实例演示了工业自动化、医疗影像等领域的应用案例,指导读者如何使用Halcon实现实际的项目。 总之,《halcon机器视觉算法原理与编程实战.pdf》通过结合理论和实践,详细介绍了Halcon机器视觉算法的原理和编程技巧。读者可以通过学习该书,了解Halcon的功能和应用场景,掌握机器视觉算法的基本原理和实现方法,从而应用于实际项目中。 ### 回答2: 《halcon机器视觉算法原理与编程实战.pdf》是一本介绍Halcon机器视觉算法原理以及编程实践的书籍。Halcon是一款功能强大的机器视觉开发工具,可用于图像处理、模式识别、测量等领域。 该书首先介绍了Halcon机器视觉的基本原理,包括图像采集与处理、特征提取与匹配、几何变换等内容。通过理解这些基本原理,读者可以建立起对Halcon机器视觉工具的理论框架。 其次,该书还深入探讨了Halcon机器视觉的编程实践。通过具体的案例分析,读者可以学习如何使用Halcon的编程接口进行图像处理与分析。书中的案例包括图像的预处理、目标的检测与定位、物体的测量与识别等,涵盖了Halcon机器视觉算法的各个方面。 此外,该书还介绍了Halcon机器视觉应用的一些相关技术和工具,如图像采集与处理设备、视觉传感器、光源控制等。这些内容有助于读者更好地理解和应用Halcon机器视觉算法。 总体而言,《halcon机器视觉算法原理与编程实战.pdf》是一本适合机器视觉从业者和学习者的实用参考书籍。通过学习该书,读者可以深入了解Halcon机器视觉算法的原理,并学会如何使用Halcon进行编程实践,从而提高机器视觉算法在实际应用中的能力和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值