压缩感知重构算法之IHT算法python实现
来源:互联网 发布:影视cms系统 编辑:程序博客网 时间:2024/05/17 23:15
IHT(iterative hard thresholding )算法是压缩感知中一种非常重要的贪婪算法,它具有算法简单的有点,且易于实现,在实际中应用较多。本文给出了IHT算法的python和matlab代码(本文给出的代码未经过优化,所以重建质量不是非常好),以及完整的仿真过程。
算法流程
python代码
要利用python实现,电脑必须安装以下程序
- python (本文用的python版本为3.5.1)
- numpy python包(本文用的版本为1.10.4)
- scipy python包(本文用的版本为0.17.0)
- pillow python包(本文用的版本为3.1.1)
#coding:utf-8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# DCT基作为稀疏基,重建算法为IHT算法,图像按列进行处理# 参考文献: Carrillo R E, Polania L F, Barner K E. Iterative hard thresholding for compressed sensing #with partially known support[C]#//Acoustics, Speech and Signal Processing (ICASSP), #2011 IEEE International Conference on. IEEE, 2011: 4028-4031.# #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#导入集成库import math# 导入所需的第三方库文件import numpy as np #对应numpy包from PIL import Image #对应pillow包#读取图像,并变成numpy类型的 arrayim = np.array(Image.open('lena.bmp'))#图片大小256*256#生成高斯随机测量矩阵sampleRate=0.7 #采样率Phi=np.random.randn(256,256)u, s, vh = np.linalg.svd(Phi)Phi = u[:256*sampleRate,] #将测量矩阵正交化#生成稀疏基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)#IHT算法函数def cs_IHT(y,D): K=math.floor(y.shape[0]/3) #稀疏度 result_temp=np.zeros((256)) #初始化重建信号 u=0.5 #影响因子 result=result_temp for j in range(K): #迭代次数 x_increase=np.dot(D.T,(y-np.dot(D,result_temp))) #x=D*(y-D*y0) result=result_temp+np.dot(x_increase,u) # x(t+1)=x(t)+D*(y-D*y0) temp=np.fabs(result) pos=temp.argsort() pos=pos[::-1]#反向,得到前面L个大的位置 result[pos[K:]]=0 result_temp=result 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_IHT(img_cs_1d[:,i],Theta_1d) #利用IHT算法计算稀疏系数 sparse_rec_1d[:,i]=column_rec; img_rec=np.dot(mat_dct_1d,sparse_rec_1d) #稀疏系数乘上基矩阵#显示重建后的图片image2=Image.fromarray(img_rec)image2.show()
matlab代码
%代码在matlab2010b测试通过function Demo_CS_IHT()%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% the DCT basis is selected as the sparse representation dictionary% instead of seting the whole image as a vector, I process the image in the% fashion of column-by-column, so as to reduce the complexity.% Author: Chengfu Huo, roy@mail.ustc.edu.cn, http://home.ustc.edu.cn/~roy% Reference: T. Blumensath and M. Davies, “Iterative Hard Thresholding for% Compressed Sensing,” 2008.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%------------ read in the image --------------img=imread('lena.bmp'); % 256*256大小img=double(img);[height,width]=size(img);sampleRate=0.7; %采样率%------------ form the measurement matrix and base matrix ---------------%Phi=randn(floor(height/3),width); % only keep one third of the original data %Phi = Phi./repmat(sqrt(sum(Phi.^2,1)),[floor(height/3),1]); % normalize each columnPhi = orth(rand(256, 256));Phi=Phi(1:256*sampleRate, :);mat_dct_1d=zeros(256,256); % building the DCT basis (corresponding to each column)for k=0:1:255 dct_1d=cos([0:1:255]'*k*pi/256); if k>0 dct_1d=dct_1d-mean(dct_1d); end; mat_dct_1d(:,k+1)=dct_1d/norm(dct_1d);end%--------- projection ---------img_cs_1d=Phi*img; % treat each column as a independent signal%-------- recover using omp ------------sparse_rec_1d=zeros(height,width); Theta_1d=Phi*mat_dct_1d;for i=1:width column_rec=cs_iht(img_cs_1d(:,i),Theta_1d,height); sparse_rec_1d(:,i)=column_rec'; % sparse representationendimg_rec_1d=mat_dct_1d*sparse_rec_1d; % inverse transform%------------ show the results --------------------figure(1)subplot(2,2,1),imagesc(img),title('original image')subplot(2,2,2),imagesc(Phi),title('measurement mat')subplot(2,2,3),imagesc(mat_dct_1d),title('1d dct mat')psnr = 20*log10(255/sqrt(mean((img(:)-img_rec_1d(:)).^2)));subplot(2,2,4),imshow(uint8(img_rec_1d));title(strcat('PSNR=',num2str(psnr),'dB'));disp('over')%************************************************************************%function hat_x=cs_iht(y,T_Mat,m)% y=T_Mat*x, T_Mat is n-by-m% y - measurements% T_Mat - combination of random matrix and sparse representation basis% m - size of the original signal% the sparsity is length(y)/4hat_x_tp=zeros(m,1); % initialization with the size of original s=floor(length(y)/4); % sparsityu=0.5; % impact factor% T_Mat=T_Mat/sqrt(sum(sum(T_Mat.^2))); % normalizae the whole matrixfor times=1:s x_increase=T_Mat'*(y-T_Mat*hat_x_tp); hat_x=hat_x_tp+u*x_increase; [val,pos]=sort((hat_x),'descend'); % why? worse performance with abs() hat_x(pos(s+1:end))=0; % thresholding, keeping the larges s elements hat_x_tp=hat_x; % updateend
参考文章
1、Carrillo R E, Polania L F, Barner K E. Iterative hard thresholding for compressed sensing with partially known support[C]//Acoustics, Speech and Signal Processing (ICASSP), 2011 IEEE International Conference on. IEEE, 2011: 4028-4031.
0 0
- 压缩感知重构算法之IHT算法python实现
- 压缩感知重构算法之迭代硬阈值(IHT)
- 压缩感知重构算法之迭代硬阈值(Iterative Hard Thresholding,IHT)
- 压缩感知重构算法之迭代硬阈值(Iterative Hard Thresholding,IHT)
- 压缩感知重构算法之OMP算法python实现
- 压缩感知重构算法之SP算法python实现
- 压缩感知重构算法之CoSaMP算法python实现
- 压缩感知重构算法之OLS算法python实现
- 压缩感知重构算法之IRLS算法python实现
- 压缩感知重构算法之正交匹配追踪(OMP)
- 压缩感知重构算法之正交匹配追踪(OMP)
- 压缩感知重构算法之正交匹配追踪(OMP)
- 压缩感知重构算法之迭代软阈值(IST)
- 压缩感知重构算法之正交匹配追踪(OMP)
- 压缩感知重构算法之压缩感知匹配追踪(CoSaMp)
- 压缩感知重构算法——SP算法
- 压缩感知重构算法之压缩采样匹配追踪(CoSaMP)
- 压缩感知重构算法之压缩采样匹配追踪(CoSaMP)
- ASP.NET 宏观总结
- GDB之coredump的学习
- Java大牛养成记(3)——SSH框架
- Hi3516A 开发流程(一)
- uva 10474 Where is the Marble?
- 压缩感知重构算法之IHT算法python实现
- limits.h在实际编程中的作用
- Calender类的应用
- JavaWeb开发之十七:jsp自定义标签开发入门
- 一台电脑上运行两个tomcat
- (6)最简单的ICE例子
- 关于求从1数到某个数出现“1”的次数
- HDU 1060 Leftmost Digit
- JDK中的设计模式应用实例