码迷,mamicode.com
首页 > 其他好文 > 详细

Hotelling transform,霍特林变换

时间:2014-06-19 12:36:00      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:hotelling transform   霍特林变换   k-l变换   

本文为原创博文,转载请注明出处:Hotelling transform,霍特林变换,http://write.blog.csdn.net/postedit/30097833

最近在细看一篇论文并且实现里面的方法,有一节是依靠hotelling变换实现人脸矫正,方法比较简单,不幸的是里面的公式是错的,所以在这里写一下原理顺带附上MATLAB实现。

假设有一组人脸数据P,P是3xN维的矩阵,每一列代表三维空间中的一个点,N列代表N个点,如下:

bubuko.com,布布扣

bubuko.com,布布扣

数据的均值表示为m,相当于数据的重心:

bubuko.com,布布扣

P的协方差C可以表示为下式,注意C是3x3的矩阵

bubuko.com,布布扣

协方差C的特征向量可以通过如下求解:

bubuko.com,布布扣

其中V是特征向量v1,v2,v3(因为C是3x3的矩阵,所以特征向量只可能有三个)构成的矩阵,D是特征值d1,d2,d3构成的对角矩阵,特征向量和特征值一一对应,求解的MATLAB在下面,要说明的是MATLAB里的eig函数得出的V是按照D升序排列的,就是d1<d2<d3,后面要变换一下。

下面是hotelling变换的关键一步:

bubuko.com,布布扣

其中U是这样定义的,V=[v1;v2;v3],那么U=[v3;v2;v1]^T,就是说要按照D降序排列然后还要转置一下

MATLAB实现如下:

bubuko.com,布布扣bubuko.com,布布扣

感觉这个hotelling和PCA有些像,hotelling找到数据分布最大的三个方向,然后将数据整体旋转到这三个方向上来,以后有时间再补充详细原理。最终得到的旋转人脸如下,因为最初的人脸没什么旋转,所以得到的结果效果也不明显,而且处理过程要多次迭代到V不再变化才能矫正姿态,我这里只做了一次变换。

bubuko.com,布布扣



Hotelling transform,霍特林变换,布布扣,bubuko.com

Hotelling transform,霍特林变换

标签:hotelling transform   霍特林变换   k-l变换   

原文地址:http://blog.csdn.net/smartempire/article/details/30097833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!