matlab 霍特林变换,Hotelling transform,霍特林变换

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

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

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

c48fac09d899d2909f567dfbb34d41d0.png

7ada330026480c5be65161d26b0e220a.png

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

87459b683f7af04c24821b9ed9fab211.png

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

14ae12f40b6cf862934d7cae89bdb6bd.png

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

622ff86d5b73a92eb15fdd6c270422d5.png

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

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

c47027d746ec2020fb3f4eff346edb53.png

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

MATLAB实现如下:

20fd807709d138ea7fd55c62802e895e.png

2886cf8d7877d09e27bd6ac3c73b819b.png

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

f5e64a4bc275dc4de4c032d1f797e7a2.png

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值