精华内容
下载资源
问答
  • 记忆梯度追踪压缩感知图像重构
  • 本工具箱包含常用的压缩感知图像重构算法,如OMP,BP,IHT,等算法,非常齐全。
  • 从测量矩阵和稀疏矩阵的互相关性角度出发,通过对测量矩阵和稀疏矩阵所...通过在DWT、DCT下的压缩感知图像重构实验验证了该方法的可行性,恢复效果得到一定程度的提高,相比于传统的小波恢复重构,达到了预期的效果。
  • 通过极大熵函数构造一种光滑函数来逼近最小[lp] 范数,对解序列进行离散化来近似最小[lp]范数的最优解,结合图像分块压缩感知技术(BCS),在MATLAB中对测试图像进行仿真实验。结果表明,与传统的BOMP(Block ...
  • 针对当前重建效果最好的基于低秩先验的NLR重建算法,忽略了图像的局部结构信息,不能有效地重建图像的边缘,为了在...实验结果表明,与传统的稀疏性先验重建算法和NLR算法相比,所提算法能够获得更高的图像重构质量。
  • 基于OMP算法的快速压缩感知图像重构[J].云南大学学报(自然科学版), 2017,39(2): 207-211.MA Bo-heng, PENG Yi. Fast compressed sensing image reconstruction based on OMP algorithm[J]. Journal of Yunnan ...

    引用本文

    d0211765ce4bbfcdc38ab479641fe9c9.png

    马博珩, 彭艺. 基于OMP算法的快速压缩感知图像重构[J].云南大学学报(自然科学版), 2017,39(2): 207-211.

    MA Bo-heng, PENG Yi. Fast compressed sensing image reconstruction based on OMP algorithm[J]. Journal of Yunnan University(Natural Sciences), 2017,39(2): 207-211.

    DOI:10.7540/j.ynu.20160247

    9038884791ef4e5f2532a8002fd9eeef.gif

    Permissions

    Copyright©2017, 《云南大学学报(自然科学版)》编辑部

    《云南大学学报(自然科学版)》编辑部 所有

    基于OMP算法的快速压缩感知图像重构

    马博珩414b395290c9861f4cbfab4abed82a63.gif, 彭艺

    昆明理工大学 信息工程与自动化学院,云南 昆明 650500

    通讯作者: 彭 艺(1975-),女,云南人,博士,副教授,主要研究方向为无线通信.

    作者简介: 马博珩(1992-),男,北京人,研究生,主要研究方向为压缩感知.E-mail:maboheng100@126.com.

    收稿日期: 2016-05-04

    基金资助: 云南省科技厅面上项目(KKS0201403016).

    摘要

    针对正交匹配追踪(OMP)算法在压缩感知理论下的重构效果和所需时间相互矛盾的问题,基于子空间追踪(SP)算法的回溯思想,使用共轭梯度下降算法代替最小二乘法对正交匹配追踪(OMP)算法进行改进.并且对所改进算法的重构精度、重构稳定性进行了仿真实验,结果表明所提算法能保证重构质量良好并且有更好的重构速度和稳定性.

    关键词:

    压缩感知; OMP算法; 信号重构; 图像重构

    中图分类号:TN911.72

    文献标志码:A

    文章编号:0258-7971(2017)02-0207-05

    Fast compressed sensing image reconstruction based on OMP algorithm

    MA Bo-heng414b395290c9861f4cbfab4abed82a63.gif, PENG Yi

    Institute of Information and Automation,Kunming University of Science and Technology,Kunming 650500,China

    Abstract

    This paper proposed an improved OMP(Orthogonal Matching Pursuit)algorithm that replaced Ordinary Least Square algorithm with Conjugate Gradient Descent algorithm based on the backfitting idea of Subspace Pursuit algorithm,in order to solve the problem of contradiction between reconstruction effort and time required of OMP algorithm under compressive sensing theory.This paper also made simulation experiment on the accuracy and stability of reconstruction of the improved algorithm.The result showed that the improved algorithm made the quality of reconstruction satisfying with better speed and stability of reconstruction.

    Keyword:

    compressed sensing(CS); Orthogonal Matching Pursuit algorithm (OMP); signal reconstruction; image reconstruction

    e191cce5d5881b1ebb9ac28a4c7e2abc.png

    6380315f43830b4d9b845c1c4e56c726.png

    af2706e39e5be3d5d60c4792701b0fd4.png

    e191cce5d5881b1ebb9ac28a4c7e2abc.png

    6380315f43830b4d9b845c1c4e56c726.png

    af2706e39e5be3d5d60c4792701b0fd4.png

    压缩感知技术(compressed sensing, CS)是一种用于信号采样的新理论[.传统的信息采样是基于Nyqiust采样定理, 认为信号的采样率只有不低于最高频率的2倍, 信号才能被精确地重构.但是压缩感知理论指出, 若一个信号是稀疏信号或是可以在某个变换域上表现为稀疏信号, 那么可以通过一个与变换基并不相关的矩阵将此信号投影到低维空间上.这一在低维空间上的投影, 包含了原信号的全部信息可以精确地重构出原信号.在压缩感知理论下, 信号采样并不是直接测量信号本身, 其关键在于梳理信息在信号中的结构与内容[.

    压缩感知理论由Donoho和Candes等在2004年首次提出来, 目前压缩感知理论的主要研究方向[分为信号稀疏性、测量矩阵和重构算法这3大部分.压缩感知中的采样过程相对简单, 但重构非常复杂, 所以对于重构算法的研究是压缩感知中相当重要的一方面[.目前来说, 重构算法中贪婪迭代算法是应用非常广泛的一类, 该类算法通过迭代方式来选出信号的最佳支撑, 之后基于贪婪准则选择局部最优解, 逐步逼近原始信号.最典型的贪婪算法是匹配追踪算法(Matching Pursuit), 以及在其基础上改进的正交匹配追踪算法(Orthogonal Matching Pursuit)[.本文将针对OMP算法重构时间较长的问题, 结合子空间追踪(SP)算法的思想, 引入共轭梯度下降算法代替最小二乘法, 对正交匹配追踪(OMP)算法进行改进以及重构仿真实验.

    1 压缩感知理论

    在CS理论下, 需要传输的信号并非是原始信号本身的采样值, 而是原始信号在某个稀疏域上的投影.压缩感知本质是一种非线性压缩信号以及重建的方法.设有一维信号x∈ R, 信号长N位, x=[x1, x2, x3, …, xn].RN内任何信号都可用M× N维的正交基向量Ψ =[Ψ1, Ψ2, …, Ψ a]的线性组合表示, 即 36baffe2ebc335c1d3716d5504f0a44e.pngi, 其中系数α =[α1, α2, α3, …, α n].如果系数向量α中最多有K个非零的元素存在, 那么可以认为信号x是K-稀疏信号.而依据压缩感知理论所述, 对于所有 0258-7971-39-2-207.html≤ K的信号, 都存在一个常数δ∈ (0, 1), 使得

    (1-δ) x22≤ Φx22≤ (1+δ) x22

    成立, 其中δ称为等距常数, 为上式成立的最小值.当其成立时, 则认为观测矩阵Φ满足有限等距性质(RIP).此时存在观测方程y=Φ x, y∈ RM为x在观察矩阵Φ M× N上投影为M×1维的观察向量.这时可以利用y中至少M≥ K×log(N/K)个观察值将原信号还原出来.由于其中M≪N, 所以采样的信号并不完全, 称为欠采样, 正对K-稀疏信号, 可以通过重构模型min x0, s.t.y=Φ x进行信号还原, 因为y=Φ x是存在多个解的, 这是一个NP-hard问题[.因此通过间接方式进行求解或是将其转换为l1范数min x1, s.t.y=Φ x求解问题[.

    2 正交匹配追踪算法OMP算法

    OMP算法是在MP算法的基础上进行改进的, 在沿用了MP算法原子选择标准而来, 来甄选相关性最大的原子.同时通过对已选原子集的正交投影化改进MP算法迭代选择中出现的次优问题

    OMP算法步骤

    输入 观测矩阵Φ, 观测向量y, 迭代次数为K

    输出 还原信号 x˙

    Step 1 初始化 设迭代次数t=1, 残差rt=y, 支撑集索引Λ为空集;

    Step 2 计算残差rt与观察矩阵的列向量ϕ j, 内积中的最大值所对应的索引, 即

    λ t=arg maxj=1, 2,3K,…,n;

    Step 3 更新索引集Λ, 使Λ t=Λ t-1∪ {λ1}, 更新原子集Φ t=[Φ t, ϕλt], 将内积最大值所对应观察矩阵列向量ϕ λ t记入原子集;

    Step 4 运用最小二乘法计算 x˙使残差最小

    x˙=arg min y-Φtx˙2;

    Step 5 更新残差rt=y-Φ t x˙, 令迭代次数增加1;

    判断 停止条件(迭代次数< k)如果不成立执行Step 2, 若是成立则停止迭代输出 x˙.

    OMP算法的基本思想是依据内积选择观察矩阵的列, 使得选择的列与当前残差到达最大相关, 之后在残差中减去相关的部分信号, 再重复上述步骤直到迭代次数到达稀疏度K.

    OMP算法利用已选择的原子集合的正交化来保证迭代的局部最优解.但是无法保证局部最优解的和是全局最优解.而SP算法在重构过程中引入了回溯思想, 既是使得选入信号支撑集的元素并非永久性保存, 而是随着迭代的进行, 对于支撑集中已经存在的原子进行再次计算, 剔除其中非最优的原子, 并且依据现在迭代环节加入最优原子, 其目的在于以使局部最优解尽量接近于全局最优[.

    通过Matlab仿真分析, 结果如图1(实验采样率为60%), 可见与引入“ 回溯” 的思想的SP算法, OMP 算法得到欠定方程最优解的时间明显更短, 但是重构质量相对较差.

    图1

    Fig1.e191cce5d5881b1ebb9ac28a4c7e2abc.png图1 SP算法与OMP算法重构效果对比Fig1. Comparison of reconstruction effort of SP and OMP

    3 针对OMP算法的改进

    OMP算法在计算中需要使用最小二乘法进行测量信号的计算, 但最小二乘法本质上是求解样本观测值与估计值的残差平方和最小的极值问题的一种方法, 在非经典线性问题求解上精度并不高, 使得信号重构过程中残差更新的误差逐渐积累, 降低重构质量

    3.1 共轭梯度下降算法

    共轭梯度法(conjugate gradient method, CG), 最初是为求解正定系数矩阵线性方程组而提出的[.进而被应用于无约束最优问题.共轭梯度法作为典型的共轭方向法, 其任意搜索方向是互相共轭的

    使用共轭梯度法求解Ax=B, 在A是对称正定矩阵时等价于求解二次最优化问题即

    min f(x)= 12xTAx+bTx, 其中, x0∈ Rn, A是对称正定矩阵[.

    相关定义:

    (1) 若矩阵A对称, 且对任意的x0∈ Rn, x≠ 0, 有xTAx≥ 0, 则称A是对称正定矩阵.

    (2) 设A∈ RM× n为正定矩阵, 若Rn中非零向量D=[d1, d2, d3, …, dn]满足 dTiAdj=0, ∀ i, j=0, 1, 2, …, m-1, i≠ j, 则称向量组D是A的共轭向量组, 且这m个向量线性无关.此时从任一点x0∈ Rn出发依次延向量组D进行搜索, 则最多仅需要经过n次迭代计算就可得到最优解.

    (3) 在共轭梯度法中取初始点x(0), 第1次搜索方向则为d(0)=-∇f(x(0)).之后以每次新的共轭方向d(k+1)可以由k次迭代的负梯度g(x)=-∇f(x(k+1)与以解共轭向量的线性组合确定, 即d(k+1)=-gk+1+β kd(k).

    新的搜索方向与上次搜索方向相垂直, 可见共轭是正交的扩展概念, 由于d(k+1)与d(k)关于A共轭, 可解出β k= d(k)TAgk+1d(k)TAdk.求解新的迭代点xk+1=xk+α kdk, 从向方向xk处向d(k)方向取极小值.步长ak= (dk,rk)(Adk,dk), 其中rk=rk-1-α kA dk[15-16, 18].

    3.2 针对OMP算法的改进算法

    共轭梯度法收敛快, 精度高.其旨在利用一阶导数信息, 解决最速下降法收敛时会产生收束震荡致使运算时间过长的问题, 又减少了牛顿法需要保存矩阵所占用的数据量以及矩阵求逆的运算量[.

    将此方法引入OMP算法用以代替最小二乘法求解原始信号的估计值 x˙, 以期取得良好的图像重构效果.

    改进的算法

    输入 观测矩阵Φ, 观测向量y, 迭代次数为K;

    输出 还原信号 x˙

    Step 1 初始化 残差rt=y, 支撑集Λ, 候选集μ为空集, 迭代次数t=1;

    Step 2 计算残差r与观察矩阵的列向量ϕ j内积除以列向量ϕ j的2范数, 记录其中的最大值最大的K个的索引, 即

    λ t=arg maxj=1, 2,…,Nϕj2;

    Step 3 更新候选集μ, 将选出的K个值对应的索引记入候选集, 使μ =μ t-1∪ {λ t}; 更新候选观察矩阵 Φλt=[ ϕλt]将内积最大值所对应观察矩阵列向量 ϕλt记入;

    Step 4 运用共轭梯度法循化计算估计值 x˙, 初值为0, gn= ΦTλtΦλty, 步长

    α n= ΦTλtΦλtrn-122,

    计算并更新步长dn以及信号xk+1=xk+α kdk, 直至共轭梯度法迭代次数达到n( x˙的长度).

    Step 5 计算估算值 x˙中所能引起残差变化最大的N个, 并将对应索引记入支撑集Λ .

    W=arg min y-Φix˙i2, ∀ i=1, 2, …, K, 更新原子集Φ Λ=[ϕ Λ]将内积最大值所对应观察矩阵列向量记录;

    Step 6 更新残差rn=rn-1-Φ Λ x˙Λ, 更新候选集μ =Φ Λ, 令迭代次数t+N;

    判断 以t≥ K为停止条件, 如果条件不成立, 则返回执行Step 2, 若是条件成立, 则停止迭代并输出 x˙.

    4 仿真实验

    4.1 验证算法重构成功率

    试验中以一维信号

    x=sin(2π f1Tsts)+2sin(2π f2Tsts)+3sin(4π f3Tsts)+5sin(2π f4Tsts)

    为分析范例.其中

    f1=100Hz, f2=250Hz, f3=200Hz, f4=400Hz.采样频率fs=800Hz, 采样间隔ts=1/fs, 采样序列为1∶ 1024, 稀疏度为K=24.

    定义重构成功率为η= 成功重构次数总测试次数.

    OMP算法中理论上当采样次数M≥ K× log(N/K), 其中K是信号稀疏度, N为信号长度, 信号的重构成功率可以无限接近于1.当N=1024, K=24, M理论上约为40, 因此以高斯随机矩阵作为观察矩阵, 进行信号x的压缩采样使用OMP重构以及改进算法进行重构.验证采样数量M在低于40的情况下, 2种算法的重构成功率.

    以重构后相对误差低于10-8为重构成功标准, 在每种采样值下进行1000次重复, 计算采样数量变化过程中的算法成功率.从图2中可以看出, 在使用相同的观察矩阵进行采样, 观测数低于40即低于理论重构采样数量下, 是改进算法成功率高于OMP算法, 随着采样数量增加到接近理论值时, 改进后的OMP算法与OMP算法的成功率基本相同.可见改进算法的可靠性基本与OMP算法相同, 近乎完全重构.

    图2

    Fig.26380315f43830b4d9b845c1c4e56c726.png图2 改进算法与OMP算法重构稳定性对比Fig.2 Comparison of reconstruction stability of the improved algorithm and OMP

    4.2 图像信号仿真

    图像信号仿真实验中选用灰度位图(像素256× 256)验证本文算法.此次进行的测试实验程序是在2.40GHz、6GB内存、采用Windows 7系统的计算机上运行, 在MATLAB 2010环境下进行操作.

    对原始图像进行小波变换, 对在小波域上的稀疏信号, 使用高斯随机矩阵作为观测矩阵进行采样, 应用改进算法尝试还原原始图像, 并与其他重建算法还原图像进行对比试验说明.

    图3

    Fig.3af2706e39e5be3d5d60c4792701b0fd4.png图3 改进算法与其他算法重建效果对比Fig.3 Comparison of reconstruction effort of the improved algorithm and other algorithms

    表1

    Tab.1

    表1(Tab.1)33fa5abb93628d26b2587858bcf21b9b.gif

    表1 改进算法与其他算法重建时间对比Tab.1 Comparison of reconstruction time of the improved algorithm and other algorithms算法名称重构质量

    (PSNR)重构时间/sOMP算法28.533832.1380

    SP算法29.857438.1150

    SAMP算法29.9574229.7800表1 改进算法与其他算法重建时间对比Tab.1 Comparison of reconstruction time of the improved algorithm and other algorithms

    从图3和表1可以看出, 当采样率为 60%时, SAMP算法重构效果最好, 但由于使用步长逼近稀疏值, 在步长的计算与迭代中需要耗费大量时间.SP算法引入回溯思想用来选择最优原子集在提高重构精度的情况下, 算法计算的时间相对OMP算法也有所增加.而改进算法相比OMP算法由于在每次迭代中选出多个原子并且引入共轭梯度法从整体上进行信号估计, 用以代替最小二乘法.在明显减少算法收敛时间的同时取得了相对较好的图像重构效果.

    5 结束语

    本研究中, 利用基于OMP的改进算法, 实现了图像的重构.理论分析及实践仿真表明, 改进的OMP 算法能够有效缩减迭代收敛速度, 并保证还原精度.但是本文也存在不足之处, 由于共轭梯度算法更新方向并不一定是最优的, 会导致重构精度变化范围小, 一定程度上影响了压缩感知图像的重建质量, 下一步将针对更新方向上的局限性进行算法改进, 以期取得更好重建效果.

    The authors have declared that no competing interests exist.

    参考文献

    [1]

    CANDES E.Compressive sampling[C]. Proceedings of the International Congress of Mathematicians. Madrid Spain European Mathematicians Society Publishing House, 2006, 3: 1433-1452.

    [本文引用:2]

    [2]

    BARANIUK R.A lecture compressive sensing[J]. IEEE Signal Processing Magazine, 2007, 24(4): 118-121.

    [本文引用:3]

    [3]

    FANG H, YANG H R.Greedy algorithms and compressed sensing[J]. 2011, 37(12): 1413-1421.

    [本文引用:2]

    [4]

    JUSTIN ROMBERG.Imaging via compressive sampling[J]. IEEE Signal Processing Magazine, 2008, 25(2): 14-20.

    [本文引用:1]

    [5]

    DAVID DONOHO, YAAKOV TSAIG.Fast solution of ell-1-norm minimization problems when the solution may be sparse[R]. Stanford University Department of Statistics Technical Report, 2006.

    [本文引用:1]

    [6]

    MÁRIO A T, FIGUEIREDO, ROBERT D, et al. Gradient projection for sparse reconstruction: Application to compressed sensing and other inverse problems[J]. 2007, 1(4): 586-598.

    [本文引用:2]

    [7]

    TROPP J, GILBERT A C.Signal recovery from rand om measurements via orthogonal matching pursuit[J]. 2007, 53(12): 4655-4666.

    [本文引用:3]

    [8]

    OSHER S, MAO Y, DONG B, et al.Fast linearized Bregman iteration for compressive sensing and sparse denoising[J]. 2010, 8(1): 93-111.

    [本文引用:1]

    [9]

    张宗念, 黄仁泰, 闫敬文. 压缩感知信号盲稀疏度重构算法[J]. 电子学报, 2011, 39(1): 18-22.ZHANG Z N, HUANG R T, YAN J W.A blind sparsity reconstruction algorithm for compressed sensing signal[J]. 2011, 39(1): 18-22.

    [本文引用:1]

    [10]

    ZAYYANI H, BABAIE-ZADEH M, JUTTEN C.Bayesian pursuit algorithm for sparse representation[C]. Proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing, Taipei, China;IEEE, 2009: 1549-1552.

    [本文引用:1]

    [11]

    TROPP J, GILBERT A C.Signal recovery from rand om measurements via orthogonal matching pursuit[J]. 2007, 53(12): 4655-4666.

    [本文引用:1]

    [12]

    SCHNELLE S R, LASLA J N, HEGDE C, et al.Texas HoId'Em algorithms for distributed compressive sensing[C]. 2010 IEEE International Conference on Acoustics Speech and Signal Processing (ICASSP), 2010: 2886-2889.

    [本文引用:2]

    [13]

    KAREN E, ALESSANDRO F, VLADIMIR K.Compressed sensing image reconstruction via recursive spatially adaptive filtering[C]. IEEE International Conference on Image Processing, 2017: 549-552.

    [本文引用:1]

    [14]

    欧庆波. 压缩感知在无线通信中的应用研究[D]. 南京: 南京邮电大学, 2011.OU Q B.The application of compressed sensing in wireless communication[D]. 2011.

    [本文引用:2]

    [15]

    李志林. 图像压缩感知重建算法研究[D]. 北京: 北京交通大学, 2012.LI Z L.Study on image compressed sensing reconstruction algorithms[D].Beijing: Beijing Jiaotong University, 2012.

    [本文引用:3]

    [16]

    BLUMENSATH T, DAVIES M E.Gradient pursuits[J]. 2008, 56(6): 2370-2382.

    [本文引用:1]

    [17]

    HARMANY Z, THOMPSON D, WILLETT R, et al.Gradient projection for linearly constrained convex optimization in sparse signal recovery[C]. 2010 17th IEEE International Conference on Image Processing, 2010: 3361-3364.

    [本文引用:3]

    [18]

    HESTENES M R, STIEFEL E L.Methods of conjugate gradients for solving linear systems[J]. Journal of Research of the National Bureau of Stand ards, 1952, 5(49): 409-436.

    [本文引用:]

    2

    2006

    0.0

    0.0

    ... 压缩感知技术(compressed sensing,CS)是一种用于信号采样的新理论[1,2,3] ...

    ... 在压缩感知理论下,信号采样并不是直接测量信号本身,其关键在于梳理信息在信号中的结构与内容[1,2,4,5] ...

    3

    2007

    0.0

    0.0

    ... 压缩感知技术(compressed sensing,CS)是一种用于信号采样的新理论[1,2,3] ...

    ... 在压缩感知理论下,信号采样并不是直接测量信号本身,其关键在于梳理信息在信号中的结构与内容[1,2,4,5] ...

    ... x是存在多个解的,这是一个NP-hard问题[2] ...

    2

    2011

    0.0

    0.0

    FANG H, YANG H R.Greedy algorithms and compressed sensing[J]. 2011, 37(12): 1413-1421.

    Recently a family of iterative greedy algorithms have received extensive application in compressed sensing (CS) due to their fast reconstruction and low reconstruction complexity. In this paper, the basic theory of CS is first introduced and then we put emphasis on the main greedy algorithms for reconstruction, which include MP, OMP, IBOOMP, StOMP, SP, ROMP, CoSaMP and so on and provide their mathematical frameworks, respectively. Next, we classify all the algorithms according to the strategy of element selection and the update of the residual error. Under the condition of restricted isometry constant, further discussion on the performance of reconstruction algorithms such as running time, reconstruction stability and so on is presented. Last, the reconstruction results from simulated experiments further show the performance of all algorithms. And from those results we also acquire the relationship among the performance of the algorithms, the sparsity of signals to be reconstructed and the number of measurements, which lays a good basis for proposing new and better algorithms.

    1. School of Science, Shanghai Second Polytechnic University, Shanghai 201209; 2. Department of Mathematics, Hefei Normal University, Hefei 230601

    贪婪算法以其重建速度快、重建方法实现简便的特点在压缩感知(Compressed sensing, CS)理论中获得了广泛的应用. 本文首先介绍压缩感知的基本理论;然后,着重介绍现有几种重要的贪 婪重建算法,包括MP, OMP, IBOOMP, StOMP, SP, ROMP和CoSaMP等, 详细给出每种算法的数学框架和本质思想,着重从最优匹配原子的选择策略和残差信号的更新 方式这两个方面对各种算法进行对比分析,以限制等容常数为条件讨论各种算法在实现重建时的性能,包括重建时间、 重建的稳定性等;最后,通过模拟实验进一步验证了 各种算法的重建效果,同时模拟实验结果还进一步得出各种算法的重建效果与待重建信号 本身的稀疏度及测量次数这三者之间的关系,这也为新的更优算法的提出打下理论基础.

    ... 压缩感知技术(compressed sensing,CS)是一种用于信号采样的新理论[1,2,3] ...

    ... 而SP算法在重构过程中引入了回溯思想,既是使得选入信号支撑集的元素并非永久性保存,而是随着迭代的进行,对于支撑集中已经存在的原子进行再次计算,剔除其中非最优的原子,并且依据现在迭代环节加入最优原子,其目的在于以使局部最优解尽量接近于全局最优[3] ...

    1

    2008

    0.0

    0.0

    ... 在压缩感知理论下,信号采样并不是直接测量信号本身,其关键在于梳理信息在信号中的结构与内容[1,2,4,5] ...

    1

    2006

    0.0

    0.0

    ... 在压缩感知理论下,信号采样并不是直接测量信号本身,其关键在于梳理信息在信号中的结构与内容[1,2,4,5] ...

    2

    2007

    0.0

    0.0

    ... 压缩感知理论由Donoho和Candes等在2004年首次提出来,目前压缩感知理论的主要研究方向[6]分为信号稀疏性、测量矩阵和重构算法这3大部分 ...

    ... 其旨在利用一阶导数信息,解决最速下降法收敛时会产生收束震荡致使运算时间过长的问题,又减少了牛顿法需要保存矩阵所占用的数据量以及矩阵求逆的运算量[6,7] ...

    3

    2007

    0.0

    0.0

    ... 压缩感知中的采样过程相对简单,但重构非常复杂,所以对于重构算法的研究是压缩感知中相当重要的一方面[7] ...

    ... 最典型的贪婪算法是匹配追踪算法(Matching Pursuit),以及在其基础上改进的正交匹配追踪算法(Orthogonal Matching Pursuit)[7,8,9] ...

    ... 其旨在利用一阶导数信息,解决最速下降法收敛时会产生收束震荡致使运算时间过长的问题,又减少了牛顿法需要保存矩阵所占用的数据量以及矩阵求逆的运算量[6,7] ...

    1

    2010

    0.0

    0.0

    ... 最典型的贪婪算法是匹配追踪算法(Matching Pursuit),以及在其基础上改进的正交匹配追踪算法(Orthogonal Matching Pursuit)[7,8,9] ...

    1

    2011

    0.0

    0.0

    张宗念, 黄仁泰, 闫敬文. 压缩感知信号盲稀疏度重构算法[J]. 电子学报, 2011, 39(1): 18-22.ZHANG Z N, HUANG R T, YAN J W.A blind sparsity reconstruction algorithm for compressed sensing signal[J]. 2011, 39(1): 18-22.

    A new blind sparsity iterative greedy reconstruction algorithm is presented based on studying the signal reconstruction algorithm for compressed sensing without the prior information of signal sparsity.A stage-wised and backtracking method is employed to adaptively adjust the candidate list at each iteration in order to estimate the true supporting set of the approximated signal.The theoretical analysis and experiment simulation prove that the performance of the algorithm outperforms that of the existing state-of-art iterative greedy matching pursuit algorithms,and provides a generalized greedy reconstruction framework.The orthogonal matching pursuit and subspace pursuit can be viewed as its special case,and it also gives the best trade-offs between computational complexity and reconstruction performance.This makes it a promising candidate for many practical applications for compressed sensing signal reconstruction.

    1. School of Electronics Engineering,Dongguan University of Technology,Dongguan,Guangdong 523106,China;2. School of Computer Science,Dongguan University of Technology,Dongguan,Guangdong 523106,China;3. Department of Electronics Engineering,Shantou University,Shantou,Guangdong 515063,China

    研究压缩感知信号重构算法,提出了一种不需要精确知道信号稀疏度的先验知识,就能重构出目标信号的盲稀疏度迭代贪婪跟踪重构新算法.采用分段的方法来逐段估计、扩充目标信号的真实支撑域,并应用后向追踪思想,自适应地调整候选序列,以便每一次迭代时更加精确地估计真正的支撑域.理论分析与实验证明,算法性能超过了现有的迭代贪婪跟踪重构算法性能;给出了迭代贪婪跟踪信号重构的统一框架,正交匹配跟踪和子空间跟踪算法可以看成它的特例;在计算复杂度和重构算法性能之间做出了最佳折衷;有更强的实用性.

    ... 最典型的贪婪算法是匹配追踪算法(Matching Pursuit),以及在其基础上改进的正交匹配追踪算法(Orthogonal Matching Pursuit)[7,8,9] ...

    1

    2009

    0.0

    0.0

    ... x求解问题[10,11,12,13],是重构算法研究中的重要方向之一 ...

    1

    2007

    0.0

    0.0

    ... x求解问题[10,11,12,13],是重构算法研究中的重要方向之一 ...

    2

    2010

    0.0

    0.0

    ... x求解问题[10,11,12,13],是重构算法研究中的重要方向之一 ...

    ... 另一种是贪婪类算法,以MP(匹配追踪算法)、OMP(正交匹配追踪算法)为典型代表,是目前应用非常广泛的一类[12] ...

    1

    2017

    0.0

    0.0

    ... x求解问题[10,11,12,13],是重构算法研究中的重要方向之一 ...

    2

    2011

    0.0

    0.0

    欧庆波. 压缩感知在无线通信中的应用研究[D]. 南京: 南京邮电大学, 2011.OU Q B.The application of compressed sensing in wireless communication[D]. 2011.

    ... 同时通过对已选原子集的正交投影化改进MP算法迭代选择中出现的次优问题[14,15,16,17] ...

    ... 3 针对OMP算法的改进OMP算法在计算中需要使用最小二乘法进行测量信号的计算,但最小二乘法本质上是求解样本观测值与估计值的残差平方和最小的极值问题的一种方法,在非经典线性问题求解上精度并不高,使得信号重构过程中残差更新的误差逐渐积累,降低重构质量[14,15]因此针对此问题,结合子空间追踪(SP)算法的#cod#x0201c ...

    3

    2012

    0.0

    0.0

    ... 同时通过对已选原子集的正交投影化改进MP算法迭代选择中出现的次优问题[14,15,16,17] ...

    ... 3 针对OMP算法的改进OMP算法在计算中需要使用最小二乘法进行测量信号的计算,但最小二乘法本质上是求解样本观测值与估计值的残差平方和最小的极值问题的一种方法,在非经典线性问题求解上精度并不高,使得信号重构过程中残差更新的误差逐渐积累,降低重构质量[14,15]因此针对此问题,结合子空间追踪(SP)算法的#cod#x0201c ...

    ... 1 共轭梯度下降算法共轭梯度法(conjugate gradient method,CG),最初是为求解正定系数矩阵线性方程组而提出的[15] ...

    1

    2008

    0.0

    0.0

    ... 同时通过对已选原子集的正交投影化改进MP算法迭代选择中出现的次优问题[14,15,16,17] ...

    3

    2010

    0.0

    0.0

    ... 同时通过对已选原子集的正交投影化改进MP算法迭代选择中出现的次优问题[14,15,16,17] ...

    ... 共轭梯度法作为典型的共轭方向法,其任意搜索方向是互相共轭的[17,18] ...

    ... Rn,A是对称正定矩阵[17] ...

    1952

    展开全文
  • 文件中包含多种压缩感知图像重构方法,CoSaMp,omp,sp等,能实现图像重构
  • Matelab 编程CS图像重构算法怎么输出均方差、峰值信噪比等,有没有谁给我完整的程序,让我做完毕业设计
  • 介绍了基于小波变换的分块压缩感知和基于边缘结构信息的改进匹配追踪重构两种图像重构方法
  • 基于压缩感知理论的图像重构技术,压缩感知学术论文,压缩感知是2006年提出的技术,打破了传统的香农采样定律。
  • 压缩感知OMP重构算法matlab实现

    热门讨论 2012-04-18 08:57:38
    压缩感知OMP重构算法matlab实现,OMP重构算法,本程序用于重构原始图像
  • 压缩感知中经典的StOMP重构算法,代码含有详细的中文注释,易懂,并且也出了重构图像评价质量标准
  • 利用图像的非局部相似性先验以提升图像恢复质量已...为了更有效地提升压缩感知(CS)图像重构质量,提出了一种基于加权结构组稀疏表示(WSGSR)的图像压缩感知重构方法。采用非局部相似图像块结构组加权稀疏表示的
  • 利用正交匹配追踪算法对高光谱图像进行压缩感知重构,是通过寻找最优原子对原始信号进行线性表示,使残差不断减小以获取重构信号。在处理基于冗余字典的重构问题时,其耗时主要存在于原子匹配过程和残差更新过程,导致...
  • 针对传统压缩感知在核磁共振成像中存在着重构算法慢、成像时间长的缺点, 利用核磁共振图像自身非满秩的特点, 在压缩感知框架下以奇异值分解作为基底对图像稀疏表示进行了研究, 并对重构算法进行了优化。实验结果表明...
  • 基于分布式压缩感知理论,利用高光谱图像谱间的低秩特性,提出一种高光谱图像分布式压缩感知重构方法。该方法在编码端对各谱段图像分别进行压缩感知测量,运算简单,便于硬件实现。解码端重构时,首先对各谱段图像...
  • 压缩感知理论在数据获取、数据存储/传输、数据分析和处理方面有很大优势,成为近年来的研究热点.考虑到大多数图像信号信息分布有差异,编码端,在对图像分块的基础上,融合熵估计和边缘检测方法计算各图像块的信息含量,...
  • 随机光学重构显微(STORM)的时间和空间分辨率相互制约,难以实现活细胞的超分辨成像,且超分辨图像的后处理分析与重构算法对图像质量也有非常重要的影响。基于此,针对高密度标记与高采样率所导致的单帧图像中光斑重叠及...
  • 图像压缩感知重建中,针对重构效果和耗时不能兼得的问题进行深入研究。基于小波域稀疏,选用常规观测矩阵进行观测采样,通过对观测结果预定义滤波、选取信号硬阈值,引入共轭梯度下降算法,对分段正交匹配追踪...
  • 二维图像(二维图像压缩感知重构算法程序代码、内含完整的MATLAB代码)
  • 实现对图像的分块,并进行基于压缩感知算法的恢复与重构。恩不错的资源 。
  • 重叠块投影与重构图像压缩感知
  • 使用CNN对自然图像压缩重构图像压缩感知

    千次阅读 热门讨论 2019-05-12 15:36:09
    分析论文:Shi W, Jiang F, Zhang S, et al. Deep Networks for Compressed Image Sensing[J]. 2017:877-882. 论文题目:Deep Networks for Compressed Image Sensing 自然图像压缩深度网络.

    基于深度学习的图像压缩感知

    针对图像的压缩感知有好多篇论文使用深度学习的方法实现图像压缩采样和重构,主要是复现论文的代码过程。
    分析论文:[1]Shi W, Jiang F, Zhang S, et al. Deep Networks for Compressed Image Sensing[J]. 2017:877-882.
    论文题目:Deep Networks for Compressed Image Sensing
    首先论文的框架是:
    在这里插入图片描述
    中心思想是通过卷积和步长实现图像的压缩,然后通过卷积的深度实现小块图像的重构和块图像的拼接,最后通过5层卷积神经网络实现最终图像的复原。这个过程和GANLU在2009年的块压缩感知的论文[2]过程差不多。结合两篇论文的过程,实现代码:
    [2].Gan L. Block Compressed Sensing of Natural Images[C]// International Conference on Digital Signal Processing. IEEE, 2007:403-406.
    准备数据集:利用BSDS500中的400张自然图像,通过平移旋转镜像等方法得到128*128大小的图像70000张左右,存储格式使用的是.h5用起来比较方便,测试集使用了100张图像作为测试集。

    path = '/home/train.h5'
    def read_data(path):   
        with h5py.File(path, 'r') as hf:
             orig_image = np.array(hf.get('orig_image'))
             sample_line = np.array(hf.get('sample_line'))
        return orig_image, sample_line
    orig_image, sample_line = read_data(path)
    #read validation data:
    path1 = '/home/test1.h5'
    def read_data1(path):
        with h5py.File(path, 'r') as hf:
             orig_image = np.array(hf.get('orig_image'))
             sample_line = np.array(hf.get('sample_line'))
        return orig_image, sample_line
    test_image, test_line = read_data1(path1)
    test_image = test_image.reshape((100, 256, 256, 1))
    # Load test data:
    read_dictionary = np.load('/home/lab30202/Juanjuan/images/h5/test_data.npy').item()
    #print(read_dictionary['baby']) # displays "world"
    image_test = tf.placeholder(tf.float32, [1, 512, 512, 1])
    

    整个过程代码:

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    import tensorflow as tf
    import numpy as np
    from PIL import Image 
    import matplotlib.pyplot as plt
    from skimage import io, img_as_float, measure
    import os
    import h5py
    import collections
    #########################################################################
    #read train original data
    #read train original data
    path = '/home/train.h5'
    def read_data(path):
        
        with h5py.File(path, 'r') as hf:
             orig_image = np.array(hf.get('orig_image'))
             sample_line = np.array(hf.get('sample_line'))
        return orig_image, sample_line
    orig_image, sample_line = read_data(path)
    
    #read validation data:
    path1 = '/home/test1.h5'
    def read_data1(path): 
        with h5py.File(path, 'r') as hf:
             orig_image = np.array(hf.get('orig_image'))
             sample_line = np.array(hf.get('sample_line'))
        return orig_image, sample_line
    test_image, test_line = read_data1(path1)
    test_image = test_image.reshape((100, 256, 256, 1))
    # Load test data:
    read_dictionary = np.load('/home/lab30202/Juanjuan/images/h5/test_data.npy').item()
    image_test = tf.placeholder(tf.float32, [1, 512, 512, 1])
    #CNN
    learning_rate1 = 0.001
    learning_rate2 = 0.0001
    learning_rate3 = 0.00001
    
    #training_iters = 25
    batch_size = 64
    num_samples= len(orig_image)
    batch_index = num_samples/batch_size
    training_epochs = 50
    training_epochs1 = 80
    training_epochs2 = 100
    display_step = 1
    
    x = tf.placeholder(tf.float32, [None, 128, 128, 1])
    y = tf.placeholder(tf.float32, [None, 128, 128, 1])
    keep_prob = tf.placeholder(tf.float32)
    
    def tensor_concat(f, axis):
        x1 = f[0, :, :]
        for i in range(1, f.shape[0]):
            x1 = tf.concat([x1, f[i, :, :]], axis=axis)
        return x1
    
    def block_to_image(f, batch_size):
        x3 =[]
        f = tf.reshape(f, [batch_size, f.shape[1], f.shape[2], 1024])
        for k in range(int(f.shape[0])):
            x = f[k, :, :, :]
            q = f.shape[1]*f.shape[2]
            p = int(f.shape[2])
            x1 = tf.reshape(x, [q, 1024])
            x1 = tf.reshape(x1, [q, 32, 32])
            m2 = tensor_concat(x1[0:f.shape[1], :, :], axis=1)
            for i in range(1, f.shape[1]):
                m1 = tensor_concat(x1[i*p:(i+1)*p, :, :], axis=1)
                m2 = tf.concat([m2, m1], axis=0)
            x2 = tf.reshape(m2, [32*p, 32*p, 1])
            x3.append(x2)
            x4 = tf.stack(x3)
        return x4
    
    def conv2dcs1(name, x, W, strides):
       x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='VALID')
       return x
       #return  tf.nn.relu(x, name=name) 
       #return tf.nn.sigmoid(x, name=name)
    
    def conv2dcs2(name, x, W, strides):
       x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
       return x
       #return  tf.nn.relu(x, name=name) 
       #return tf.nn.sigmoid(x, name=name)
    
    def conv2d(name, x, W, strides=1):
       x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
       return  tf.nn.relu(x, name=name)
    
    weight1 = {
      'wcs1': tf.Variable(tf.random_normal([32, 32, 1, 102], stddev=0.02)),
      'wcs2': tf.Variable(tf.random_normal([1, 1, 102, 1024], stddev=0.02))
      }
      
    weight2 = {
      'wc1': tf.Variable(tf.random_normal([3, 3, 1, 64], stddev=0.1)), 
      'wc2': tf.Variable(tf.random_normal([3, 3, 64, 64], stddev=0.1)),  
      'wc3': tf.Variable(tf.random_normal([3, 3, 64, 64], stddev=0.1)),
      'wc4': tf.Variable(tf.random_normal([3, 3, 64, 64], stddev=0.1)),
      'wc5': tf.Variable(tf.random_normal([3, 3, 64, 1], stddev=0.1))
      }
    
    def cs_net(x, weight1, batch_size):
        x = tf.cast(x, dtype=tf.float32)
        #the sampling matrix 
        conv1 = conv2dcs1('conv1', x, weight1['wcs1'], strides=32)  
        #the reshape and concatenation layer:
        conv2 = conv2dcs2('conv2', conv1, weight1['wcs2'], strides=1)
        output = block_to_image(conv2, batch_size)
        return output
        
    def cs_cnn_net(x, weight1, weight2, batch_size):
      #sampling matrix network:
       x = tf.reshape(x, shape=([-1, x.shape[1], x.shape[2], 1]))
       x1 = cs_net(x, weight1, batch_size)
      #the deep reconstruction sub-betwork
       conv3 = conv2d('conv3', x1, weight2['wc1'])
       conv4 = conv2d('conv4', conv3, weight2['wc2'])
       conv5 = conv2d('conv5', conv4, weight2['wc3'])
       conv6 = conv2d('conv6', conv5, weight2['wc4'])
       conv7 = conv2d('conv7', conv6, weight2['wc5'])
       return conv7
    
    pred = cs_cnn_net(x, weight1, weight2, batch_size)
    y_true = x
    mse_loss = tf.reduce_mean(tf.pow(pred - y_true, 2))
    
    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate1, beta1=0.9, beta2=0.999).minimize(mse_loss)
    optimizer1 = tf.train.AdamOptimizer(learning_rate=learning_rate2, beta1=0.9, beta2=0.999).minimize(mse_loss)
    optimizer2 = tf.train.AdamOptimizer(learning_rate=learning_rate3, beta1=0.9, beta2=0.999).minimize(mse_loss)
    
    #验证集的测试:
    pred1 = cs_cnn_net(test_image, weight1, weight2, batch_size=100)
    y_pred1 = test_image
    y_pred1_mse = tf.reduce_mean(tf.pow(pred1-y_pred1, 2))
    
    #测试集的测试:
    pred2 = cs_cnn_net(image_test, weight1, weight2, batch_size=1)
    y_pred2 = image_test
    y_pred2_mse = tf.reduce_mean(tf.pow(pred2-y_pred2, 2))
    
    #模型存储:
    model_save_path = '/home/model_cnn_rs/' 
    model_name = 'model.ckpt'
    saver = tf.train.Saver(tf.all_variables())
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                          log_device_placement=True)) as sess:
        sess.run(init_op)
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)
        mse_loss1 = []
        mse_loss2 = []
        psnr_test = collections.defaultdict(list)
        mse_test = collections.defaultdict(list)
        ssim_test = collections.defaultdict(list)
    
        #开始训练
        #前 50次训练:
        for epoch in range(training_epochs):
            for i in range(batch_index):
                batch_orig = orig_image[i*batch_size:(i+1)*batch_size]
                _, c = sess.run([optimizer, mse_loss], feed_dict={x: batch_orig})
                if i % 100 == 0:
                    print "iter:", "%04d" %(i+1), 'mse=', '{:.9f}'.format(c)
                    mse_loss1.append(c)
    
            #每一轮打印一次
            if epoch % display_step == 0:
                print "epoch:", "%04d" %(epoch +1), "mse=", "{:.9f}".format(c)
                checkpoint_path = os.path.join(model_save_path, model_name)
                saver.save(sess, checkpoint_path, global_step=epoch)
                mse = sess.run([y_pred1_mse])
                mse_loss2.append(mse)  #验证集
                
               # keys = ['butterfly', 'pepper', 'baby', 'bird', 'lenna']
                keys = ['pepper', 'baby', 'lenna']
                for key in keys:
                    print key
                    image = read_dictionary[key]
                    image_test1 = image.reshape((1, image.shape[0], image.shape[1], 1))
                    y, mse1 = sess.run([pred2, y_pred2_mse], feed_dict={image_test: image_test1})
                    y = y.reshape((y.shape[1], y.shape[2]))
                    y = np.where(y>=-1, y, -1)
                    y = np.where(y<=1, y, 1)
    
                    psnr = measure.compare_psnr(image, y, data_range=1)
                    ssim = measure.compare_ssim(image, y, data_range=1)
                    mse = measure.compare_mse(image, y)
                    print psnr
                    mse_test[key].append(mse)
                    psnr_test[key].append(psnr)
                    ssim_test[key].append(ssim)
    
                    print "validation_image:", 'mse=', '{:.9f}'.format(mse1)
                    print "test_image:", key, 'mse=', '{:.9f}'.format(mse), 'psnr=', '{:.9f}'.format(psnr), 'ssim=', '{:.9f}'.format(ssim)
                   # y = y.reshape((y.shape[1], y.shape[2]))
                    error = y - image
                    io.imsave(model_save_path+key+'pred'+np.str(epoch)+'.jpg', y)
                    io.imsave(model_save_path+key+'error'+np.str(epoch)+'.jpg', error)
         
        #前 50-80次训练:
        for epoch in range(training_epochs, training_epochs1):
            for i in range(batch_index):
                batch_orig = orig_image[i*batch_size:(i+1)*batch_size]
                _, c = sess.run([optimizer1, mse_loss], feed_dict={x: batch_orig})
                if i % 100 == 0:
                    print "iter:", "%04d" %(i+1), 'mse=', '{:.9f}'.format(c)
                    mse_loss1.append(c)
    
            #每一轮打印一次
            if epoch % display_step == 0:
                print "epoch:", "%04d" %(epoch +1), "mse=", "{:.9f}".format(c)
                checkpoint_path = os.path.join(model_save_path, model_name)
                saver.save(sess, checkpoint_path, global_step=epoch)
                mse = sess.run([y_pred1_mse])
                mse_loss2.append(mse)  #验证集
                
               # keys = ['butterfly', 'pepper', 'baby', 'bird', 'lenna']
                keys = ['pepper', 'baby', 'lenna']
                for key in keys:
                    image = read_dictionary[key]
                    image_test1 = image.reshape((1, image.shape[0], image.shape[1], 1))
                    y, mse1 = sess.run([pred2, y_pred2_mse], feed_dict={image_test: image_test1})
                    y = y.reshape((y.shape[1], y.shape[2]))
                    y = np.where(y>=-1, y, -1)
                    y = np.where(y<=1, y, 1)
    
                    psnr = measure.compare_psnr(image, y, data_range=1)
                    ssim = measure.compare_ssim(image, y, data_range=1)
                    mse = measure.compare_mse(image, y)
                    mse_test[key].append(mse)
                    psnr_test[key].append(psnr)
                    ssim_test[key].append(ssim)
    
                    print "validation_image:", 'mse=', '{:.9f}'.format(mse1)
                    print "test_image:", key, 'mse=', '{:.9f}'.format(mse), 'psnr=', '{:.9f}'.format(psnr), 'ssim=', '{:.9f}'.format(ssim)
                    # y = y.reshape((y.shape[1], y.shape[2]))
                    error = y - image
                    io.imsave(model_save_path+key+'pred'+np.str(epoch)+'.jpg', y)
                    io.imsave(model_save_path+key+'error'+np.str(epoch)+'.jpg', error)    
           
        #前 80-100次训练:
        for epoch in range(training_epochs1, training_epochs2):
            for i in range(batch_index):
                batch_orig = orig_image[i*batch_size:(i+1)*batch_size]
                _, c = sess.run([optimizer2, mse_loss], feed_dict={x: batch_orig})
                if i % 100 == 0:
                    print "iter:", "%04d" %(i+1), 'mse=', '{:.9f}'.format(c)
                    mse_loss1.append(c)
    
            #每一轮打印一次
            if epoch % display_step == 0:
                print "epoch:", "%04d" %(epoch +1), "mse=", "{:.9f}".format(c)
                checkpoint_path = os.path.join(model_save_path, model_name)
                saver.save(sess, checkpoint_path, global_step=epoch)
                mse = sess.run([y_pred1_mse])
                mse_loss2.append(mse)  #验证集
                
               # keys = ['butterfly', 'pepper', 'baby', 'bird', 'lenna']
                keys = ['pepper', 'baby', 'lenna']
                for key in keys:
                    image = read_dictionary[key]
                    image_test1 = image.reshape((1, image.shape[0], image.shape[1], 1))
                    y, mse1 = sess.run([pred2, y_pred2_mse], feed_dict={image_test: image_test1})
                    y = y.reshape((y.shape[1], y.shape[2]))
                    y = np.where(y>=-1, y, -1)
                    y = np.where(y<=1, y, 1)
                    psnr = measure.compare_psnr(image, y, data_range=1)
                    ssim = measure.compare_ssim(image, y, data_range=1)
                    mse = measure.compare_mse(image, y)
    
                    mse_test[key].append(mse)
                    psnr_test[key].append(psnr)
                    ssim_test[key].append(ssim)
                    print "validation_image:", 'mse=', '{:.9f}'.format(mse1)
                    print "test_image:", key, 'mse=', '{:.9f}'.format(mse), 'psnr=', '{:.9f}'.format(psnr), 'ssim=', '{:.9f}'.format(ssim)
                   # y = y.reshape((y.shape[1], y.shape[2]))
                    error = y - image
                    io.imsave(model_save_path+key+'pred'+np.str(epoch)+'.jpg', y)
                    io.imsave(model_save_path+key+'error'+np.str(epoch)+'.jpg', error)
        
        print "Optimaization Finished"
        np.savetxt(model_save_path+'mse_loss1', mse_loss1)
        np.savetxt(model_save_path+'mse_loss2', mse_loss2)
        np.save(model_save_path+'psnr_test.npy', psnr_test)
        np.save(model_save_path+'mse_test.npy', mse_test)
        np.save(model_save_path+'ssim_test.npy', ssim_test)
      
        coord.request_stop()
        coord.join(threads)
    

    训练对应的验证集的损失函数的变化:
    在这里插入图片描述
    图像的测试结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这个通过卷积神经网络实现图像压缩重构的方法真实的效果非常好!赞叹!复现整个论文代码的过程也非常有趣!

    展开全文
  • 压缩感知框架下运用正则化正交匹配追踪(ROMP)算法进行图像重构时,迭代次数取值不合适会严重降低重构图像的质量。针对这一问题,提出了确定合理迭代次数的方法。将以往迭代得出的结果作为先验知识,获取具有不同稀疏...
  • 使用自适应粒度重构来阻止图像压缩感知
  • 为了能够有效地改善低码率压缩图像的主客观质量,减少图像复原所需观测数据量,节约存储空间和计算量,提出了一种基于多层小波变换的压缩感知图像快速复原算法。该算法将压缩感知理论中的信号重构方法运用于图像复原...
  • 传统基于压缩感知图像融合算法在通过压缩感知观测图像高频分量时会丢失分量的空间信息,仅能采用简单规则进行融合,导致融合图像纹理细节等信息效果较差。针对此,文中提出了一种结合图像高频特征的自适应融合规则。...
  • 为了提高现有块压缩感知重构算法的性能,提出了基于全变分和混合变分模型的块压缩感知(简称BCS-TV和BCS-MV)算法。该方法以块为单位进行图像采样,以自然图像正则项的稀疏性为先验条件,通过变型的增广拉格朗日交替...
  • 压缩感知的基本思想稀疏重构条件: 压缩感知的基本思想是:只要信号是稀疏或可压缩的,则可用一个测量矩阵在低维空间上表示这个高维信号,然后通过求解一个优化问题就能近似地重构出信号。稀疏表示、编码测量和稀疏...

    压缩感知的基本思想稀疏重构条件:

    压缩感知的基本思想是:只要信号是稀疏或可压缩的,则可用一个测量矩阵在低维空间上表示这个高维信号,然后通过求解一个优化问题就能近似地重构出信号。稀疏表示、编码测量和稀疏重构是压缩感知理论的三个重要组成部分其中,稀疏重构,即由观测向量重构稀疏信号的过程,是压缩感知理论的核心。应用稀疏重构对人造目标进行稀疏成像可以极大地提高成像结果的分辨率。

    压缩感知理论指出,信号或图像精确重建必须满足以下三个条件:
    (1)稀疏性,即在某种变换域下信号或图像可被稀疏表示;
    (2)测量矩阵满足限制等容性准则(Restricted Isometry Property,RIP)条件,即要满
    足与信号本身是互不相干的;
    (3)通过非线性优化的重建模型精确重建.

    稀疏重构适用场景以及优势:

    高频区,目标总的电磁散射可以由局部散射中心散射的合成来近似,可以将稀疏重构方法应用于属性散射中心模型估计上。基于稀疏重构的属性散射模型参数估计方法直接从观测数据中估计散射中心参数,避免了对图像分割处理,因此不存在能量泄漏问题

    只要信号是稀疏或可压缩的,则可用一个测量矩阵在低维空间上表示这个高维信号,然后通过求解一个优化问题就能近似地重构出信号。

    缺点:红色。

    优点:蓝色。

    lP范数非凸优化算法而言,其性能表现较为出色,超分辨能力强,且重构精度高。对SNR 较为敏感,抗噪性能不好。弊端:就是需要人为设置两个参数:收缩参数和正则化参数,对于不同的信号形式,不同的观测矩阵,不同的信噪比而言,这两个参数的最优值都是不同的,仿真实验前都需要对花大量的时间进行参数的调整。

    应用CVX 进行l1 范数最小化的方法,其各方面性能较为适中,不过运行速度太慢是一大缺点。此外l1范数最小化方法需要人为的设置正则化参数,因此对噪声较为敏感。

    MP 算法而言,其重构精度最差,没有超分辨能力,对于噪声很敏感,抗噪性能不好,但是由于OMP 算法复杂度最低,其经常被用于工程实践当中。

    BCS 算法而言,其在抗噪性能方面表现出了不错的性能,缺点在于其超分辨能力不强。

    总结:实验结果表明l1 范数最小化方法性能适中;贪婪算法重构精度最差,没有超分辨能力,对于噪声很敏感,BCS 算法抗噪性能好,重构精度高,但超分辨能力不强;lP 范数非凸优化方法超分辨能力强,且重构精度高,但对SNR 较为敏感。

     

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 183
精华内容 73
关键字:

压缩感知图像重构