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}N?B,即 X為一個像素對應的波段集合,N和B分別為像素數和光譜波段數。
將高光譜圖像維度變換為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和光譜波段的結構信息,我們首先將帶集轉換成一個帶圖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圖。
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函數,輸出參數為分類器模型,測試數據;測試數據為每一行為一條數據。
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
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,確定,像素數量大,導致鄰接矩陣過大。
- 從波段的角度來構造鄰接矩陣,鄰接矩陣A ∈ Rb×b^{b×b}b×b。
三、像素角度來構建圖
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
總結
以上是生活随笔為你收集整理的MATLAB高光谱图像构建KNN图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的驱动开发——设备号
- 下一篇: 3D模型格式解析(OBJ)