表示和描述(3)

2021-07-12 03:15:24 字數 3165 閱讀 8945

接上篇 表示和描述(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能正確識別每乙個專案的順序。這個時候,能夠採用配...