张量的理解与应用

什么是张量

  张量是多维数组的泛概念。一维数组我们通常称之为向量,二维数组我们通常称之为矩阵,但其实这些都是张量的一种。以此类推,我们也会有三维张量、四维张量以及五维张量。那么零维张量是什么呢?其实零维张量就是一个数。

张量的基本操作

两个张量的内积

<χ,y>=i1=1I1i2=1I2...iN=1INxi1i2...iNyi1i2...iN <\chi,y>=\sum_{i_1=1}^{I_1} \sum_{i_2=1}^{I_2} ... \sum_{i_N=1}^{I_N} x_{i_1 i_2 ... i_N} y_{i_1 i_2 ... i_N}

介绍

observation[I]=image[Iclean]+noise[η] observation[I] = image[I_{clean}]+noise[\eta]

算法描述

张量简介

HOSVD分解

基于HOSVD的去噪算法

算法流程

Algorithm 1:HOSVD denoising
input :InoisyI_{noisy}:original imag,σ\sigma
output:IdenoisedI_{denoised}:Denoised image
Set kHard = 8
Precomputes Block matching with threshold:3×chnls×σ2×kHard23 \times chnls \times \sigma^2 \times kHard^2
foreach pixel position (i,j) do
Define matrix unfold1(kHard,kHard \times nSx_r \times chnls)
Define matrix unfold1(kHard,kHard \times nSx_r \times chnls)
Define matrix unfold2(kHard,kHard \times nSx_r \times chnls)
Define matrix unfold3(chnls,kHard^2 \times nSx_r)
Define matrix unfold4(nSx_r,kHard^2 \times chnls)
Fill unfold1,unfold1,unfold1,unfold1 from InoisyI_{noisy}
Compute the SVD svdisvd_i of unfoldiunfold_i
Define matrix U42
if chnls==1 then
\llcornerU42=svd4svd_4.matrixU()\otimessvd2svd_2.matrixU()

if chnls==3 then
\llcornerU42=svd4svd_4.matrixU()\otimessvd3svd_3.matrixU()\otimessvd2svd_2.matrixU()

Define matrix core=svd1.matrixU()T×unfold1×U42svd_1.matrixU()^T \times unfold_1 \times U42
Threshold core using 2×log(kHard2×nSxr×chnls)\sqrt{2 \times \log(kHard^2 \times nSx_r \times chnls)}
Store denoised tensor fromCore = svdi.matrixU()×core×U42Tsvd_i.matrixU() \times core \times U42^T

Perform averaging of all ovelapping pathes to produce IdenoisedI_{denoised}
张量的理解与应用