多种方法实现高光谱影像匹配
clc,clear,close all;
%% 加载文件
addpath(genpath(‘F:\课程\高光谱遥感’));
PixSpe=importdata(‘PixelSpectrum.xls’);
LibSpe=importdata(‘SpectrumLibrary.xls’);
%% 矩阵元素二值化
P=PixSpe.Sheet1;
P(P>=0.5)=1;
P(P<0.5)=0;
ABC=LibSpe.Sheet1;
ABC(ABC>=0.5)=1;
ABC(ABC<0.5)=0;
%% 计算汉明距离
P_ABC=zeros(size(ABC,1),size(ABC,2));
num=zeros(size(ABC,1),1);
for i=1:size(ABC,1)
P_ABC(i,:)=ABC(i,:)-P;
num(i,1)=sum(P_ABC(i,:)~=0);
end
%% 升序排列找最小距离
[X,index]=sort(num,‘ascend’);
fprintf(“最接近类别为%s”,num2str(index(1,1)));
%% 保存文件
OK=index(1,1);
fid = fopen(‘F:\课程\高光谱遥感\最接近类别.txt’,‘wt’);
fprintf(fid,‘最接近类别是%g\n’,OK);
fclose(fid);
%% 基于线性相似度计算的光谱波形匹配
P=PixSpe.Sheet1;
ABC=LibSpe.Sheet1;
D=zeros(size(ABC,1),1);
for i=1:size(ABC,1)
D(i,1)=sum(abs(ABC(i,:)-P));
end
[X,index]=sort(D,‘ascend’);
fprintf(“最接近类别为%s\n”,num2str(index(1,1)));
%% 光谱角度匹配
P=PixSpe.Sheet1;
ABC=LibSpe.Sheet1;
seta=zeros(3,1);
for i=1:size(ABC,1)
numerator=sum(P.ABC(i,:));
denominator=sqrt(PP’)*sqrt(ABC(i,:)ABC(i,:)’);
seta(i,1)=acosd(numerator/denominator);
end
[X,index]=sort(seta,‘ascend’);
fprintf(“最接近类别为%s\n”,num2str(index(1,1)));
%% 交叉相关匹配
P=PixSpe.Sheet1;
ABC=LibSpe.Sheet1;
P_ave=mean§;
ABC_ave=mean(ABC,2);
denominator_1=zeros(size(ABC,1),size(ABC,2));
denominator_2=zeros(size(ABC,1),size(ABC,2));
R=zeros(size(ABC,1),1);
for i=1:size(ABC,1)
for j=1:size(ABC,2)
numerator(i,j)=(P(1,j)-P_ave)(ABC(i,j)-ABC_ave(i,1));
denominator_1(i,j)=(P(1,j)-P_ave)^2;
denominator_2(i,j)=(ABC(i,j)-ABC_ave(i,1))^2;
end
R(i,1)=sum(numerator(i,:))/sqrt(sum(denominator_1(i,:))sum(denominator_2(i,:)));
end
[X,index]=sort(R,‘descend’);
fprintf(“最接近类别为%s\n”,num2str(index(1,1)));
%% 偏度
P=PixSpe.Sheet1;
ABC=LibSpe.Sheet1;
P_2_10=P(1,2:10);
ABC_1_9=ABC(:,1:9);
R1=zeros(3,1);
R2=zeros(3,1);
for i=1:size(ABC,1)
temp=corrcoef(P_2_10,ABC_1_9(i,:));
R1(i,1)=temp(1,2);
end
P_1_9=P(1,1:9);
ABC_2_10=ABC(:,2:10);
for i=1:size(ABC,1)
temp=corrcoef(P_1_9,ABC_2_10(i,:));
R2(i,1)=temp(1,2);
end
AS=1-0.5abs(R1-R2);
[X,index]=sort(AS,‘descend’);
fprintf(“最接近类别为%s\n”,num2str(index(1,1)));