主成分分析實現的乙個心得

2021-08-29 17:54:05 字數 1910 閱讀 1153

主成份分析(principal component analysis,pca)也叫做主成份變換、主分量分析或 —l(karhunen—loeve)變換,是建立在統計特徵基礎上的多維(如多波段)正交線

性變換。它是遙感影象處理中最常用也是最有用的變換演算法之一。

這次我要實現乙個主成分分析演算法,圖是做出來了,但是和著名的遙感軟體pci和envi的效果比起來很差。如第一主成分的圖如下:

上面噪音極多,而且看起來不合諧。我知道自己的演算法有問題,在排除了自己的讀取影象的問題後。我考慮到是不是求取特徵矩陣時出了問題,因為主成分的輸出資料是y=x*a。

其中x為原影象,y為目標影象,a為特徵向量矩陣。由此我懷疑我的特徵矩陣求取有問題。後來從網上找了一種求特徵矩陣的辦法,進行主成分分析的效果。下面是具體的實現**:

//計算特徵向量

/*pdblcof[in][out]-----協方差矩陣

lchannelcount[in]------影象的輸入波段數

pdblvects[out]----特徵向量矩陣

dbleps[in]----誤差範圍,我取為0.0000001

ljt[in]-----迴圈次數,我取為1000000

*/static

intijcobimatrixcharactervalue(double**pdblcof,longlchannelcount,std::vector&pdblvects,doubledbleps,longljt)

while(1)

}if(fmreturn1;

if(l>ljt)return0;

l+=1;

u=p*lchannelcount+q;w=p*lchannelcount+p;t=q*lchannelcount+p;s=q*lchannelcount+q;

x=-pdblcof[p][q];

y=(pdblcof[q][q]-pdblcof[p][p])/2.0;

omega=x/sqrt(x*x+y*y);

if(y<0)omega=-omega;

sn=1.0+sqrt(1.0-omega*omega);

sn=omega/sqrt(2.0*sn);

cn=sqrt(1.0-sn*sn);

fm=pdblcof[p][p];

pdblcof[p][p]=fm*cn*cn+pdblcof[q][q]*sn*sn+pdblcof[p][q]*omega;

pdblcof[q][q]=fm*sn*sn+pdblcof[q][q]*cn*cn-pdblcof[p][q]*omega;

pdblcof[p][q]=0.0;

pdblcof[q][p]=0.0;

for(j=0;jif((j!=p)&&(j!=q))

for(i=0;iif((i!=p)&&(i!=q))

for(i=0;i

}return1;

}//根據特徵值從大到小排列特徵向量矩陣

/*pfmatrix[in][out]-----上一步輸出的協方差矩陣

nbandnum[in]------影象的輸入波段數

pdblvects[out]----上一步輸出的特徵向量矩陣

*/static

voidsorteigenvector(double**pfmatrix,intnbandnum,std::vector&pfvector)

if(p!=i) }}

}執行上面兩步之後,所得到的特徵矩陣為用於和原影象相乘的矩陣a.

對一幅tm影象的第1,2,3,4,5,7通道執行pca操作,效果圖如下:

第一主成分:

第二主成分:

第三主成分:

第四主成分:

第五主成分:

第六主成分:

從上面可以看出,正確的影象看起來視覺非常和諧,毫無刺目的感覺。

主成分分析實現的乙個心得

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!主成份分析 principal component analysis,pca 也叫做主成份變換 主分量分析或 l karhunen loeve 變換,是建立在統計特徵基礎上的多維 如多波段 正交線 性變換。它是遙感影象處理中最常用也是最有用的變換演...

主成分分析Matlab實現

資料匯入及處理 clcclear all a xlsread coach.xlsx b2 h16 資料標準化處理 a size a,1 b size a,2 for i 1 b sa i a i mean a i std a i end 計算相關係數矩陣的特徵值和特徵向量 cm corrcoef s...

Python 實現主成分分析

python 實現主成分分析 主成分分析 principal component analysis,pca 是最常用的一種降維方法,通常用於高維資料集的探索與視覺化,還可以用作資料壓縮和預處理等。矩陣的主成分就是其協方差矩陣對應的特徵向量,按照對應的特徵值大小進行排序,最大的特徵值就是第一主成分,其...