【图像融合】主成分分析PCA

基本原理

  主成分分析PCA 是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。在新的综合变量基础上,可以进一步统计分析。

  通常,数学上的处理方法是将原来的变量做线性组合,成为新的综合变量,但是这种组合如果不加以限制,则可以有很多,应该如何选择?

  如果将选取的第一个线性组合即第一个综合变量记为F1,自然希望它可以尽可能多地反映原来变量的信息,这里“信息”用方差来测量,方差var(F1)越来,则F1包含的信息越多。所以在所有的线性组合中F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来p个变量的信息,再考虑选取F2为第二个线性组合即第二主成分,F1中已有的信息就不需要再出现在F2中,以此类推。

【图像融合】主成分分析PCA_第1张图片


计算步骤

【图像融合】主成分分析PCA_第2张图片


代码实现

% 基于PCA变换的图像融合方法

up = imread('pic/high.jpg');
low = imread('pic/low.jpg');
subplot(2,2,1);imshow(up);title('高分辨率图像');
subplot(2,2,2);imshow(low);title('低分辨率图像');

[up_R] = double(up(:,:,1));
[up_G] = double(up(:,:,2));
[up_B] = double(up(:,:,3));

[low_R] = double(low(:,:,1));
[low_G] = double(low(:,:,2));
[low_B] = double(low(:,:,3));

[M,N,color] = size(up);

up_Mx = 0;
low_Mx = 0;
for i = 1:M
    for j = 1:N
        up_S = [up_R(i,j),up_G(i,j),up_B(i,j)];         % 生成由RGB组成的三维列向量
        up_Mx = up_Mx + up_S;                           % 叠加计算RGB各列向量的总和

        low_S = [low_R(i,j),low_G(i,j),low_B(i,j)];     
        low_Mx = low_Mx + low_S;
    end
end
up_Mx = up_Mx/(M * N);                                  % 计算三维列向量的平均值
low_Mx = low_Mx/(M * N);

up_Cx = 0;
low_Cx = 0;
for i = 1:M
    for j = 1:N
        up_S = [up_R(i,j),up_G(i,j),up_B(i,j)]';        % 矩阵转置
        up_Cx = up_Cx + up_S * up_S';                          

        low_S = [low_R(i,j),low_G(i,j),low_B(i,j)]';     
        low_Cx = low_Cx + low_S * low_S';
    end
end
up_Cx = up_Cx/(M * N) - up_Mx * up_Mx';                 % 计算协方差矩阵
low_Cx = low_Cx/(M * N) - low_Mx * low_Mx';

[up_A,up_latent] = eigs(up_Cx);                         % 协方差矩阵的特征向量组成的矩阵
[low_A,low_latent] = eigs(low_Cx);                      % 即PCA变换的系数矩阵,特征值

for i = 1 : M
    for j = 1 : N
       up_X = [up_R(i,j),up_G(i,j),up_G(i,j)]';        % 生成由R,G, B组成的三维列
       up_Y = up_A'*up_X;                              % 每个象素点进行PCA变换正变换
       up_Y = up_Y';
       up_R(i,j) = up_Y(1);                            % 高分辨率图片的第1主分量
       up_G(i,j) = up_Y(2);                            % 高分辨率图片的第2主分量
       up_B(i,j) = up_Y(3);                            % 高分辨率图片的第3主分量

       low_X = [low_R(i,j),low_G(i,j),low_G(i,j)]';
       low_Y = low_A'*low_X;
       low_Y = low_Y';
       low_R(i,j) = low_Y(1);                          % 低分辨率图片的第1主分量
       low_G(i,j) = low_Y(2);                          % 低分辨率图片的第2主分量
       low_B(i,j) = low_Y(3);                          % 低分辨率图片的第3主分量
   end
end

for i = 1 : M
    for j = 1 : N
       up_Y = [up_R(i,j),up_G(i,j),up_B(i,j)]';         % 生成由R,G, B组成的三维列向量 
       up_X = up_A*up_Y;                                % 每个象素点进行PCA变换反变换
       up_X = up_X';
       up_r(i,j) = up_X(1);
       up_g(i,j) = up_X(2);
       up_b(i,j) = up_X(3);

       low_Y = [up_R(i,j),low_G(i,j),low_B(i,j)]';
       low_X = low_A*low_Y;
       low_X = low_X';
       low_r(i,j) = low_X(1);
       low_g(i,j) = low_X(2);
       low_b(i,j) = low_X(3);
   end
end

RGB_up(:,:,1)=up_r;
RGB_up(:,:,2)=up_g;
RGB_up(:,:,3)=up_b;

RGB_low(:,:,1)=low_r;
RGB_low(:,:,2)=low_g;
RGB_low(:,:,3)=low_b;

subplot(2,2,3);imshow(uint8(RGB_up));title('高分辨率PCA变换图像');
subplot(2,2,4);imshow(uint8(RGB_low));title('低分辨率PCA变换图像');

运行结果

【图像融合】主成分分析PCA_第3张图片


你可能感兴趣的:(信息融合,--------图像融合,图像融合)