天天看點

基于凸幾何和K均值的高光譜端元提取算法(Matlab代碼實作)

 👨‍🎓個人首頁:研學社的部落格 

💥💥💞💞歡迎來到本部落格❤️❤️💥💥

🏆部落客優勢:🌞🌞🌞部落格内容盡量做到思維缜密,邏輯清晰,為了友善讀者。

⛳️座右銘:行百裡者,半于九十。

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

目錄

💥1 概述

📚2 運作結果

🌈3 Matlab代碼實作

🎉4 參考文獻

基于凸幾何和K均值的高光譜端元提取算法(Matlab代碼實作)

💥1 概述

高光譜解混是一種在高光譜資料中的所有像素處近似純類型的光譜特征及其相應組合比例的技術。高光譜解混是了解、研究和可視化高光譜圖像的一項值得注意的任務。在這項任務中,提取純光譜特征非常具有挑戰性。該文提出一種利用凸幾何和k均值概念進行端部提取的新方法。大多數現有的端部提取技術僅使用凸幾何形狀。将 K 均值與凸幾何一起使用可提高提取過程的準确性。使用模拟和真實資料集将所提出的算法與其他最先進的算法進行比較。通過仿真結果可以看出,所提算法優于其他現有算法。

📚2 運作結果

基于凸幾何和K均值的高光譜端元提取算法(Matlab代碼實作)

 部分代碼:

%% 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

繼續閱讀