MATLAB高光谱图像构建KNN图

在高光谱图像的特征提取过程中,采用非线性降维的方式对高光谱图像降维的过程中,采用图自编码器来对数据进行降维,需要将利用高光谱图像的结构信息和内容信息,则需要将高光谱图像数据构造为一个图结构,图结构的构建需要通过KNN算法来构建邻接矩阵。

文章目录

  • 前言
  • 一、KNN图
  • 二、邻接矩阵A的构建
    • 1.邻接矩阵A
    • 2.高光谱图像构造KNN图
  • 三、像素角度来构建图
  • 总结
  • 参考文献


前言

主要介绍图结构的构建方法。


对于一个M x N x B维度的高光谱图像,构建KNN图可以从像素的角度,也可以从波段的角度来构建,对于整个高光谱图像来说,从像素的角度来构建KNN图的话(每一个像素作为图节点),则邻接矩阵的大小为n * n维度,其中n = M x N。而从波段的角度来构建KNN图的话(每一个波段作为图节点),则邻接矩阵的大小为B x B维度。

一、KNN图

1.1 高光谱波段向量集合,X = { xi_ii}i=1N_{i = 1}^Ni=1N ∈ RN∗B^{N * B}NB,即 X为一个像素对应的波段集合,N和B分别为像素数和光谱波段数。

将高光谱图像维度变换为RN∗B^{N * B}NB形式,通过如下代码。

load('SalinasA_corrected.mat')
data = salinasA_corrected;
[width,height,band] = size(data);
hsi = reshape(data,width * height,band);

1.2 同时考虑光谱特征X和光谱波段的结构信息,我们首先将带集转换成一个带图G = (V,E, A),其中光谱带xi_ii被视为图上的一个节点vi_ii,E是通过计算每个光谱带的k近邻(kNN)来构造的。其中,邻域矩阵A∈Rb×b_{b×b}b×b

1.3 通过计算欧几里得距离得到了邻域关系,用这种方法构造的图称为kNN图
1.4 由于KNN算法是一个监督算法,需要使用到数据的标签信息,通过如下代码加载标签信息,便进行维度变换,通常情况下,标签0对应的像素我们不用来构造KNN图

load('SalinasA_gt.mat')
label = reshape(salinasA_gt,width * height,1);

1.5 KNN算法模型的搭建

  • 通过采用MATLAB内置的函数fitcknn函数来构建。fitcknn函数接受的数据为一行一条数据,一列一个特征维度,因此需要主要数据的维度变换。

kNNClassifier = fitcknn(X, Y, ‘NumNeighbors’, 1)

  • X为训练数据,Y为标签数据;
  • X每一行为一天数据,每条数据有多个特征;
  • Y每一行为一个标签,与X数据对应;
  • 输出为一个KNN分类器模型;

构造一个KNN分类器,分为5个类,默认采用欧几里得距离公式;

 KnnClassifier = fitcknn(hsi,label,'NumNeighbors', 5);

1.6 KNN模型预测分类
采用predict函数,输出参数为分类器模型,测试数据;测试数据为每一行为一条数据。

test = hsi(label ~= 0,:);            % 获取测试数据,排除0标签的数据;
result = predict(KnnClassifier,test);% 预测,返回值为数据对应的标签

1.7 k近邻计算

  • 由于上述KNN算法只能用于分类任务,并没有给出k个近邻,因此我们采用工具箱VLFeat来进行k近邻的计算;k近邻的计算不需要使用标签数据,而KNN分类器需要使用标签数据来分类。
    K近邻计算参考及工具箱安装:https://blog.csdn.net/john_bian/article/details/79424432
    VLF eat下载:https://www.vlfeat.org/index.html
load('SalinasA_gt.mat');
load('SalinasA_corrected.mat');
[width,height,band] = size(salinasA_corrected);
data = reshape(salinasA_corrected,width * height,band);
X = data';
Q = X(:,1);
% 构建kd树
kdtree = vl_kdtreebuild(X);
% 计算Q的k个近邻
[index, distance] = vl_kdtreequery(kdtree, X, Q, 'NumNeighbors', 5) ;

KNN原理介绍:https://www.cnblogs.com/pinard/p/6061661.html

在这里插入图片描述

二、邻接矩阵A的构建

1.邻接矩阵A

采用如下的公式来构造链接矩阵A,其中Nk_kk(xi_ii)为xi_ii的kNN。

在这里插入图片描述
需要保证邻接矩阵是对称矩阵。

2.高光谱图像构造KNN图

基于上述知识,来构造高光谱图像的KNN图,对于高光谱图像,我们把每个像素作为一个样本,B个波段作为特征,让后对每个像素的波段集合,计算其k近邻,让后根据公式构造邻接矩阵;

  • 从像素角度构造邻接矩阵,A ∈ Rn×n^{n×n}n×n,确定,像素数量大,导致邻接矩阵过大。
clc
clear
%% 获取文件数据
load('SalinasA_corrected.mat');
load('SalinasA_gt.mat');
% 获取数据
data = salinasA_corrected;
label = salinasA_gt;%% 获取数据维度以及对数据进行维度变换
[width,height,band] = size(data);
% 维度变换并转置矩阵
N = width * height;
X = reshape(data,N,band)';% 样本
Y = reshape(label,N,1)';  % 标签%% 计算每个样本的k近邻,并构造邻接矩阵
% 邻接矩阵,每个像素作为图中一个节点,则邻接矩阵为N * N维度
A = zeros(N,N);
% 构建Kd树
kdtree = vl_kdtreebuild(X);
% 计算样本X(:,i)的k个近邻,并构造邻接矩阵A
for i = 1 : N[index, ~] = vl_kdtreequery(kdtree, X, X(:,i), 'NumNeighbors', 6) ;% 排除样本本身index = index(index ~= i);% 构造邻接矩阵A,此处可以体会邻接矩阵为整个高光谱图的邻接矩阵A(i,index) = 1;
end
if A == A'disp("对称矩阵");
else disp("非对称矩阵");
end
%% 
  • 从波段的角度来构造邻接矩阵,邻接矩阵A ∈ Rb×b^{b×b}b×b
clc
clear
%% 获取文件数据
load('KSC.mat');
load('KSC_gt.mat');
% 获取数据
data = KSC;
label = KSC_gt;%% 获取数据维度以及对数据进行维度变换
[width,height,band] = size(data);
% 维度变换
N = width * height;
X = reshape(data,N,band);% 样本
Y = reshape(label,N,1);  % 标签%% 计算每个样本的k近邻,并构造邻接矩阵
% 邻接矩阵,每个波段作为图中一个节点,则邻接矩阵为B * B维度
A = zeros(band,band);
% 构建Kd树
kdtree = vl_kdtreebuild(X);
% 计算样本X(:,i)的k个近邻,并构造邻接矩阵A
for i = 1 : band[index, ~] = vl_kdtreequery(kdtree, X, X(:,i), 'NumNeighbors', 6) ;% 排除样本本身index = index(index ~= i);% 构造邻接矩阵A,此处可以体会邻接矩阵为整个高光谱图的邻接矩阵A(i,index) = 1;
end
if A == A'disp("对称矩阵");
else disp("非对称矩阵");
end
%% 

三、像素角度来构建图

3.1 像素作为图结构的节点,则G = (V,E,X),V = { vi=1,...,n_{i = 1,...,n}i=1,...,n}是顶点集合,E = { eij_{ij}ij}是边集合,X = { xi_ii;…;xn_nn}是属性值。

  • X ∈ Rn×d^{n×d}n×d
  • 邻接矩阵 A∈Rn×n^{n×n}n×n,如果eij_{ij}ij ∈E,则Aij_{ij}ij = 1,否则为0;

3.2 需要构造邻接矩阵A,需要知道图结构的边集;

在这里插入图片描述

总结

主要介绍高光谱图像利用结构信息和内容信息进行特征提取时,结构信息的构造,在这里主要就是邻接矩阵A的构造,梳理两篇论文中的方法,为自己理清思路,并做些编码记录;

参考文献

KNN 分类器:https://www.dazhuanlan.com/2019/10/23/5db00bf7d8ffb/
邻接矩阵A相关资料:https://www.cnblogs.com/pinard/p/6221564.html

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

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

相关文章

类脑量子叠加脉冲神经网络:从量子大脑假说到更好的人工智能

来源:神经现实作者:曾毅研究团队 |封面:Mario De Meyer排版:光影以深度神经网络为代表的现代人工智能模型在识别图像、语音、文字等模式信息任务取得优异表现。然而,生物大脑具有处理复杂多变的环境信息的能力&#xf…

遥感图像分类原理

1.原理 1.1 每一个像元作为一个样本,波段作为特征,理想情况下,同类地物应该具有相同或相似的特征描述,因此像元在n维特征空间中聚集在一起,而不同地物应该具有不同的特征描述,因此不同特征地物像元在n维空间…

2019第一次作业

10.实验代码 include <stdio.h> int main(void) { int i, f, X, N; scanf("%d",&N); int a [N]; scanf("%d",&X); f0; for(i0;i<N;i){ scanf("%d",&a[i]); if(a[i]X){ printf("%d",i); f; } } if(f0){ printf(&q…

分布式——ACID原则 CAP理论

分布式计算的原理 分布式计算就是将计算任务分摊到大量的计算节点上&#xff0c;一 起完成海量的计算任务。而分布式计算的原理和并行计算 类似&#xff0c;就是将一个复杂庞大的计算任务适当划分为一个个 小任务&#xff0c;任务并行执行&#xff0c;只不过分布式计算会将这些…

Matlab高光谱样本相关性分析

一.高光谱图像数据分析 1.分析光谱波段的相关性 1.1 对于维度为(m,n,b)的高光谱数据&#xff0c;使用reshape函数将其变换为(N,b)维度的&#xff0c;其中N m x n&#xff0c;表示像素数量&#xff0c;b表示波段数。 1.2 分析样本(像素)间波段的相关性&#xff0c;采用函数c…

万众瞩目的特斯拉AI日,会有哪些惊喜?

来源&#xff1a;华尔街见闻作者&#xff1a;方凌8月19日&#xff0c;特斯拉AI日即将举行。马斯克此前曾表示&#xff0c;此次AI日将展示特斯拉在人工智能方面硬件和软件开发的进展&#xff0c;并且招募顶级人才。活动的日子日渐临近&#xff0c;对于特斯拉究竟将在放出什么“大…

第一次会议(2019/02/22)

小组名称及成员介绍 小组名称&#xff1a;Triple兔成员介绍&#xff08;均为1703班&#xff09;项目经理&#xff1a;刘晓丽&#xff08;右上&#xff09;前端开发&#xff1a;刘晓丽&#xff08;右上&#xff09;、王亚群&#xff08;右下&#xff09;后端开发&#xff1a;乔疏…

JVM 工作原理和流程

作为一名Java使用者&#xff0c;掌握JVM的体系结构也是必须的。 说起Java&#xff0c;人们首先想到的是Java编程语言&#xff0c;然而事实上&#xff0c;Java是一种技术&#xff0c;它由四方面组成&#xff1a;Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Jav…

中国未来技术学院盘点

来源&#xff1a;科学网8月19日&#xff0c;上海交通大学未来技术学院正式揭牌成立。香港首富、宁德时代公司董事长曾毓群担任未来技术学院名誉院长&#xff0c;宁德时代首席制造官和工程制造及研发体系联席总裁倪军出任首任院长。一家市值超万亿的高科技龙头企业掌门人和高管&…

QT高级编程之QT基本概览

QT高级编程 主要从以下几个方面来介绍QT高级编程&#xff0c;并介绍QT相关的概念。 1、 QT部件Widget&#xff1b; 2、 QT信号与槽机制&#xff1b; 3、 对象树关系&#xff1b; 4、 布局管理&#xff1b; 5、标准对话框以及自定义对话框&#xff1b; 6、文件与目录&#xff…

计算机视觉中的自注意力

来源&#xff1a;机器学习研究组订阅自从引入网络以来&#xff0c;深度学习中的注意力机制在机器翻译和 社区中广受欢迎。然而&#xff0c;在计算机视觉中&#xff0c;卷积神经网络 (CNN) 仍然是常态&#xff0c;自注意力才刚刚开始慢慢渗透到研究的主体中&#xff0c;要么补充…

QT信号与槽-启动系统程序以及相关控件介绍

1.1 创建一个继承至QWidget的项目。 1.2 设计界面,分析界面采用的布局方式。 首先&#xff0c;每行控件采用水平布局方式&#xff0c;第三行为了使控件靠右&#xff0c;前面添加一个占位控件。三行采用垂直平局&#xff1b;选中控件&#xff0c;通过右键可以控件的布局方式&a…

科技部向全社会征集颠覆性技术研发方向

来源&#xff1a;人民网据科技部网站消息&#xff0c;为提升我国重大科技创新方向前瞻布局能力&#xff0c;加快推动颠覆性技术创新&#xff0c;科技部办公厅拟面向各有关单位和广大科研人员&#xff0c;开展颠覆性技术研发方向建议征集工作&#xff0c;对于符合条件的建议&…

springboot前后端分离项目MultipartFile获取前端传的file为null问题

【问题描述】 springbootvue 前后端分离项目&#xff0c;在对接上传文件功能时&#xff0c;一直显示文件为空。 【分析】 查找了很多博客&#xff0c;解决方法五花八门&#xff0c;但原因应该还是 springboot自带的org.springframework.web.multipart.MultipartFile和Multi…

计算机网络( 二十二)-数据链路层(补充)

1.链路link&#xff1a;结点------>相邻结点的物理线路。 2.数据链路&#xff1a;物理线路通信协议,通信协议(通信规程)用来控制数据的传输。 3.最常用网络适配器(硬件、软件)来实现协议。适配器包括了数据链路层和物理层两层的功能。 4.数据链路层的协议数据单元PDU------帧…

《科学之路》| 图灵奖得主杨立昆人工智能十问:AI会统治人类吗?

来源&#xff1a;《科学之路》作者&#xff1a;杨立昆封面&#xff1a;Yukai Du即便是最先进的人工智能系统也存在局限性&#xff0c;它们还不如一只猫聪明。人工智能常常被认为是一项将要颠覆世界的技术&#xff0c;从这一概念诞生至今的65年中&#xff0c;无数电影与小说塑造…

计算机网络(二十三)-网络层-概述与数据交换方式

一.网络层的功能 主要任务是把分组从源端传送到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。 网络层传输单位是数据报。功能 路由选择与分组转发&#xff0c;最佳路径。异构网络互联&#xff1b;拥塞控制&#xff1b; 若所有结点都来不及接收分组&#xff0c;网…

数字大脑学术沙龙:“城市大脑与应急管理专题研讨会”成功召开

来源&#xff1a;城市大脑全球标准研究组2021年以来城市大脑的建设与研究获得了长足发展&#xff0c;数百个城市开展了城市大脑的建设与规划&#xff0c;取得了诸多成果。于此同时&#xff0c;伴随着疫情、水灾、交通事故、环境事故的不断出现&#xff0c;城市大脑如何应对应急…

Java 注解:@PostConstruct和@PreConstruct

从Java EE5规范开始&#xff0c;Servlet增加了两个影响Servlet生命周期的注解&#xff08;Annotation&#xff09;&#xff1a;PostConstruct和PreConstruct。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。 使用方式&#xff0c;例如&#xff…

计算机网络(二十四)-路由算法及路由协议

1.1 路由算法 将最优的路径填入路由转发表。 1.2 路由算法分类 静态路由算法(非自适应路由算法)&#xff1a;管理员手动配置路由信息。 简便、可靠&#xff0c;在负载稳定、拓扑变化不大的网络中运行效果很好&#xff0c;广泛用于高度安全性的军事网络和较小的商业网络。 动…