MATLAB高光谱图像构建KNN图
在高光譜圖像的特征提取過程中,采用非線性降維的方式對高光譜圖像降維的過程中,采用圖自編碼器來對數(shù)據(jù)進(jìn)行降維,需要將利用高光譜圖像的結(jié)構(gòu)信息和內(nèi)容信息,則需要將高光譜圖像數(shù)據(jù)構(gòu)造為一個圖結(jié)構(gòu),圖結(jié)構(gòu)的構(gòu)建需要通過KNN算法來構(gòu)建鄰接矩陣。
文章目錄
- 前言
- 一、KNN圖
- 二、鄰接矩陣A的構(gòu)建
- 1.鄰接矩陣A
- 2.高光譜圖像構(gòu)造KNN圖
- 三、像素角度來構(gòu)建圖
- 總結(jié)
- 參考文獻(xiàn)
前言
主要介紹圖結(jié)構(gòu)的構(gòu)建方法。
對于一個M x N x B維度的高光譜圖像,構(gòu)建KNN圖可以從像素的角度,也可以從波段的角度來構(gòu)建,對于整個高光譜圖像來說,從像素的角度來構(gòu)建KNN圖的話(每一個像素作為圖節(jié)點(diǎn)),則鄰接矩陣的大小為n * n維度,其中n = M x N。而從波段的角度來構(gòu)建KNN圖的話(每一個波段作為圖節(jié)點(diǎn)),則鄰接矩陣的大小為B x B維度。
一、KNN圖
1.1 高光譜波段向量集合,X = { xi_ii?}i=1N_{i = 1}^Ni=1N? ∈ RN?B^{N * B}N?B,即 X為一個像素對應(yīng)的波段集合,N和B分別為像素數(shù)和光譜波段數(shù)。
將高光譜圖像維度變換為RN?B^{N * B}N?B形式,通過如下代碼。
load('SalinasA_corrected.mat') data = salinasA_corrected; [width,height,band] = size(data); hsi = reshape(data,width * height,band);1.2 同時考慮光譜特征X和光譜波段的結(jié)構(gòu)信息,我們首先將帶集轉(zhuǎn)換成一個帶圖G = (V,E, A),其中光譜帶xi_ii?被視為圖上的一個節(jié)點(diǎn)vi_ii?,E是通過計算每個光譜帶的k近鄰(kNN)來構(gòu)造的。其中,鄰域矩陣A∈Rb×b_{b×b}b×b?。
1.3 通過計算歐幾里得距離得到了鄰域關(guān)系,用這種方法構(gòu)造的圖稱為kNN圖。
1.4 由于KNN算法是一個監(jiān)督算法,需要使用到數(shù)據(jù)的標(biāo)簽信息,通過如下代碼加載標(biāo)簽信息,便進(jìn)行維度變換,通常情況下,標(biāo)簽0對應(yīng)的像素我們不用來構(gòu)造KNN圖。
1.5 KNN算法模型的搭建
- 通過采用MATLAB內(nèi)置的函數(shù)fitcknn函數(shù)來構(gòu)建。fitcknn函數(shù)接受的數(shù)據(jù)為一行一條數(shù)據(jù),一列一個特征維度,因此需要主要數(shù)據(jù)的維度變換。
kNNClassifier = fitcknn(X, Y, ‘NumNeighbors’, 1)
- X為訓(xùn)練數(shù)據(jù),Y為標(biāo)簽數(shù)據(jù);
- X每一行為一天數(shù)據(jù),每條數(shù)據(jù)有多個特征;
- Y每一行為一個標(biāo)簽,與X數(shù)據(jù)對應(yīng);
- 輸出為一個KNN分類器模型;
構(gòu)造一個KNN分類器,分為5個類,默認(rèn)采用歐幾里得距離公式;
KnnClassifier = fitcknn(hsi,label,'NumNeighbors', 5);1.6 KNN模型預(yù)測分類
采用predict函數(shù),輸出參數(shù)為分類器模型,測試數(shù)據(jù);測試數(shù)據(jù)為每一行為一條數(shù)據(jù)。
1.7 k近鄰計算
- 由于上述KNN算法只能用于分類任務(wù),并沒有給出k個近鄰,因此我們采用工具箱VLFeat來進(jìn)行k近鄰的計算;k近鄰的計算不需要使用標(biāo)簽數(shù)據(jù),而KNN分類器需要使用標(biāo)簽數(shù)據(jù)來分類。
K近鄰計算參考及工具箱安裝:https://blog.csdn.net/john_bian/article/details/79424432
VLF eat下載:https://www.vlfeat.org/index.html
KNN原理介紹:https://www.cnblogs.com/pinard/p/6061661.html
二、鄰接矩陣A的構(gòu)建
1.鄰接矩陣A
采用如下的公式來構(gòu)造鏈接矩陣A,其中Nk_kk?(xi_ii?)為xi_ii?的kNN。
需要保證鄰接矩陣是對稱矩陣。
2.高光譜圖像構(gòu)造KNN圖
基于上述知識,來構(gòu)造高光譜圖像的KNN圖,對于高光譜圖像,我們把每個像素作為一個樣本,B個波段作為特征,讓后對每個像素的波段集合,計算其k近鄰,讓后根據(jù)公式構(gòu)造鄰接矩陣;
- 從像素角度構(gòu)造鄰接矩陣,A ∈ Rn×n^{n×n}n×n,確定,像素數(shù)量大,導(dǎo)致鄰接矩陣過大。
- 從波段的角度來構(gòu)造鄰接矩陣,鄰接矩陣A ∈ Rb×b^{b×b}b×b。
三、像素角度來構(gòu)建圖
3.1 像素作為圖結(jié)構(gòu)的節(jié)點(diǎn),則G = (V,E,X),V = { vi=1,...,n_{i = 1,...,n}i=1,...,n?}是頂點(diǎ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 需要構(gòu)造鄰接矩陣A,需要知道圖結(jié)構(gòu)的邊集;
總結(jié)
主要介紹高光譜圖像利用結(jié)構(gòu)信息和內(nèi)容信息進(jìn)行特征提取時,結(jié)構(gòu)信息的構(gòu)造,在這里主要就是鄰接矩陣A的構(gòu)造,梳理兩篇論文中的方法,為自己理清思路,并做些編碼記錄;
參考文獻(xiàn)
KNN 分類器:https://www.dazhuanlan.com/2019/10/23/5db00bf7d8ffb/
鄰接矩陣A相關(guān)資料:https://www.cnblogs.com/pinard/p/6221564.html
總結(jié)
以上是生活随笔為你收集整理的MATLAB高光谱图像构建KNN图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的驱动开发——设备号
- 下一篇: 3D模型格式解析(OBJ)