什么是目标跟踪:在图像中跟踪某个目标,说白一点,就是在图像内跟踪这个图像内的一个小图像。记住我说的这个图像和小图像的概念,那么我们开始了。

meanshift原理

meanshift的原理是根据概率密度的梯度爬升来寻找局部最优。

概率密度

想了解概率密度就得先了解什么是概率?

显然,这个概率就是图像内的某一像素点在小图像内的概率。

那么什么是概率密度?

不需要了解太多,因为我们只是需要概率密度来做个判断的媒介。

简单记住,概率较高的那片区域概率密度比较大。

比如上图,右上角的概率密度就比左下角的概率密度大。

梯度爬升

什么是梯度爬升?

根据上述的概率密度知识,现在我们要追踪这个小图像了,所以我们肯定是从概率密度小的地方追到概率密度大的地方嘛(毕竟概率密度越大,意味着这些像素点在小图像的概率越大,意味着小图像在图像这个概率越大),对不对~

用别的东西来举例一下梯度爬升吧

看看下面的点图,怎么找到点最集中的位置呢?

先随便找点圈一个圆,寻找圆内点最多的地方(称为质点),然后将圆心移动至该质点的位置,这样就完成了一个迭代。最终要迭代至圆心与质点重合或者圆心与质点的距离至少小于某个阈值。

将像素值转化为概率值

读完了上面两节,我们明白了现在的主要矛盾就是怎么将图像的各个像素点的像素值转化为概率值。 一旦转化为概率值后只要迭代梯度爬升自然就完成了目标追踪,一切问题迎刃而解!

转化方法:直方图反投影

我个人认为,直方图反投影这句话说的更具体一点应该是:图像的像素值根据小图像的归一化直方图反投影成概率值。

用一个例子来说明吧:

1.这是图像中的某一部分的像素值:

2.这是小图像的归一化直方图:

PS:不懂归一化直方图的可以看看这篇:《直方图》,或者csdn上随便找找哈。

3.那么根据小图像的归一化直方图转化来的图像部分变成了:

挺简单吧以上就是原理了~

OpenCv中的meanshift

import numpy as np
import cv2 as cv# 读取视频
cap = cv.VideoCapture('car.mp4')# 第一步:得到小图像的归一化直方图
ret,frame = cap.read()
x, y, w, h = 100, 325, 100, 50
roi = frame[y:y+h, x:x+w]                                                   # ROI也就是小图像了。
hsv_roi =  cv.cvtColor(roi, cv.COLOR_BGR2HSV)                               # 将ROI转化为HSV颜色空间
mask = cv.inRange(hsv_roi, np.array((0, 60,32)), np.array((180,255,255)))   # 去掉POI中颜色过亮或过暗的位置
roi_hist = cv.calcHist([hsv_roi],[0],mask,[180],[0,180])                    # ROI直方图
cv.normalize(roi_hist,roi_hist,0,180,cv.NORM_MINMAX)                        # ROI直方图归一化# 设置追踪窗口(第二步先备条件)
track_window = (x, y, w, h)
# 设置终止条件,可以是10次迭代,也可以至少移动1 pt(第二步先备条件)
term_crit = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1 )# 第二步,直方图反投影
while(1):ret, frame = cap.read()if ret == True:# 原始图像转HSVhsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)# 在ROI直方图归一化的基础上进行直方图反投影dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)# 应用meanshift来获取新位置ret, track_window = cv.meanShift(dst, track_window, term_crit)# 在图像上绘制追踪小图像的框框x,y,w,h = track_windowimg = cv.rectangle(frame, (x,y), (x+w,y+h), 255,2)cv.namedWindow('img', 0)cv.imshow('img',img)k = cv.waitKey(30) & 0xffif k == 27:breakelse:break

注意:上例代码中转化为HSV颜色空间了,这是因为要找到小图像肯定是根据颜色特征来找,而RGB颜色空间得用3通道才能表明颜色,而HSV颜色空间只需用单通道(H通道)就可以表示清楚颜色了。

以上是个人学习后的学习理解,若存在错误请指点!

因此禁止转载!若有需要请私信。

meanshift原理与代码详解相关推荐

  1. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  2. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  3. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  4. Pytorch|YOWO原理及代码详解(二)

    Pytorch|YOWO原理及代码详解(二) 本博客上接,Pytorch|YOWO原理及代码详解(一),阅前可看. 1.正式训练 if opt.evaluate:logging('evaluating ...

  5. batchnorm原理及代码详解

    转载自:http://www.ishenping.com/ArtInfo/156473.html batchnorm原理及代码详解 原博文 原微信推文 见到原作者的这篇微信小文整理得很详尽.故在csd ...

  6. 人脸识别SeetaFace2原理与代码详解

    人脸识别SeetaFace2原理与代码详解 前言 一.人脸识别步骤 二.SeetaFace2基本介绍 三.seetaFace2人脸注册.识别代码详解 3.1 人脸注册 3.1.1 人脸检测 3.1.2 ...

  7. Pytorch | yolov3原理及代码详解(二)

    阅前可看: Pytorch | yolov3原理及代码详解(一) https://blog.csdn.net/qq_24739717/article/details/92399359 分析代码: ht ...

  8. 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解

    KNN算法识别数字 一.KNN原理 1.1 KNN原理介绍 1.2 KNN的关键参数 二.KNN算法识别手写数字 2.1 训练过程代码详解 2.2 预测分类的实现过程 三.KNN算法识别印刷数字 2. ...

  9. Pytorch | yolov3原理及代码详解(一)

    YOLO相关原理 : https://blog.csdn.net/leviopku/article/details/82660381 https://www.jianshu.com/p/d13ae10 ...

最新文章

  1. Jenkins用户权限管理
  2. SAP R/3系统的R和3分别代表什么含义,负载均衡的实现原理
  3. Asp.net Core1.1创建简单WebAPI对Mongodb进行CRUD操作
  4. java ListString 转换成带逗号的字符串
  5. Sudo 授权需谨慎,否则脸上泪两行
  6. python程序设计基础实战教程_Python程序设计基础实战教程
  7. Django的分页器(paginator)
  8. 关于WinForm控件在asp.net中应用的问题。
  9. RyuBook1.0案例三:REST Linkage
  10. php 126怎么设置发送邮箱验证码,邮箱发送验证码(示例代码)
  11. win10远程桌面查看对方计算机名,详细教你win10远程桌面连接命令
  12. python爬虫方向的第三方库,Python网络爬虫方向的第三方库是
  13. 五、中枢背驰及盘整背驰
  14. ​分享 17 款你可能会用的上 Chrome 插件
  15. IuCS IuPS IuR IuB Uu接口
  16. TextView 字体中间加 横划线
  17. 渗透测试php过程,利用骑士cms的一次纠结的渗透测试过程(两个潜在
  18. 2022年施工员-市政方向-通用基础(施工员)考试题模拟考试平台操作
  19. 双曲三角函数图像及计算
  20. python统计分析方法

热门文章

  1. Spring Data MongoDB 多个条件或查询
  2. kodi 解码器 android,智能电视最强播放器—KODI常见使用技巧全方位解读
  3. 为了让师妹20分钟学会canvas,我熬夜苦肝本文外加一个小项目【❤️建议收藏❤️】
  4. 阿里云天池大赛——机器学习篇赛题解析(赛题一)下
  5. swagger首页空白
  6. golang $or $in $ge $gte 查询使用
  7. RK3568平台开发系列讲解(电源管理篇)RK809 电源管理芯片配置
  8. python元素分类_在python中对列表的元素进行分类
  9. springboot同时接受文件和多个参数
  10. IPV6----升级点,地址分类及部分协议配置