资源简介
自己学习时编写的混合像元分解中的端元提取部分的顶点成分分析VCA的MATLAB代码,浅显易懂。可以运行得到结果,但没有结果用于验证,亦未编写精度评定,不保证结果的正确性。
代码片段和文件信息
clear;
close all;
clc;
load sancut64_86.mat;
% figure(1);
% imagesc(newpic(::1));
% title( ‘Band 1‘);
[Lines Columns Bands] = size(newpic);
N = Lines * Columns; % 像元数
iData = reshape(newpic N Bands);
iData = iData‘; % iData:波段 * 像元
numEndmember = 4; % 端元数
% 提取第一个端元
Data = zeros();
for i = 1:N
Data(i:) = (norm(iData(:i) 2)).^2;
end
[val id] = max(Data);
E(:1) = iData(:id);
% 提取后续端元
Data = zeros();
Ik = eye(Bands);
sigma = randn(Bands 1);
for k = 1 : numEndmember-1
Ek1 = E(:1:k) / (E(:1:k)‘*E(:1:k)) * E(:1:k)‘;
Ek = Ik - Ek1;
wk = (Ek * sigma) / (norm((Ek * sigma) 2));
for i = 1:N
Data(:i) = abs(wk‘ * iData(:i));
end
[val id] = max(Data);
E(:k+1) = iData(:id);
end
E(1:5:)
figure;
plot(E);
Abundance = FCLS(newpic E);
figure;
for i = 1:numEndmember
subplot(numEndmember/2 2 i);
imagesc(Abundance(::i));
title([‘Endmember ‘ num2str(i)]);
end
figure;
for i = 1:numEndmember
subplot(numEndmember/2 2 i);
imshow(Abundance(::i));
title([‘Endmember ‘ num2str(i)]);
end
% ans =
% 7012 2674 4550 2856 3376 3417
% 7188 2711 4621 2702 3468 3447
% 7349 2729 4714 2553 3570 3503
% 7497 2814 4793 2601 3674 3553
% 7702 2871 4884 2497 3762 3621
% ans =
% 7012 2674 3795 4537 3326 7155
% 7188 2711 3885 4592 3508 7207
% 7349 2729 3975 4690 3671 7300
% 7497 2814 4071 4779 3798 7428
% 7702 2871 4172 4863 3924 7490
%
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-04-24 20:25 VCA\
文件 1076114 2016-02-23 10:45 VCA\sancut64_86.mat
文件 1946 2019-04-29 16:00 VCA\VCA.m
评论
共有 条评论