suzuzusu日記

(´・ω・`)

Higher-Order-SVDで画像の低ランク近似

HOSVD

SVDは行列の低ランク近似手法であり,Higher-Order-SVD(HOSVD)はSVDをテンソルに拡張した手法です. HOSVDではタッカー分解というコアテンソルとそれぞれのモードの行列に分解する方法を使用します.以下にその概要を図示しました.

f:id:suzuzusu:20191104153601p:plain
タッカー分解

方法

m \times n \times l の3階テンソルを例にしてタッカー分解をする方法を説明します.まず最初に,m \times n \cdot ln \times l \cdot ml \times m \cdot nのそれぞれの行列に分解しSVDをします.

A = U \Sigma V^{\ast}

上記の式から,分解されたユニタリ行列UからコアテンソルSを以下のように定義します.

S :=\{ U_{m}^{T}, U_{n}^{T}, U_{l}^{T} \} \cdot M

元のテンソルに復元するためには,以下のように再度ユニタリ行列Uを使います.

M :=\{ U_{m}, U_{n}, U_{l} \} \cdot S

上記のユニタリ行列Uを任意のランクに切り取ることで,低ランク近似が可能となります.

3階テンソルであるカラー画像を使って,画像の低ランク近似をしてみます.使用する画像は画像処理でよく使われるレナ画像を使用します.

オリジナル画像

f:id:suzuzusu:20191104160723p:plain

Rank1の画像

f:id:suzuzusu:20191104160855p:plain

Rank5の画像

f:id:suzuzusu:20191104160906p:plain

Rank10の画像

f:id:suzuzusu:20191104160914p:plain

Rank20の画像

f:id:suzuzusu:20191104160924p:plain

Rank30の画像

f:id:suzuzusu:20191104160934p:plain

Rank50の画像

f:id:suzuzusu:20191104160942p:plain

Rank100の画像

f:id:suzuzusu:20191104160950p:plain

実装コード

gist.github.com

github.com

参考