壓縮感知重構演算法之SP演算法python實現

2021-07-10 14:31:43 字數 3355 閱讀 9860

壓縮感知重構演算法之omp演算法python實現

壓縮感知重構演算法之cosamp演算法python實現

壓縮感知重構演算法之sp演算法python實現

壓縮感知重構演算法之iht演算法python實現

壓縮感知重構演算法之ols演算法python實現

壓縮感知重構演算法之irls演算法python實現

sp(subspace pursuit)演算法是壓縮感知中一種非常重要的貪婪演算法,它有較快的計算速度和較好的重構概率,在實際中應用較多。本文給出了sp演算法的python和matlab**,以及完整的**過程。

參考文獻:dai w, milenkovic o. subspace pursuit for compressive sensing signal reconstruction[j]. information theory, ieee transactions on, 2009, 55(5): 2230-2249.

要利用python實現,電腦必須安裝以下程式

#coding:utf-8

#%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%%

# dct基作為稀疏基,重建演算法為sp演算法 ,影象按列進行處理

# 參考文獻: w. dai and o. milenkovic, 「subspace pursuit for compressive

# sensing signal reconstruction,」 2009.

#%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%#匯入整合庫

import math

# 匯入所需的第三方庫檔案

import numpy as np #對應numpy包

from pil import image #對應pillow包

#讀取影象,並變成numpy型別的 array

im = np.array(image.open('lena.bmp'))#大小256

*256

#生成高斯隨機測量矩陣

samplerate=0.7 #取樣率

phi=np.random.randn(256

*samplerate,256)

#生成稀疏基dct矩陣

mat_dct_1d=np.zeros((256,256))

v=range(256)

for k in range(0,256):

dct_1d=np.cos(np.dot(v,k*math.pi/256))

if k>0:

dct_1d=dct_1d-np.mean(dct_1d)

mat_dct_1d[:,k]=dct_1d/np.linalg.norm(dct_1d)

#隨機測量

img_cs_1d=np.dot(phi,im)

#sp演算法函式

def cs_sp(y,d):

k=math.floor(y.shape[0]/3)

pos_last=np.array(,dtype=np.int64)

result=np.zeros((256))

product=np.fabs(np.dot(d.t,y))

pos_temp=product.argsort()

pos_temp=pos_temp[::-1]#反向,得到前面l個大的位置

pos_current=pos_temp[0:k]#初始化索引集 對應初始化步驟1

residual_current=y-np.dot(d[:,pos_current],np.dot(np.linalg.pinv(d[:,pos_current]),y))#初始化殘差 對應初始化步驟2

while true: #迭代次數

product=np.fabs(np.dot(d.t,residual_current))

pos_temp=np.argsort(product)

pos_temp=pos_temp[::-1]#反向,得到前面l個大的位置

pos=np.union1d(pos_current,pos_temp[0:k])#對應步驟1

pos_temp=np.argsort(np.fabs(np.dot(np.linalg.pinv(d[:,pos]),y)))#對應步驟2

pos_temp=pos_temp[::-1]

pos_last=pos_temp[0:k]#對應步驟3

residual_last=y-np.dot(d[:,pos_last],np.dot(np.linalg.pinv(d[:,pos_last]),y))#更新殘差 #對應步驟4

if np.linalg.norm(residual_last)>=np.linalg.norm(residual_current): #對應步驟5

pos_last=pos_current

break

residual_current=residual_last

pos_current=pos_last

result[pos_last[0:k]]=np.dot(np.linalg.pinv(d[:,pos_last[0:k]]),y) #對應輸出步驟

return result

#重建sparse_rec_1d=np.zeros((256,256)) # 初始化稀疏係數矩陣

theta_1d=np.dot(phi,mat_dct_1d) #測量矩陣乘上基矩陣

for i in range(256):

print('正在重建第',i,'列。。。')

column_rec=cs_sp(img_cs_1d[:,i],theta_1d) #利用sp演算法計算稀疏係數

sparse_rec_1d[:,i]=column_rec;

img_rec=np.dot(mat_dct_1d,sparse_rec_1d) #稀疏係數乘上基矩陣

#顯示重建後的

image2=image.fromarray(img_rec)

image2.show()

壓縮感知重構演算法之子空間追蹤 SP

題目 壓縮感知重構演算法之子空間追蹤 sp 如果掌握了壓縮取樣匹配追蹤 cosamp 後,再去學習子空間追蹤 subspace pursuit 是一件非常簡單的事情,因為它們幾乎是完全一樣的。sp的提出時間比cosamp提出時間略晚,首個 版本是參考文獻 1 後來更新了兩次,最後在ieee tran...

壓縮感知演算法 壓縮感知演算法之正交匹配跟蹤

1壓縮感知理論基礎 壓縮感知 cs 技術處理訊號的過程一般分為以下三個步驟 訊號的稀疏表示。cs要求訊號具有稀疏性,若原始訊號是稀疏的,則可直接用於後續操作 若原始訊號具有稀疏性但不是稀疏的,則利用稀疏基將其稀疏化 觀測矩陣 也稱測量矩陣 觀測矩陣用於對原始訊號進行壓縮取樣 重構方法。重構是指從少量...

壓縮感知OMP演算法 OMP演算法的Matlab版本

omp演算法 omp的函式 s 測量 t 觀測矩陣 n 向量大小 function hat y omp fun s,t,k n size t,2 size size t 觀測矩陣大小 m size 1 測量 hat y zeros 1,n 待重構的譜域 變換域 向量 aug t 增量矩陣 初始值為空...