奇異值分解SVD eigen opencv實現

2021-09-25 00:04:38 字數 2494 閱讀 3060

opencv 實現

先貼上奇異值分解的物理意義:

再貼一下之前寫的筆記:

;//分離通道

std::vector src;

split

(img, src)

;for

(int i =

0; i < src.

size()

/*==channels*/

; i++

)//svd

std::vectorw, u, vt,s;

for(

int i =

0; i < channels; i++)//

mat s1 = mat::

zeros

(w[0

].rows, w[0]

.rows, cv_32f)

; mat s2 = mat::

zeros

(w[1

].rows, w[1]

.rows, cv_32f)

; mat s3 = mat::

zeros

(w[2

].rows, w[2]

.rows, cv_32f)

; s.

push_back

(s1)

; s.

push_back

(s2)

; s.

push_back

(s3)

;for

(int j =

0; j < img.rows; j++

)merge

(src, img)

;imshow

("img"

, img);//

if(j

0.05

)waitkey

(1000);

else

waitkey(1

);//}

getchar()

;//return0;

}

#include

#include

#include

#include

//using eigen::matrixxf;

using

namespace eigen;

using

namespace eigen::internal;

using

namespace eigen::architecture;

intmain()

執行結果:

// 利用eigen庫,採用svd分解的方法求解矩陣偽逆,預設誤差er為0

eigen::matrixxd pinv_eigen_based

(eigen::matrixxd & origin,

const

float er =0)

else

}// pinv_matrix = v * s * u^t

return v * s * u.

transpose()

;}intmain()

執行結果:

//發現沒啥用

void

printmat

(mat & m)

cout<

intmain()

**沒整理,見諒。執行結果:

奇異值分解

奇異值分解 singular value decomposition 是線性代數中一種重要的 矩陣分解,是矩陣分析中正規矩陣酉對角化的推廣。在訊號處理 統計學等領域有重要應用。1基本介紹 2理論描述 3幾何意義 4範數 5應用 求偽逆 平行奇異值模型 矩陣近似值 奇異值分解在某些方面與 對稱矩陣或 ...

奇異值分解

從幾何 的角度上來看奇異值分解 上圖表明任意的矩陣 a 是可以分解成三個矩陣相乘的形式。v表示了原始域的標準正交基,u表示經過a 變換後的co domain的標準正交基,表示了v 中的向量與u中相對應向量之間的關係。我們仔細觀察上圖發現,線性變換a可以分解為旋轉 縮放 旋轉這三種基本線性變換。接下來...

奇異值分解

本文 知乎 我們先舉乙個例子,假設現在我們拿到這樣一組資料,裡面有兩個屬性,既有以 千公尺 每小時 度量的最大速度特徵,也有 英里 小時 的最大速度特徵,顯然我們一眼就看出這兩個特徵有乙個多餘。怎麼直觀的判斷資料是否冗餘?上圖從左往右,我們可以發現資料之間的關聯性越來越強,也就是說兩組資料越來越 相...