【图像融合】PCA图像融合(含清晰度)【含Matlab源码 723期】

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【图像融合】基于matlab PCA图像融合【含Matlab源码 723期】
(https://download.csdn.net/download/TIQCmatlab/62925370)
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab图像处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab图像处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab图像处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、图像融合与PCA算法简介

1 图像融合概念与分类
图像融合是将针对同一场景不同来源的图像通过特定的算法生成一张新的图像,融合后的图像综合
了不同源图像间的互补信息,提高了后期图像可被分析和加工处理的能力。图像融合主要分为像素级融合、特征级融合以及决策级融合。
像素级融合直接处理原始像素点,要求不同源生成的图像匹配度高,因此图像保留的信息量大,但是
运算量巨大:特征级融合需要先提取各源图像的特征信息,然后利用加权的特征信息进行图像重建,该融合方式容易丢失图像的部分信息:决策级融合是综合运用像素级融合与特征级融合,通过对图像的分析依据具体情况找到最优匹配。图像融合分类示意见图。
融合后的图像一般需要进行质量评估,主观方法就是人眼判断融合图像的质量好坏。客观方法包含与
源图像进行相关指标的计算、比对,例如均值、标准差、平均梯度、信息熵、空间频率等.

2 PCA算法原理
主成分分析技术PC A(principal components analysis) , 也叫做主分量分析, 基本数学原理是K-L正交分解。K-L变换是通过原始信号集合构造正交基,信号与基进行积分运算后,每个基对应的系数表示原始信号在该基下的投影值。在连续信号领域,可通过信号的内在特征构造核函数,不同的变换核函数
对应不同的基:在离散领域,变换核函数变为变换矩阵,当变换矩阵为协方差矩阵时,离散K-L变换即为PCA。
设原始信号在本征空间, PC A可以理解为一种信号降维算法,通过协方差矩阵构造出一组基,使得
赋范子空间基信号的加权之和与本征空间误差最小,即投影误差最小。PC A变换后的每个基的系数即为本征空间在子空间下的投影值,此时可以选取有限个基的不同组合向原始信号通近I],对于非稀疏矩阵,理论上只需少量包含信息量大的基投影,即可在相当程度上近似于本征空间。设离散随机信号为X,X为n行p列矩阵,见式(1)。
在这里插入图片描述
在这里插入图片描述
现以列为投影方向构造子空间的基(以行为方向同理),X可改写为式(2)。
j=1,2…p:x为包含n个元素的列向量。
设变换矩阵为A,X变换后的矩阵为F,则F见式(3)。
在这里插入图片描述
当按列方向投影时, 需保证n多p, 此时A为pxp方阵:同理, 当按行方向投影时需保证n≤p, A为nxn
方阵,A就是要构造的基回。此时式(3)可写为式(4)。
在这里插入图片描述
1.3 变换矩阵的计算
通过1.2节的原理分析,只要构造出满足3个条件的变换矩阵A,就可以对信号X进行主成分分析,得到主成分矩阵F,并利用F子列的任意组合得到重构信号X。在高等代数里,按列投影时,变换矩阵A就是信号X的协方差矩阵的特征向量按列组成的矩阵。同理,按行投影时,变换矩阵A就是信号X的协方差矩阵的特征向量按行组成的矩阵[1],证明略,只给出
在这里插入图片描述
在这里插入图片描述
2 图像的融合
对于灰度图像采用PCA算法时, 所得主成分矩阵的列与图像的列长度相等,重构图像会出现栅栏效
应, 原因是PC A算法是一种降维算法, 将二维图像降维成一维向量了,所以在对图像采用该算法时,一般采用多通道图像, 最简单的多通道图像就是RGB彩色图像。
图像融合基本原理:通过PC A正变换分别将2个待融合的三通道彩色图像,降维成3个单通道图像,即3个主成分,用另一幅图像的某个主成分替换掉该图像的某个主成分, 然后进行PC A逆变换, 得到的重构图像即为融合图像。
具体计算过程如下所述。
1)设可见光彩色图像为Xi,红外光伪彩色图像为X, 两图像的分辨率都为MXN, 通道数都为3, 分辨
率不同时可通过尺度缩放保持一致,通道数不同时可通过低通道数图像直接取代高通道数图像的主成分。
2)设X在3个通道下的图像分别为X1,Xi2,X 13, 即大小都是M×N的矩阵, 将其变为包含MXN个元素的列向量,记为X1,X12,X’13。
3)将X1,X12,X13组合成X。X=Xxi此时X为行数为MXN, 列数为3的矩阵, 依次带入式(7一11),得到转换矩阵A。
4)通过式(4)得到主成分矩阵F,此时的F是行数为MXN, 列数为3的矩阵, 提取第1列, 将其转化为MXN的矩阵, 则恰好对应X的第1主成分Fu,Fi就是图像Xi的第1主成分图像,第2主成分图像、第3主成分图像分别为F12,F13。同理,可以求出图像X的3个主成分图像为F21,F22,F23。
5)将Fi,Fz(ij=1,2,3)互换,并按式(6)作逆变换,即可求出融合图像Y,不同的互换组合可以求出不同的Y, Xu, X 2; (i=1.2.3) 不仅可以是RGB通道下的分解, 也可以是HIS空间、YUV空间下的分解[14],如此可以得到更多的Y。

⛄三、部分源代码

% function Pca = PCA™;
clear
g_R=0; %r清晰度描述
g_G=0; %g清晰度描述
g_B=0; %b清晰度描述
h_R=0; %熵的描述
h_G=0;
h_B=0;
fenzi_R=0;
fenzi_G=0;
fenzi_B=0;
fenmu_up_R=0;
fenmu_up_G=0;
fenmu_up_B=0;
fenmu_low_R=0;
fenmu_low_G=0;
fenmu_low_B=0;
init_up_R=[];
init_up_G=[];
init_up_B=[];
init_low_R=[];
init_low_G=[];
init_low_B=[];
up=imread(‘high.jpg’); %读图像
low=imread(‘low.jpg’);
figure(1)
imshow(up); %读RGB数值
title(‘PCA-RGB表示的高分辨率图像’);
figure(2)
imshow(low);
title(‘PCA-RGB表示的低分辨率图像’);

[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)]'; % 生成由R,G, B组成的三维列向量
up_Mx = up_Mx + up_S;

     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 / (MN); % 计算三维列向量的平均值
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_Mxup_Mx’; % 计算协方差矩陈
low_Cx = low_Cx / (M * N)- low_Mx
low_Mx’;

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

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(:,:,1)=up_r;
%RGB(:,:,2)=up_g;
%RGB(:,:,3)=up_b;

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

          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
          %                       下面是计算相关系数                           %
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

init_up_R=ones(M,N)*mean(up_R(😃);
init_up_G=ones(M,N)*mean(up_G(😃);
init_up_B=ones(M,N)*mean(up_B(😃);

init_low_R=ones(M,N)*mean(low_R(😃);
init_low_G=ones(M,N)*mean(low_G(😃);
init_low_B=ones(M,N)*mean(low_B(😃);

for i=1:M
for j=1:N
fenzi_R=fenzi_R+(up_R(i,j)-init_up_R(i,j))*(low_R(i,j)-init_low_R(i,j));
fenmu_up_R=fenmu_up_R+(up_R(i,j)-init_up_R(i,j))^2;
fenmu_low_R=fenmu_low_R+(low_R(i,j)-init_low_R(i,j))^2;

    fenzi_G=fenzi_G+(up_R(i,j)-init_up_G(i,j))*(low_R(i,j)-init_low_G(i,j));
    fenmu_up_G=fenmu_up_G+(up_R(i,j)-init_up_G(i,j))^2;
    fenmu_low_G=fenmu_low_G+(low_R(i,j)-init_low_G(i,j))^2;
    
    fenzi_B=fenzi_B+(up_R(i,j)-init_up_B(i,j))*(low_R(i,j)-init_low_B(i,j));
    fenmu_up_B=fenmu_up_B+(up_R(i,j)-init_up_B(i,j))^2;
    fenmu_low_B=fenmu_low_B+(low_R(i,j)-init_low_B(i,j))^2;       
    
end

end
rou_R=fenzi_R/(sqrt(fenmu_up_Rfenmu_low_R));
rou_G=fenzi_G/(sqrt(fenmu_up_G
fenmu_low_G));
rou_B=fenzi_B/(sqrt(fenmu_up_B*fenmu_low_B));

          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
          %                       下面是计算清晰度G                            %
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  

for ii=1:M-1
for jj=1:N-1
g_R=g_R+sqrt((((low_r(ii+1,jj)-low_r(ii,jj))2+(low_r(ii,jj+1)-low_r(ii,jj))2))/2);
g_G=g_G+sqrt((((low_g(ii+1,jj)-low_g(ii,jj))2+(low_g(ii,jj+1)-low_g(ii,jj))2))/2);
g_B=g_B+sqrt((((low_b(ii+1,jj)-low_b(ii,jj))2+(low_b(ii,jj+1)-low_b(ii,jj))2))/2);

end

end

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]张森,郑洲洲.基于PCA图像融合的皮革缺陷检测[J].计算机与数字工程. 2022,50(07)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值