热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CVPR2010跟踪算法MOSSE原理及代码解析

文章和代码下载地址:MOSSE:DavidS.Bolme,J.RossBeveridge,BruceA.Draper,YuiManLui.VisualObject

文章和代码下载地址:

MOSSE: David S. Bolme, J. Ross Beveridge, Bruce A. Draper, Yui Man Lui. "Visual Object Tracking using Adaptive Correlation Filters." 

GitHub - xingqing45678/Mosse_CF(代码和文章都在里面)

看了网上很多文章,大都是说“两个信号越相似,其相关值越高。在跟踪,就是找到与跟踪目标响应最大的项。”然后将相关的公式摆出来,看得我一头雾水,可能是我自己的基础不太好吧,最后查了很多资料,总算感觉自己有点明白了,所以将其记录下来,如果有不对的地方请指正。


一、对2D相关的理解

首先,相关是相关,卷积是卷积,不要混为一谈!!!!

互相关是用来度量两个信号在某个时刻的相似程度,对于机器视觉领域来说就是指两个图像patch的互相匹配的程度。


1、相关操作

图像的相关公式:\small g=f\otimes h,其中h称为相关核(Kernel),具体到每一个像素表示为:

g(i,j)=\sum_{k,l}f(i+k,j+l)h(k,l)

注:此图为网上转载 ,如图所示,Input Image为输入的图像。Kernel为相关核 ,也可以称作我们提前训练好的滤波器模板。Output image即为输出响应图像。

步骤:

      (1)滑动核,使其中心位于输入图像的\small f(i,j)像素上

      (2)利用上式求和,得到输出图像的\small g(i,j)像素值

     (3) 充分上面操纵,直到求出输出图像的所有像素值

例:计算输出图像g(3,3)像素值为

\small g(3,3)=(-1)\times 7+(-2)\times 3+(-1)\times2+0\times3+0\times5+0\times1+1\times4+2\times3+1\times7=2


2、卷积操作

图像的卷积公式:g=f\star h,其中h称为卷积核(Kernel),具体到每一个像素表示为:

g(i,j)=\sum_{k,l}f(i-k,j-l)h(k,l)=\sum_{k,l}f(k,l)h(i-k,j-l)

注:此图为网上转载(然后我p了一下) ,如图所示,Input Image为输入的图像。Kernel为相关核 ,也可以称作我们提前训练好的滤波器模板。Output image即为输出响应图像。 

步骤:

      (1)将卷积核围绕中心旋转180度

      (2)滑动核,使其中心位于输入图像的\small f(i,j)像素上

      (3)利用上式求和,得到输出图像的\small g(i,j)像素值

      (4)充分上面操纵,直到求出输出图像的所有像素值

例:计算输出图像g(3,3)像素值为

\small g(3,3)=1\times 7+2\times 3+1\times2+0\times3+0\times5+0\times1+(-1)\times4+(-2)\times3+(-1)\times7=-2


3、差异:

(1)引用专业术语就是:Two-dimensional correlation is equivalent to two-dimensional convolution with the filter matrix rotated 180 degrees.

白话:卷积将核旋转了180度。

(2)物理意义:相关可以反应两个信号相似程度,卷积不可以。

(3)卷积满足交换律,\small f\star h=h\star f,相关不可以。

(4)卷积可以直接通过卷积定理(时域上的卷积等于频域上的乘积)来加速运算,相关不可以。


二、对相关滤波跟踪器的理解

相关滤波跟踪器就是通过互相关(cross-correlation)来定位目标当前帧所在位置的。响应图\small g最大值对应的位置即为当前时刻预测的目标位置,具体流程如下:

如果我们在时域内求解响应图,运算量巨大,那么如何利用卷积定理将其转换到频域???

用卷积来表示相关就是:

\small f (n)\otimes h(n)=f(n)\star h(-n)

利用卷积定理转换到频域为:

\small \mathbb{F}(g)=\mathbb{F}(f\otimes g)=\mathbb{F}(f)\odot \mathbb{F}(h)^{\ast }

简写为:

\small G=F\odot H^{\ast }

其中,\small \mathbb{F}(h(-n))=H^{\ast }\small \odot表示点乘。所以将我们的输入图像和滤波器通过算法变换到频域后,直接将他们相乘,然后再变换回时域(也就是图像的空域)就可以得到响应图。

几点重要的解释:

(1)输入的图像是指目标检测区域(MOSSE的检测区域就是目标所在区域),可能是像素值也可能是提取的特征(eg.Hog,CN,DeepFeatures等)。

(2)滤波器(或者叫目标模板)的大小和检测区域的大小一样。因为相同大小的矩阵在频率域才可以点乘计算。

(3)当滤波器稍微偏移就会超出输入图像的范围,则需要填充数据(这就是卷积的边界效应)。然而在实际的相关滤波跟踪算法中,因为代码中直接就写频域的计算公式,所以我们不知道是如何填充边界的。常用的有三种填充方法,补零、补边界像素、循环图像,matlab中fft默认的是第三种。


三、对MOSSE的理解

经过上面的解释,应该都能明白相关滤波的检测原理,响应图峰值的位置即为当前帧目标的预测位置。为了得到响应图,那么我们求出滤波器模板频域的表示值即可:

\small H^{\ast }=\frac{G}{F}


1、预处理(不重要,一般都会进行这些操作)

(1)FFT卷积算法需要将图像和滤波器映射到拓扑结构上,边界采用循环图像的方式填充,即将图像的左边缘连接到右侧边缘,将顶部连接到底部。这就是上面所说的第三种填充方法。

(2)周期卷积会对输入数据进行周期填补,引入一些artifacts。作者通过如下如下论文中的方法减弱对输出响应的影响D. S. Bolme, B. A. Draper, and J. R. Beveridge. Average of synthetic exact filters. In CVPR, 2009. 2, 3。(具体细节可以不用深究)

(3)采用点乘余弦窗处理,使图像边缘慢慢变成零。


2、MOSSE滤波

提高算法的鲁棒性,作者对视频第一帧的跟踪窗口施加随机的仿射扰动,产生多组图像对滤波器进行初始化:

\small \small H_{i}^{*}=\frac{G_{i}}{F_{i}}

注意上式是元素点除,作者通过最小二乘法来求解:

\small \min_{H^{\ast }} \sum_{i}|F_{i}\odot H^{*}-G_{i}|^{2}

求解过程我就不赘述了。经过一系列的推导,找到了Mosse滤波器的一个封闭解:

\small H^{*}=\frac{\sum_{i}G_{i}\odot F_{i}^{*}}{\sum_{i}F_{i}\odot F_{i}^{*}}

最后更新MOSSE滤波器如下:

\small H_{i}^{*}=\frac{A_{i}}{B_{i}}

\small A_{i}=\eta G_{i}\odot F_{i}^{*}+(1-\eta)A_{i-1}

\small B_{i}=\eta F_{i}\odot F_{i}^{*}+B_{i-1}

原理解释还可以参考博客:相关滤波跟踪(MOSSE)_autocyz-CSDN博客_相关滤波

代码解释介绍参考博客:MOSSE 目标跟踪 解析_Fying2016的博客-CSDN博客_mosse目标跟踪


推荐阅读
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • 解析Java虚拟机HotSpot中的GC算法实现
    本文探讨了Java虚拟机(JVM)中HotSpot实现的垃圾回收(GC)算法,重点介绍了根节点枚举、安全点及安全区域的概念和技术细节,以及这些机制如何影响GC的效率和准确性。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
author-avatar
手机用户2502925983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有