接上篇 表示和描述(2)
主分量描述適用於邊界和區域。用在區域(影象)上可以抽取方差最大的分量(主分量),用在邊界上可以對其做縮放、平移和旋轉的歸一化。
主分量(pca)一般用於資料降維,因為大特徵值對應影象細節(高頻)。
主分量的計算過程可歸納為(具體分析參考):由多組特徵向量計算均值向量m,由此得到協方差矩陣,計算該矩陣(實對稱)的特徵值,按從大到小排列,選擇前n個特徵值對應的特徵向量,按行組成變換矩陣a,這樣,對原來的每一條向量x,其對映得到的向量y=a(x-m)。
1)使用主分量描述影象
考慮一系列m*n大小的6波段遙感圖,將其資料組織為(m*n)*6的二維矩陣,每一行即為乙個特徵向量。
// 準備資料
int i, j, k;
mat src[6];
src[0] = imread("../dip_code+image/image/dipum_images_ch11/fig1125(a)(washingtondc_band1_512).tif", 0);
src[1] = imread("../dip_code+image/image/dipum_images_ch11/fig1125(b)(washingtondc_band2_512).tif", 0);
src[2] = imread("../dip_code+image/image/dipum_images_ch11/fig1125(c)(washingtondc_band3_512).tif", 0);
src[3] = imread("../dip_code+image/image/dipum_images_ch11/fig1125(d)(washingtondc_band4_512).tif", 0);
src[4] = imread("../dip_code+image/image/dipum_images_ch11/fig1125(e)(washingtondc_band5_512).tif", 0);
src[5] = imread("../dip_code+image/image/dipum_images_ch11/fig1125(f)(washingtondc_band6_512).tif", 0);
mat srcdata(src[0].rows*src[0].cols, 6, cv_32fc1);
for (i = 0; i < src[0].rows; i++)
}// pca計算
// 取前4組特徵值
pca pca(srcdata, mat(), cv_pca_data_as_row, 4);
cout << "eigenvalues:" << endl;
for (i = 0; i < pca.eigenvalues.rows; i++)
cout <
cout << "eigenvectors:" << endl;
for (i = 0; i < pca.eigenvectors.rows; i++)
//for (i = 0; i < srcdata.rows; i++)
mat dst[6];
for (i = 0; i < 6; i++)
dst[i] = mat(src[0].size(), cv_8uc1);
for (i = 0; i < src[0].rows; i++)
}namedwindow("band1_");
namedwindow("band2_");
namedwindow("band3_");
namedwindow("band4_");
namedwindow("band5_");
namedwindow("band6_");
imshow("band1_", dst[0]);
imshow("band2_", dst[1]);
imshow("band3_", dst[2]);
imshow("band4_", dst[3]);
imshow("band5_", dst[4]);
imshow("band6_", dst[5]);
waitkey(0);
圖3-1為取前4個特徵值恢復得到的第6波段影象,可以看到,原始圖比較模糊,但恢復的影象很清晰,因為模糊的部分(對應小特徵值)已被丟棄
圖3-1. 左為原圖,右為pca後的圖
2)使用主分量歸一化邊界
假設共n個點,則組織資料為n*2
對所有特徵向量,應用y=a(x-m)即獲得歸一化描述
mat srcdata = (mat_(4, 2) << 1, 1, 2, 4, 4, 2, 5, 5);
pca pca(srcdata, mat(), cv_pca_data_as_row);
int i, j;
mat normali(srcdata.size(), srcdata.type());
for (i = 0; i < srcdata.rows; i++)
cout << "normalization:" << endl;
for (i = 0; i < normali.rows; i++)
//for (i = 0; i < srcdata.rows; i++)
cout << "_normalization:" << endl;
for (i = 0; i < normali.rows; i++)
從**效果來看,opencv提供的pca.project就是實現的y=a(x-m)
關係描述旨在用一套模式來描述邊界或區域。
關係描述首先定義一些基本描述元,如用a表示向右乙個畫素,b表示向下乙個畫素;然後定義一套規則,如(1) s->aa (2)a->bs (3) a->b。則規則組合(1)(2)(1)(3)表示的邊界為(圖4-1)
圖4-1. 關係描述(《數字影象處理》)
另一種是用樹的形式描述每個邊界或區域的從屬關係。
data structure 3 棧的表示和實現
1 順序棧 include include define status int define ok 1 define error 0 define overflow 2 define stack init size 20 define stackincrement 5 define selemtyp...
使用者描述 和 組描述 和 遠端連線
組管理遠端連線 每乙個使用者登入系統後,擁有不同的操作許可權。每乙個賬戶有自己唯一的sid 安全識別符號 使用者sid xx xx x 500系統sid xx xx x 使用者uid 500windows系統管理員administrator的uid是500。普通使用者的uid是1000開始。不同的賬...
Highcharts資料表示 3
採用物件陣列的形式,能夠明白節點上每乙個專案的值。可是當節點較多時,會造成大量的冗餘 假設不寫配置項名稱,物件陣列就能夠簡化二維陣列。形式例如以下 這個時候。能夠節省非常多 書寫量。可是因為不同的資料列可能包括的專案不同,所以須要讓highcharts能正確識別每乙個專案的順序。這個時候,能夠採用配...