matlab PCA图像融合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%PCA
clear
up=imread('high.jpg'); %读图像
low=imread('low.jpg');
figure(1)
imshow(up); %读RGB数值
title('PCA-RGB表示的高分辨率图像');
figure(2)
imshow(low)
title('PCA-RGB表示的低分辨率图像');
up=double(up);
low_R=double(low(:,:,1));
low_G=double(low(:,:,2));
low_B=double(low(:,:,3));
[M,N,color]=size(up);
low_Mx=[0 0 0]';
for i = 1 : M
for j = 1 : N
low_S = [low_R(i,j),low_G(i,j),low_B(i,j)]';
low_Mx = low_Mx + low_S;
end
end
low_Mx = low_Mx / (M*N);% 计算低分辨率图片的三维列向量的平均值
low_Cx=0;
for i = 1 : M
for j = 1 : N
low_S = [low_R(i,j),low_G(i,j),low_B(i,j)]';
low_Cx = low_Cx + low_S*low_S';
end
end
low_Cx = low_Cx / (M * N)- low_Mx*low_Mx'; % 运用公式cov(x,y)=E(xy)-ExEy 计算协方差矩陈
[low_A,low_latent] = eigs(low_Cx);% 协方差矩陈的特征向量组成的矩陈----PCA变换的系数矩陈,特征值.
for i = 1 : M
for j = 1 : N
low_X = [low_R(i,j),low_G(i,j),low_B(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
im=uint8(low_R); %匹配一个图像的直方图
y=imhist(im);
y=y/sum(y); %归一化,使函数符合概率分布的sum(y)==1这样一个规律
plot(y); %待匹配的直方图
G=[]; %函数的累积直方图
for i=1:256
G=[G sum(y(1:i))];
end
img=imread('high.jpg');
[m n]=size(img);
hist=imhist(img); %待处理图像的直方图
p=hist/(m*n);
s=[]; %待处理图像的累积直方图
for i=1:256
s=[s sum(p(1:i))];
end
for i=1:256
tmp{i}=G-s(i);
tmp{i}=abs(tmp{i}); %因为要找距离最近的点,所以取绝对值
[a index(i)]=min(tmp{i}); %找到两个累积直方图距离最近的点
end
imgn=zeros(m,n);
for i=1:m
for j=1:n
imgn(i,j)=index(img(i,j)+1)-1; %由原图的灰度通过索引映射到新的灰度
end
end
imgn=uint8(imgn);
imgn=double(imgn);
for i = 1 : M
for j = 1 : N
low_Y = [imgn(i,j),low_G(i,j),low_B(i,j)]';%将低分辨率的全色图像的第一主成分替换成高分辨率的图片
low_X = low_A*low_Y;
low_X=low_X';
r(i,j) = low_X(1);
g(i,j) = low_X(2);
b(i,j) = low_X(3);
end
end
RGB(:,:,1)=r;
RGB(:,:,2)=g;
RGB(:,:,3)=b;
figure(3)
imshow(uint8(round(RGB)))
title('PCA-RGB表示的转化图像');