MNF变化在遥感图像处理中应该很有名气吧,这里稍微偷了下懒,没进行主成分变换的标准化,如果有朋友看的时候仔细了。之所以没有进行标准化是因为看到某老师的PPT说其实无所谓,在数学上是等价的。如果标准化就可以用相关矩阵代替协方差矩阵。我概率学的真是不好,这里有点儿晕。没有标准化,直接用协方差矩阵计算了。

function T=mnf_plus(n1,n2)
%————————————————第一步
% n1是高通滤波后的协方差矩阵   n2是白噪声的协方差矩阵
% 求特征值和特征向量
fprintf('特征向量(v1)及特征值(d1):\n')
[v1,d1]=eig(n1)  %eig函数处理对称矩阵得到 正交的特征向量矩阵和按照特征值升序排列的对角阵
a1=diag(d1);%取出特征值形成一个个数组
%对数组进行排序得到升序
[x1,i1]=sort(a1);
%用对称变换得到降序
newa1=fliplr(x1');
newd1=diag(newa1);
%按照索引 i1 对特征值矩阵进行相应调整
v11=zeros(length(x1)) 
 for n=1:length(x1)
    v11(:,n)=[;v1(:,i1(n))]
 end
% 对特征值矩阵进行对称变换
newv1=fliplr(v11);
% 不使用newv1'目的是与算法保持一致 ,即最终得到 I=P'∑P
%求第一步的变换矩阵p
p=newv1*newd1^(-0.5);
%——————————————————第二步
% n2是白噪声的协方差矩阵
%用P处理协方差矩阵n2
newn2=p'*n2*p;
%对角化newn2
% 求特征值和特征向量
fprintf('特征向量(v2)及特征值(d2):\n')
[v2,d2]=eig(newn2)  %eig函数处理对称矩阵得到 正交的特征向量矩阵和按照特征值升序排列的对角阵
a2=diag(d2);%取出特征值形成一个个数组
%排序升序
[x2,i2]=sort(a2);
%由升序转为降序
newa2=fliplr(x2');
newd2=diag(newa2);
%相应的将特征值矩阵顺序调整
v22=zeros(length(x2))
 for k=1:length(x2)
    v22(:,k)=[;v2(:,i2(k))]
 end
% 对特征值矩阵进行对称变换
newv2=fliplr(v22);
% 不使用newv2'目的是与算法保持一致 求第二步的变换矩阵a
a=newv2;
% 综合得到TNF变换矩阵
T=p*a;

posted on 2008-12-13 15:21  秋波渡  阅读(2905)  评论(1编辑  收藏  举报