经典的数据结构问题,在算法导论堆排序的思考题中出现过这种结构的排序求解问题,该问题解法多样,很适合学习。
LeetCode_407: Trapping Rain Water II
一道很有意思的题目,题目是计算容器雨水积累量,实际上是利用广度优先搜索来不断收缩边界,计算雨水的积累。由于博主之前图一类的题目接触的比较少,这道题目看了一眼答案。这篇博客除了介绍这道题目本身,还将介绍stl中的优先队列priority queue,优先队列是广度优先搜索(BFS)必要的辅助。作为编程辅助,后面还顺便介绍了C++11的花括弧初始化。
图像跟踪(九)FCNT语义跟踪
刚有一个idea,用语义分割来做图像跟踪,搜了一下发现已经有人做过了,细细的看了下Paper,和自己相当还不一样。FCN是深度学习语义分割的鼻祖,而这片Paper的名字叫做FCNT,看了之后发现我误会了,此FCN非彼FCN,由于是比较早的算法了,性能和MEEM处于同一层次,不过考虑到这是深度学习方法用于跟踪的重要实践,还是做个笔记好了。
博主认为图像跟踪过程的本质就是语义的跟踪(我是这么理解的),所以,使用语义分割来完成图像跟踪是自然而然想到的。事实上深度学习用于图像跟踪,也就是利用了其深层特征中的语义信息。这篇博客就主要介绍这篇文献:Visual Tracking with Fully Convolutional Networks。
LeetCode_057: Insert Interval
这道题就是区间插入问题,目前看到的解法主要有三种,一种是直接分析区间重叠,具有O(n)时间和O(n)空间复杂度,另一种是用二叉搜索树来做,还有一种是借助了STL库中的equal_range方法来做,写法比较优雅。这篇博客主要给出第一种解法和第三种解法的代码
LeetCode_164: Maximum Gap
经典的线性时间排序问题,题目标签是hard,主要是要求了线性时间内解决问题,那么很自然想到基数排序和桶排序了。除此之外还有一种常用的线性时间排序,计数排序可以看做间隔为1的桶排序,在数字比较集中且可转化为整数时比较有效,因此计数排序不适合本题目。
LeetCode_274: H-index
H指数的计算,这道题是典型的排序思路,博主第一次使用一般的排序方法写,后来发现整数这种用基数排序更合适,同时需要考虑很多特例,博主贴了这两份代码。由于测试案例的原因,基数排序速度上的优势没有体现出来。
目标跟踪VOT2016 BenchMark评价标准介绍
现在比较流行的跟踪Benckmark有OTB、VOT、KITTI-tracking,之前的算法测试都进行在OTB(Visual Tracker Benckmark)上,考虑到现在VOT的流行程度不亚于OTB,并且VOT每一年都会有更新。VOT16并没有更新图像数据,而是更新了标注的方法。这篇博客主要介绍VOT的评价方法,会结合实验数据介绍官方SDK的代码。
算法导论总结(一)之排序C++
博主之前刷过一遍《算法导论》(Introduction to Algorithms),但是看得多写得少,于是最近抽空动手写写下里面的算法。排序是经典问题了,于是决定将书中的排序算法一一使用C++实现。这篇博客一方面是对排序算法本身的总结(这个书上都有啦),另一方面是博主在使用C++实现算法时的一些体会,更多的是算法细节,希望有助于加深对算法的理解的。
Sublime中设置Protobuf语法支持
Sublime是一款优秀的编辑器,强大的拓展使得数十种语法的高亮提示和自动补全成为可能。Protobuf谷歌的数据交换格式,独立于语言,非常易用。在Sublime中可以通过扩展插件的方式设置Proto文件的语法高亮,这对于常常使用Protobuf的开发者有很大帮助。
Leetcode_524: Longest Word in Dictionary through Deleting
笔记:Leetcode 524 Longest Word in Dictionary through Deleting,分类是sort, two pointer,博主的解法比solution中10行的要快一点,事先对词典进行排序,在词典规模大时,博主解法更有优势。
图像跟踪(八)结构化SVM:Struck与SSVM
结构化SVM方法用于跟踪,带来了速度和效果的提升。之前我有一篇讲Struck的博客,但是感觉这个算法没有讲透彻,决定捎带上SSVM再开一篇争取把问题讲清楚。结构化SVM和传统SVM方法相比,有着强大的判别能力,这篇博客将带大家一探结构化SVM在tracking上的应用。
同样是结构化SVM方法,Struck在2015年Pami中进一步加入尺度估计和GPU加速,使得Struck也具有相当的实用性。SSVM与Struck都是结构化预测框架,主要不同在于Struck采用SMO优化迭代求解,而SSVM采用DCD方法求闭式解,使得SSVM在速度上体现优势。
动画制作:MATLAB制作gif,PhotoShop制作gif
gif动画易于制作,相对于视频更小,更易于传播。作为一个程序猿,在使用程序绘图过程中想生成gif动画,可以使用MATLAB生成。当然,MATLAB生成gif动画存在局限性,专业的PhotoShop可以满足你的需要,这篇博客将专门介绍gif动画的制作。
Object Visual Tracker Benchmark 使用教程
2013年Object Visual Tracker Benchmark的提出是视频图像跟踪另一的大事件,自此视频跟踪领域有了公认的Benchmark,跟踪方面的研究与以前已经完全不一样的。虽然下载源码,摸索之后都可以看懂,但是博主还是想系统的介绍其中的工具。官方的SDK可以极大的帮助我们评估算法,产生一些可以直接出现在Paper上的图表。
这篇博客主要介绍如何Visual Tracker Benchmark 中提供的Matlab代码,希望能有所帮助。Python的可以看那些开源的demo,差不多一样的思路。
图像跟踪(六)SRDCFdeno算法:样本净化
SRDCFdeno算法的论文中提出了一种净化样本的方法,虽然挂了SRDCF的名字,但是SRDCF只是BaseLine。这种样本净化的方法可推广性非常强,因为把样本权重融合进了Loss函数,直接在更新样本的时候更新其权重,相对于多专家系统的方法,我更推荐使用这种方法来净化样本。
图像跟踪中像素误差、重叠率、AUC的计算:Matlab实现
视频图像跟踪算法的评估常常需要计算重叠率(Overlap Rate)、像素误差(Pixel Error)还有AUC(Area Under Curve)。这些技术指标都比较好理解,如果不理解的话可以参见我之前的博客。这篇博客主要就是贴上Matlab的代码,使用Matlab计算这些参数,并绘制出曲线图。
如果你是想放在Paper中的话,可以下载Visual Track BenchMark中提供的代码,可以画出和Paper上一样的样式,这篇博客只是博主对单个视频自己写的小demo,便于自己分析实验的,如果要在Paper使用还需要做样式的修改。
Matlab使用interp2裁剪倾斜(旋转)矩形块
在图像处理中,我们常常需要裁剪出图像中的一个矩形块,matlab提供的imcrop函数可以裁剪出矩形块,但是如果我们想裁剪倾斜的矩形块,该函数将无能为力。于是博主贡献了自己的代码。