一些知识点的初步理解_9(独立成分分析-ICA,ing...)
摘要:独立成分分析(后面都用ICA代替)在维基百科中的解释是:一种利用统计原理进行计算的方法它是一个线性变换。这个变换把数据或信号分离成统计独立的非高斯的信号源的线性组合。独立成分分析是盲信号分离(Blind source separation)的一种特例。 可以感性上对比下ICA和PCA的区别,PCA是将原始数据降维并提取出不相关的属性,可以参考前面博文的介绍:PCA算法学习_1(OpenCV中PCA实现人脸降维)和PCA算法学习_2(PCA理论的matlab实现),而ICA是将原始数据降维并提取出相互独立的属性。我们知道两个随机变量独立则它们一定不相关,但2个随机变量不相关则不能保证它...
阅读全文
posted @
2012-12-30 16:51
tornadomeet
阅读(12909)
推荐(0) 编辑
PCA算法学习_2(PCA理论的matlab实现)
摘要:前言 在前面的博文PCA算法学习_1(OpenCV中PCA实现人脸降维)中已经初步介绍了PCA算法的大概流程及在人脸降维上面的应用。本文就进一步介绍下其理论基础和matlab的实现(也是网上学者的代码)。 开发环境:Matlab2012a 基础 假设X是一个m*n的矩阵,是由样本数据构成的矩阵。其中m表示样本的属性维数,n表示样本的个数。现在要对X进行线性变换变成另一个矩阵Y,使得Y的协方差矩阵为对角矩阵,这样的Y就认为是对原始矩阵X提取主成分后的矩阵,实际过程中只需取Y的前面主要的行即可。 X变换到Y的线性变换公式为: X和Y的协方差计算方法为: 从下面的公式可...
阅读全文
posted @
2012-12-30 11:24
tornadomeet
阅读(46053)
推荐(4) 编辑
Matlab成长之路_4(关于matlab的cell)
摘要:前言 Matlab中的cell数据类型有点类似于矩阵,不过它比矩阵更灵活,矩阵中的所有元素只能是同一种数据类型,而cell中的元素类型可以是不同的数据类型,几乎涵盖了matlab中的所有类型,比如说数值,字符,数组,struct甚至cell本身等。Cell应用很广,你可以将其理解成一个排列顺序的功能强大的结构体,可以用来存储各种变量。 开发环境:Matlab2012a 实验基础 访问cell中元素时,可以使用大括号或者小括号。如果使用大括号的话,则每个元素按照自己的形式赋值。如果采用小括号赋值,则所赋的值需要被大括号括起来。如果在终端直接输入cell变量,则是看不到其内部值的,只能...
阅读全文
posted @
2012-12-27 16:35
tornadomeet
阅读(6580)
推荐(2) 编辑
基础学习笔记之opencv(24):imwrite函数的使用
摘要:前言 OpenCV中保存图片的函数在c++版本中变成了imwrite(),这应该是向matlab中图像处理的的一些函数风格靠近吧。保存图片这个功能还是很重要的,比如说在写科研论文的时候需要把一些中间图片给贴出来,这样就可以在程序中间利用该函数保存图片了。甚至还可以将这些保存的图片供后续的matlab处理。本文就简单介绍下OpenCV中imwrite()函数的用法。不过个人感觉这个函数功能还是不够强大,使用时有很多限制。 开发环境:QtCreato2.5.1+OpenCV2.4.3 实验基础 本次实验主要是测试imwrite()函数的2个功能: 1. 测试其是否能够保存Mat图像中...
阅读全文
posted @
2012-12-26 16:36
tornadomeet
阅读(127331)
推荐(2) 编辑
Matlab成长之路_3(将1维向量显示成直方图)
摘要:前言 有时候在c/c++中得到了某一张图片的直方图,比如说在OpenCV中,计算出图像的直方图后一般是保存在Mat里面,其实通过数据查看,这个Mat就是一个列向量,即一个vector,本来也可以使用c/c++的方法来画图的,只是那样有各种需要标注啊,箭头啊,颜色啊等都不方便,特别是如果要写paper的话,一般都不会选择使用c/c++来画,很多人都选择在matlab中画图,首先是将c/c++中的数据以某种形式导出来,然后再使用matlab。本文中就是将OpenCV中的直方图结果保存为图片导出来,然后对这张图片使用Matlab函数画出它的直方图分布。 开发环境:matlab2012a 实...
阅读全文
posted @
2012-12-24 12:56
tornadomeet
阅读(4950)
推荐(0) 编辑
论文写作心得:1(用Endnote批量处理论文中所需参考文献的格式)
摘要:本文使用的工具是:Endnote X5 如果需要对某一篇论文的所有参考文献按照某一规则排列好,必须先使用Endnote编辑好一种文献Style。这里的步骤是: 1. 打开界面:Edit->Output Styles->Open Styles Manager,如下图所示: 2. 在Name那一列找到与自己所需要Style最相近的那一个选项。因为这里的Style太多,可以选择中间右下角的Find by选择和自己论文相关的领域,比如我这里在Find by里面选择Engineering,显示列表大大减小,如下图所示: 3. 然后点击Edit对该格式进行修改,我这里选择IEEE的St...
阅读全文
posted @
2012-12-20 21:59
tornadomeet
阅读(17845)
推荐(1) 编辑
Matlab成长之路_2(将2维图片显示成3维图形)
摘要:前言 有时候为了将一张图片以3维的形式显示出来,可以采用matlab的强大绘图功能。这里的3维其中的两维当然就是图片的xy坐标了,第3维就是图片中对应坐标点的像素值。例如,在c/c++编程时有可能会遇到生成了一张跟概率密度相关的图片,现在需要将其可视化,看它到底长什么样,这时候就需要用到这个功能。本节就简单实现一下这个。 开发环境:matlab2012a 实验基础 可以使用mesh函数实现,mesh函数是用来画曲面的网格表面的。 也可以使用surfl函数来实现,surfl是用来画光滑的曲面的。 有时候在matlab编程时会出现如下错误: 即:Subscript ind...
阅读全文
posted @
2012-12-17 09:41
tornadomeet
阅读(9859)
推荐(1) 编辑
Reading papers_15(Graph cuts optimization for multi-limb human segmentation in depth maps)
摘要:如果大家有用过kinect做开发,不管是使用kinect SDK还是使用OpenNI,估计都对这些库提供的人体骨骼跟踪技术有一定的好奇,心里在想,每个人穿的衣服不同,身体特点也不同,所处的环境不同,且走路或做手势时的姿势也不相同,竟然能够跟踪人体的骨架,且效果不错。那么上面的Kinect SDK和OpenNI提供给kinect开发的核心算法——人体骨架跟踪到底是怎么实现的呢?CVPR2011的最佳论文就给出了微软SDK的核心算法,见参考文献2,该文章主要是讲的Kinect SDK的人体骨架跟踪核心算法。因为该算法具有普适性,且效果好,被评为best peaper那是必须的。微软算法的流程图..
阅读全文
posted @
2012-12-12 09:46
tornadomeet
阅读(3443)
推荐(1) 编辑
基础学习笔记之opencv(23):OpenCV坐标体系的初步认识
摘要:前言 相信很多朋友在使用OpenCV的时候会遇到一个小问题,且有时候对这样的小问题没有引起足够的重视,或者通过表面想当然的去编程,所以调试代码时出现一些莫名其妙的问题,最后发现问题时时间已经过去了一大把。最近我在调试一个项目时就遇到过这种情况,即Mat::at(x,y)和Mat::at(Point(x, y))的区别,我在项目中把这2种看成效果一样的,结果这个问题调试时纠结了2天(因为该工程有关OpenCV的代码有上千行,且没有怀疑这两者的区别,因此有时候出现一些莫名其妙的结果,花了很多时间才找问题所在)。其实关于Mat的at访问时这2者的区别我以前也做过笔记,只是此时不小心忘记了。这次...
阅读全文
posted @
2012-12-12 00:25
tornadomeet
阅读(18764)
推荐(7) 编辑
Eigen初步1:初步体验Eigen库
摘要:前言: Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 开源以及相关算法。功能强大、快速、优雅以及支持多平台,可以使用该库来方便处理一些矩阵的操作,达到类似matlab那样的快捷。现在已经发展到Eigen3了,目前最新版本为Eigen 3.1.2。 Eigen使用预备工作: 首先到Eigen官网上下载Eigen源码包,下载后解压完直接放到自己平时软件所在的目录下,不需要安装。Eigen下载地址为:http://eigen.tuxfamily.org/index.php?title=Main_Page。 然后当自己需要使用到Eigen时,在相...
阅读全文
posted @
2012-12-11 22:51
tornadomeet
阅读(28546)
推荐(2) 编辑
基础学习笔记之opencv(22):learning OpenCV书中一个连通域处理函数
摘要:前言 在图像处理过程中,经常会遇到这样一部分图像,图像的整体部分如果人来看的话一眼就能看出,但是它的内部由于有各种小缺口,导致断开了,这样在计算机“眼”里就被认为是断开的,为了使图像达到适应人眼的感觉,需要将这些缺口和断开的口给连接上去,这就需要用到计算机图形学中的连通域处理技术。本文给出一个简单的连通域处理函数,当然这个函数是来自OpenCV著名教程Learning OpenCV中,只不过它的接口是基于c版本的OpenCV,而到目前为止,基于C++接口的OpenCV已经是主流,所以我将其接口改成了c++版的,但是其内部一些代码基本没有动它。 开发环境:OpenCV2.4.3+Qt...
阅读全文
posted @
2012-12-11 21:08
tornadomeet
阅读(21984)
推荐(2) 编辑
C++笔记(1):使用STL中sort()对struct排序
摘要:前言 一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有时候效率实在太低,比如说这节要讲的Std::sort()函数的使用,调了半天才调通。开通c/c++序列博客是记录在使用c++中一些难题,避免以后重犯错,当然以后会尽量挤出时间来较系统学习下c++。 开发环境:QtCreator2.5.1+OpenCV2.4.3 实验基础 首先来看看std中的快速排序算法sort的使用方法: template <class RandomAccessIterator, class Compare>void sor.
阅读全文
posted @
2012-12-08 15:06
tornadomeet
阅读(25673)
推荐(1) 编辑
基础学习笔记之opencv(21):一个简单有趣的皮肤检测代码
摘要:前言 最近课题研究上想采用皮肤信息,但是个人总是对皮肤信息应用在目标检测和目标识别上有排斥,认为皮肤信息完全不足以胜任这个工作。其实计算机视觉的最终实现是一个长期的过程,是AI领域一个经典的问题,所以在AI完全突破之前,任何对CV有用的信息都值得去深入研究,除非有一种算法能够在所有情况下都工作。好了,废话不扯了,进入正题,有偏见但是还是得使用它。皮肤模型中有单高斯,混合高斯,贝叶斯模型和椭圆模型等。经过前人学者大量的皮肤统计信息可以知道,如果将皮肤信息映射到YCrCb空间,则在CrCb二维空间中这些皮肤像素点近似成一个椭圆分布。因此如果我们得到了一个CrCb的椭圆,下次来一个坐标(Cr,...
阅读全文
posted @
2012-12-05 08:32
tornadomeet
阅读(17348)
推荐(3) 编辑
基础学习笔记之opencv(20):OpenCV中的颜色空间(ing...)
摘要:YCrCb YCrCb在视频压缩和一些数字图像处理中使用得比较多,是一种基于人眼感知的颜色空间。 在OpenCV中,从RGB空间转换到YCrCb空间的公式如下: 注意从RGB到YcrCb的公式并不是唯一的,这里OpenCV只是采用的是Intel IPP中的公式而已。 其中的delta的取值为: 这里我们以RGB三通道都为8bit来举例说明,即delta取128。通过上面的公式推导,可以求出Y的取值范围为(0, 255),Cr的取值范围为(0.54768, 255.452315),Cb的取值范围为(0.57548, 255.42452)。因此我们有很大的理由近似认为Y,Cr...
阅读全文
posted @
2012-12-04 09:14
tornadomeet
阅读(9824)
推荐(5) 编辑
基础学习笔记之opencv(19):有关图像序列的直方图计算
摘要:前言 直方图是计算机视觉中一个很重要的工具,OpenCV里面提供了不少有关直方图处理的函数。其中最基本的是计算直方图的函数calcHist()。有关直方图在前面的博文中也有所介绍:基础学习笔记之opencv(4):直方图使用学习。不过目前由于本人课题研究上需要计算多张图片的一维直方图特性,且每张图片对应有自己不同的掩膜矩阵,开始以为OpenCV中提供的calcHist()函数能够实现这个功能,因为其中一个重载函数中有一个参数为InputArrayOfArrays,咋一看会觉得这不就是可以处理多张图片的吗?后面仔细研究后发现其实它实现的功能和我的需求是不同的,因此需要自己单独写函数来完成这...
阅读全文
posted @
2012-12-01 22:21
tornadomeet
阅读(9140)
推荐(1) 编辑