基于凸几何和K均值的高光谱端元提取算法(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

高光谱解混是一种在高光谱数据中的所有像素处近似纯类型的光谱特征及其相应组合比例的技术。高光谱解混是理解、研究和可视化高光谱图像的一项值得注意的任务。在这项任务中,提取纯光谱特征非常具有挑战性。该文提出一种利用凸几何和k均值概念进行端部提取的新方法。大多数现有的端部提取技术仅使用凸几何形状。将 K 均值与凸几何一起使用可提高提取过程的准确性。使用模拟和真实数据集将所提出的算法与其他最先进的算法进行比较。通过仿真结果可以看出,所提算法优于其他现有算法。

📚2 运行结果

 部分代码:

%% CG-kmeans algorithm
[endmemberindex] = CGkmeans(Y,VD);
endmemberindex_CGKMEANS=change_index(endmemberindex,p,q);

%% VCA algorithm
[U_VCA,e_index,snrEstimate]=hyperVca(Y,VD);
endmemberindex_VCA=change_index(e_index,p,q);    

%% GT 
t1=load('groundTruth_Cuprite_nEnd12.mat');
gt=t1.M;
tit=t1.cood;
n1=gt(3:103,:);
n2=gt(114:147,:);
n3=gt(168:220,:);
gt=[n1;n2;n3];
[gt_m,gt_n]=size(gt);

%% Total Spectral Angle Mapper (TSAM) calculations
for i=1:gt_n
    for j=1:Bands
        extracted_CGKMEANS(j,i)=xp(endmemberindex_CGKMEANS(i,1),endmemberindex_CGKMEANS(i,2),j);
        extracted_VCA(j,i)=xp(endmemberindex_VCA(i,1),endmemberindex_VCA(i,2),j);
    end
end

[ex_m,ex_n]=size(extracted_VCA);
store_CGKMEANS=[0,0];
store_VCA=[0,0];
sam_VCA=0;
sam_CGKMEANS=0;
sam_total_CGKMEANS=0;
sam_total_VCA=0;

for i=1:gt_n
    for j=1:ex_n
            Mat_SAM_VCA(i,j)=real(acos(dot(gt(:,i),extracted_VCA(:,j))/(norm(gt(:,i)*norm(extracted_VCA(:,j))))));
            Mat_SAM_CGKMEANS(i,j)=real(acos(dot(gt(:,i),extracted_CGKMEANS(:,j))/(norm(gt(:,i)*norm(extracted_CGKMEANS(:,j))))));
    end
end

for i=1:gt_n
    %VCA
    [max_value1,mrow]=min(Mat_SAM_VCA);
    [max_value,col_VCA]=min(max_value1);
    sam_total_VCA=sam_total_VCA+max_value;
    sam_VCA=[sam_VCA;max_value];
    row_VCA=mrow(col_VCA);
    s1=[row_VCA,col_VCA];
    store_VCA=[store_VCA;s1];
    save_VCA(row_VCA)=max_value;
    Mat_SAM_VCA(row_VCA,:)=[100*ones];
    Mat_SAM_VCA(:,col_VCA)=[100*ones];
    %CGKMEANS
    [max_value1,mrow]=min(Mat_SAM_CGKMEANS);
    [max_value,col_CGKMEANS]=min(max_value1);
    sam_total_CGKMEANS=sam_total_CGKMEANS+max_value;
    sam_CGKMEANS=[sam_CGKMEANS;max_value];
    row_CGKMEANS=mrow(col_CGKMEANS);
    s1=[row_CGKMEANS,col_CGKMEANS];
    store_CGKMEANS=[store_CGKMEANS;s1];
    save_CGKMEANS(row_CGKMEANS)=max_value;
    Mat_SAM_CGKMEANS(row_CGKMEANS,:)=[100*ones];
    Mat_SAM_CGKMEANS(:,col_CGKMEANS)=[100*ones];
end

rms_sae=[rms(save_CGKMEANS);
    rms(save_VCA)];
rms_sae = radtodeg(rms_sae);

disp('RMSSAE of VCA');
disp(rms_sae(2));
disp('RMSSAE of CGKMEANS');
disp(rms_sae(1));

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Dharambhai Shah, Tanish Zaveri, Rutvik Dixit (2020) Hyperspectral Endmember Extraction Algorithm Using Convex Geometry and K-Means

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荔枝科研社

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

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

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

打赏作者

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

抵扣说明:

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

余额充值