壓縮感知重構演算法之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 增量矩陣 初始值為空...