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

news2024/10/7 16:21:36

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

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

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

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

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

目录

💥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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel统一异常处理

五.统一异常处理—BlockException 在上述规则测试中,当违反规则时,出来的异常信息页面不够友好和统一,我们可以通过设置统一的异常处理类,针对不同规则显示不同异常信息。 创建一个配置类,实现BlockExceptionHandler…

numpy数组,numpy索引,numpy中nan和常用方法

一:【numpy数组】 1.1为什么要学习numpy 1.快速 2.方便 3.科学计算的基础库 1.2什么是numpy 一个python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于在大型,多维数组上执行数组运…

常用的键盘事件

1、键盘事件 键盘事件触发条件onkeyup某个键盘按键被松开时触发onkeydown某个键盘按键被按下时触发onkeypress某个键盘按键被按下时触发(但它不识别功能键,比如ctrl、shift等) 注意: 如果使用addEventListener不需要加ononkeypr…

Go 堆数据结构使用

说到 container/heap 下的堆数据结构,让我们不需要从零开始实现这个数据结构。如果只是日常工作,其实还挺难用到堆的,更多的还是在写算法题的时候会用到。 基本概念 堆分为大顶堆和小顶堆,区分这两种类型方便我们处理问题。大顶…

Docker安装Zookeeper教程(超详细)

生命无罪,健康万岁,我是laity。 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它在空虚时,用爱欲来填充; 第三次,在困难和容易之…

第六章:关系数据理论

一、问题的提出、范式 1、【多选题】下列说法中正确的是: 正确答案: ABCD 2、【多选题】关系模式R(项目序号,项目代码,项目名称),项目序号是码。一个项目代码只有一个项目名称。下列说法不正确…

文献检索报告

文献检索第一篇检索作业总结第一章检索任务1.1检索课题1.2确定选题所属学科1.3中英文检索词第二章检索策略与结果2.1检索中文期刊文献2.1.1 CNKI中国期刊全文数据库2.1.2 维普期刊全文数据库2.1.3 万方期刊数据库2.1.4 超星期刊全文2.2检索中文学位论文2.2.1 CNKI博硕学位论文数…

virtio-net发包流程分析

virtio-net发包流程分析 virtio-net发包流程前端驱动部分 总流程 start_xmit|---->free_old_xmit_skbs /* 释放backend处理过的desc */|---->xmit_skb /* 调用xmit_skb函数将网络包写入virtqueue */| |---->sg_set_buf /* 数据包头部填入scatterlist */| | |---->…

手撕红黑树、三种情况就可玩转红黑

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、红黑树概念二、红黑树性质三、红黑树 插入①变色(c红 p红 g黑 u存在且红)②旋转(c红 p红 g黑 u存在且…

熟人服务器被黑,五种实战方法强化linux服务器安全性!

公司护网行动,五种实战方法,下面直接上实操: 1.修改ssh端口为59527,并开放防火墙端口 修改ssh配置文件 /etc/ssh/sshd_config,将端口号修改为59527.同时保留ssh默认的22端口,为了防止修改端口号失败以后,远程登录不上服务器 2.修改firewall配置 默认情况下,防火墙是…

JVM——垃圾回收

垃圾回收 1、如何判断对象可以回收? 一、引用计数法 当一个对象被其他变量引用时,使其计数1(若被引用两次,计数为2),若某个变量不在引用它时,使其计数-1;当这个对象引用计数变为0时意味着不…

吴恩达【神经网络和深度学习】Week1——深度学习概述

文章目录1、What is a neural network?2、Supervised Learning with Neural Networks2.1、Examples2.2、The classification of data3、Why is Deep Learning taking off?4、Quiz课程笔记整理按照所讲章节的标题来完成1、What is a neural network? 以房价预测模型…

基于HTML5 技术的开放自动化HMI

人机交互接口(HMI)是自动化系统中不可或缺的一部分。传统的做法是提供一个HMI 显示屏,并且通过组态软件来配置显示屏的功能,通过modbus 或者以太网与PLC 连接。 现在,事情变得复杂了许多,用户不仅需要通过专…

干货 | 关于PCB中的“平衡铜”,一文全部说明白

平衡铜是PCB设计的一个重要环节,对PCB上闲置的空间用铜箔进行填充,一般将其设置为地平面。 平衡铜的意义在于: 对信号来说,提供更好的返回路径,提高抗干扰能力;对电源来说,降低阻抗,…

Android 13 源码获取与构建

文章目录1. 环境准备1.1 基本信息1.2 系统初始化1.2.1 更新 Ubuntu 软件包1.2.2 安装 git 工具1.2.3 安装依赖包(Ubuntu 18.04)1.2.4 修改默认python版本1.2.5 安装 repo 工具2. 源码下载完成2.1 创建源码目录2.2 初始化源码仓库2.3 开始下载源码2.4 Android 13 源码目录3. 构建…

m可见光通信的空间调制(sm)误码率matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 可见光通信技术(Visible Light Communication,VLC)是指利用可见光波段的光作为信息载体,在空气中直接传输光信号的通信方式。可见光通信技术绿色低…

virtio vring原理

vring原理 在 virtio 设备上进行批量数据传输的机制被称为 virtqueue 。每个设备可以拥有零个或多个 virtqueue ,当 Driver 想要向设备发送数据时,它会填充 Descriptor Table 中的一项(或将几项链接在一起),并将描述符…

圣诞树拼图游戏unity制作

2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 一、前言 提示:使用unity来制作一个拼图游戏,图片便是圣诞树。 二、创意名 圣诞树拼图游戏 三、效果展示 圣诞树拼图游戏最终效果。 游戏中效果如图: 游戏拼图完成后效果如图&am…

vue实现随机生成分享海报(内容动态)

大家好,我是雄雄。 前言 昨天写了篇文章:自己整理的vue实现生成分享海报(含二维码),看着网上的没实现 主要是介绍了如何使用vue实现,动态分享内容为海报,且附带二维码,扫描二维码能…

shell脚本四剑客之awk详解

文章目录awk的介绍awk能够干什么awk的格式工作原理:记录和域内建变量的用法1. FS2. OFS3.RS4. ORS5. NF6. NRBEGIN 和END语句块常见案例1. 使用NR行号提取ip2. 打印UID小于10的账号名称和UID信息3. 数学运算4. AWK打印硬盘设备名称,默认以空格为分割&…