摘要: Lucas-Kanade算法广泛用于图像对齐、光流法、目标追踪、图像拼接和人脸检测等课题中。一、核心思想给定一个模板和一个输入,以及一个或多个变换,求一个参数最佳的变换,使得下式最小化在求最优解的时候,该算法假设目前的变换参数已知,并迭代的计算的增量,使得更新后的能令上式比原来更小。则上式改写为:二、算法流程1.初始化参数向量2.计算及其关于导数,求得参数增量向量3.更新,4.若小于某个小量,即当前参数向量基本不变化了,那么停止迭代,否则继续2,3两步骤。三、具体做法对做一阶泰勒级数展开,则目标函数变为:对其求导,并令导数为0,得到下式:对上式中的求解即可,得到的是的解析解:其中,四、Luca 阅读全文
posted @ 2014-03-17 10:59 handspeaker 阅读(16592) 评论(0) 推荐(1) 编辑
摘要: 由于过年玩得比较爽,回来之后又一直忙于公司实习和毕业答辩等事情,所以还没有好好总结自己的2013。但是,写年终总结是个好习惯,虽然现在有点迟,都已经是14年的3月份了。也算是为需要的人分享经验,同时也是给自己的经历做个记录。1.概述先说个人情况,男,北京bupt硕士,2年半制,2014年春毕业。本科和硕士专业都是通信工程相关,不过现在通信行业俨然已经没落了,所以硕士期间的研究方向和找工作投的岗位基本没考虑通信,都是计算机、互联网方向的。研究方向算是跟图像处理、模式识别、android开发吧,其他的零碎的例如数据库、python也搞过,不过很少。平时经常用C++,Java和Matlab。总的来说 阅读全文
posted @ 2014-03-13 15:52 handspeaker 阅读(16449) 评论(2) 推荐(4) 编辑
摘要: 因为从文件读取图像到Bitmap是一件比较费时的事情,所以研究了一下几种可行的办法,并做了对比。首先解释一下为什么耗时,这是因为,在从jpg或者png文件中读取Bitmap时,一来需要对外存进行操作并且图像文件一般都比较大,二来在创建Bitmap时,基本都需要对原始图像做操作,例如:降采样、剪切、旋转等等。所以如何高效的读取图片并呈现出来,是一个很值得研究的问题。根据我的想法,大致想出了3种方案:1.在当前的UI线程直接读取并操作图像,然后呈现。2.新开一个子线程读取并操作图像,然后利用Bundle中Serializable的相关方法将其传回UI线程并呈现。3.其他做法与2一样,但是利用的是B 阅读全文
posted @ 2014-03-07 15:33 handspeaker 阅读(7625) 评论(0) 推荐(0) 编辑
摘要: Viola Jones Face Detector是Paulviola和MichaelJJones共同提出的一种人脸检测框架。它极大的提高了人脸检测的速度和准确率。速度提升方面:利用积分图像来提取图像特征值,所以非常快。同时,利用adaboost分类器的特征筛选特性,保留最有用特征,这也减少了检测时的运算复杂度。准确率提升方面:将adaboost分类器进行改造,变成级联adaboost分类器,提高了人脸检测的准确率(降低漏检率和误检率)。首先介绍几个术语:检测率:存在人脸并且被检测出的图像在所有存在人脸图像中的比例。漏检率:存在人脸但是没有检测出的图像在所有存在人脸图像中的比例。误检率:不存在 阅读全文
posted @ 2013-10-23 14:06 handspeaker 阅读(19721) 评论(3) 推荐(0) 编辑
摘要: 2015.7.2更新由于很多人要代码,我把代码下载链接放在这里了。不过还是要说一下,surfaceTexture和OpenGL ES结合才能发挥出它最大的效果,我这种写法只是我自己的想法,还有很多种解决方法,如果大家学习一下OpenGL ES,会发现更多有意思的东西。SurfaceTexture是从... 阅读全文
posted @ 2013-10-07 18:35 handspeaker 阅读(61101) 评论(18) 推荐(3) 编辑
摘要: Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。这个特征名字起的也很直白,就是说先计算图片某一区域中不同方向上梯度的值,然后进行累积,得到直方图,这个直方图呢,就可以代表这块区域了,也就是作为特征,可以输入到分类器里面了。那么,接下来介绍一下HOG的具体原理和计算方法,以及一些引申。1.分割图像因为HOG是一个局部特征,因此如果你对一大幅图片直接提取特征,是得不到好的效果的。原理很简单。从信息论角度讲,例如一幅640*480的图像,大概有30万个像素点,也就是说原始数据有30万维特征,如果直接做HO 阅读全文
posted @ 2013-08-06 22:11 handspeaker 阅读(45008) 评论(21) 推荐(6) 编辑
摘要: 最近在工作中遇到了一些问题,总结下来就是Android中Rect这个类造成的。不得不说,不知道Android SDK的开发人员是怎么想的, 这个类设计的太奇葩了。首先介绍一下Rect类:Rect类主要用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作。这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom),你也可以获取一个Rect实例的Width和Height。就在这里,奇葩的事情来了,作为一个有一点经验的做图像或者矩阵运算或者编程的程序员来说,大家的共识是,如果一个矩阵是MxN的,也就是M行N列,那么行号是[0,M-1],列号是[0,N-1]。可是奇葩 阅读全文
posted @ 2013-07-14 18:48 handspeaker 阅读(42968) 评论(1) 推荐(2) 编辑
摘要: 在一个外国网站上看到一段YUV转RGB的程序很不错,根据维基上的知识,方法应该是没问题的,自己也用过了,效果没问题。首先说一下android上preview中每一帧的信息都是YUV420的,或者叫NV21,又或者叫YCbCr_420_SP (NV21),反正这么个东西呢,Y,U,V三个分量的数量比是4:1:1.也就是说每四个像素共用一对UV。举个例子,如果是一个30*40的帧,那么有1200个Y分量,分别有300个U和300个V分量。总共有1200*1.5这么多个值。如果调用android中的onPreviewFrame(byte[] data,Cameracamera)这个方法,data就是 阅读全文
posted @ 2013-06-21 10:59 handspeaker 阅读(12888) 评论(0) 推荐(0) 编辑
摘要: 主成分分析与白化,这部分很简单,当然,其实是用Matlab比较简单,要是自己写SVD分解算法,足够研究好几个月的了。下面是我自己实现的练习答案,不保证完全正确,不过结果和网站上面给出的基本一致。1.PCA in 2D1.1Step 1a: Implement PCA to obtain Uu = zeros(size(x, 1)); % You need to compute thissigma = x * x' / size(x, 2);[u,s,v]=svd(sigma);1.2Step 1b: Compute xRot, the projection on to the eige 阅读全文
posted @ 2013-06-19 22:35 handspeaker 阅读(3467) 评论(3) 推荐(0) 编辑
摘要: 之前看过Andrew NG大神写的UFLDL教程,觉得很不错,不过一直比较懒,没有动手做里面的练习,最近做了一下,感觉很有意思。下面是《稀疏自编码器》和《矢量化编程实现》这两节我自己实现的练习答案,不保证完全正确,不过结果和网站上面给出的基本一致。稀疏自编码器step1在sampleIMAGES.m文件中完成生成训练集的代码,如下,tic和toc用来计时的:ticimage_size=size(IMAGES);i=randi(image_size(1)-patchsize+1,1,numpatches);j=randi(image_size(2)-patchsize+1,1,numpatche 阅读全文
posted @ 2013-06-08 17:26 handspeaker 阅读(12341) 评论(5) 推荐(2) 编辑