精华内容
下载资源
问答
  • 压缩感知重构算法

    2018-02-06 15:37:31
    压缩感知重构算法,比传统算法快,利用GSPR算法进行重构还原,是一个比较简单的算法 利用压缩感知进行压缩信号时,常常需要用到GSPR算法进行还原
  • 压缩感知重构算法OMP

    2018-01-11 10:14:31
    该代码为压缩感知重构算法的正交匹配追踪的matlab代码,注释很详细
  • 压缩感知重构算法.zip

    2020-06-12 14:35:11
    利用MATLAB实现了压缩感知重构算法,里面包含相应的函数及解释,对学习该类算法有一个较好的认识,有利于学习
  • 压缩感知 重构算法

    2011-12-30 19:51:58
    压缩感知 重构算法 partialDCT
  • 压缩感知重构Matlab重构算法(MATLAB编写、含有SP算法、各类重构算法)
  • 一种压缩感知重构算法,压缩感知领域权威论文,提出了一种新型的压缩感知重构算法。
  • OMP压缩感知重构方法

    2016-06-22 20:23:18
    压缩感知重构的OMP代码,我也是下载的,感觉还行,就上传,大家一起分享
  • 利用正交匹配追踪算法对高光谱图像进行压缩感知重构,是通过寻找最优原子对原始信号进行线性表示,使残差不断减小以获取重构信号。在处理基于冗余字典的重构问题时,其耗时主要存在于原子匹配过程和残差更新过程,导致...
  • 自适应PCA稀疏基底的分布式视频压缩感知重构
  • 基于分离字典构造的快速压缩感知重构算法
  • 该文件为压缩感知重构算法中的SAMP算法,算法注释和详细
  • 利用视频非局部相似性的分布式压缩感知重构
  • 该代码是压缩感知重构算法基追踪(BP),注释很详细,可以直接运行
  • 压缩感知重构算法翻译,关于一种迭代构造观测举证的算法,以相干性作为衡量性能的标准
  • 利用图像的非局部相似性先验以提升图像恢复质量已...为了更有效地提升压缩感知(CS)图像的重构质量,提出了一种基于加权结构组稀疏表示(WSGSR)的图像压缩感知重构方法。采用非局部相似图像块结构组加权稀疏表示的
  • 为了提高现有块压缩感知重构算法的性能,提出了基于全变分和混合变分模型的块压缩感知(简称BCS-TV和BCS-MV)算法。该方法以块为单位进行图像采样,以自然图像正则项的稀疏性为先验条件,通过变型的增广拉格朗日交替...
  • 基于块稀疏贝叶斯学习的多任务压缩感知重构算法
  • 压缩感知重构算法之压缩采样匹配追踪(CoSaMP) 转载自彬彬有礼的专栏 题目:压缩感知重构算法之压缩采样匹配追踪(CoSaMP)  压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出...

    压缩感知重构算法之压缩采样匹配追踪(CoSaMP)

    转载自彬彬有礼的专栏

    题目:压缩感知重构算法之压缩采样匹配追踪(CoSaMP)

            压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法。CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了原子的选择标准之外,它有一点不同于ROMP:ROMP每次迭代已经选择的原子会一直保留,而CoSaMP每次迭代选择的原子在下次迭代中可能会被抛弃。

    0、符号说明如下:

            压缩观测y=Φx,其中y为观测所得向量M×1,x为原信号N×1(M<<N)。x一般不是稀疏的,但在某个变换域Ψ是稀疏的,即x=Ψθ,其中θ为K稀疏的,即θ只有K个非零项。此时y=ΦΨθ,令A=ΦΨ,则y=

            (1) y为观测所得向量,大小为M×1

            (2)x为原信号,大小为N×1

            (3)θ为K稀疏的,是信号在x在某变换域的稀疏表示

            (4) Φ称为观测矩阵、测量矩阵、测量基,大小为M×N

            (5) Ψ称为变换矩阵、变换基、稀疏矩阵、稀疏基、正交基字典矩阵,大小为N×N

            (6)A称为测度矩阵、传感矩阵、CS信息算子,大小为M×N

    上式中,一般有K<<M<<N,后面三个矩阵各个文献的叫法不一,以后我将Φ称为测量矩阵、将Ψ称为稀疏矩阵、将A称为传感矩阵

            注意:这里的稀疏表示模型为x=Ψθ,所以传感矩阵A=ΦΨ;而有些文献中稀疏模型为θ=Ψx,而一般Ψ为Hermite矩阵(实矩阵时称为正交矩阵),所以Ψ-1=ΨH (实矩阵时为Ψ-1=ΨT),即x=ΨHθ,所以传感矩阵A=ΦΨH,例如沙威的OMP例程中就是如此。

    1、CoSaMP重构算法流程:


    2、压缩采样匹配追踪(CoSaOMP)Matlab代码(CS_CoSaMP.m)

            代码参考了文献[5]中的Demo_CS_CoSaMP.m,也可参考文献[6],或者文献[7]中的cosamp.m。值得一提的是文献[5]的所有代码都挺不错的,从代码注释中可以得知作者是ustc的ChengfuHuo,百度一下可知是中国科技大学的霍承富博士,已于2012年6月毕业,博士论文题目是《超光谱遥感图像压缩技术研究》,向这位学长致敬!(虽然不是一个学校的)

            2015-05-13更新:

    1. function [ theta ] = CS_CoSaMP( y,A,K )  
    2. %CS_CoSaOMP Summary of this function goes here  
    3. %Created by jbb0523@@2015-04-29  
    4. %Version: 1.1 modified by jbb0523 @2015-05-09  
    5. %   Detailed explanation goes here  
    6. %   y = Phi * x  
    7. %   x = Psi * theta  
    8. %   y = Phi*Psi * theta  
    9. %   令 A = Phi*Psi, 则y=A*theta  
    10. %   K is the sparsity level  
    11. %   现在已知y和A,求theta  
    12. %   Reference:Needell D,Tropp J A.CoSaMP:Iterative signal recovery from  
    13. %   incomplete and inaccurate samples[J].Applied and Computation Harmonic   
    14. %   Analysis,2009,26:301-321.  
    15.     [y_rows,y_columns] = size(y);  
    16.     if y_rows<y_columns  
    17.         y = y';%y should be a column vector  
    18.     end  
    19.     [M,N] = size(A);%传感矩阵A为M*N矩阵  
    20.     theta = zeros(N,1);%用来存储恢复的theta(列向量)  
    21.     Pos_theta = [];%用来迭代过程中存储A被选择的列序号  
    22.     r_n = y;%初始化残差(residual)为y  
    23.     for kk=1:K%最多迭代K次  
    24.         %(1) Identification  
    25.         product = A'*r_n;%传感矩阵A各列与残差的内积  
    26.         [val,pos]=sort(abs(product),'descend');  
    27.         Js = pos(1:2*K);%选出内积值最大的2K列  
    28.         %(2) Support Merger  
    29.         Is = union(Pos_theta,Js);%Pos_theta与Js并集  
    30.         %(3) Estimation  
    31.         %At的行数要大于列数,此为最小二乘的基础(列线性无关)  
    32.         if length(Is)<=M  
    33.             At = A(:,Is);%将A的这几列组成矩阵At  
    34.         else%At的列数大于行数,列必为线性相关的,At'*At将不可逆  
    35.             if kk == 1  
    36.                 theta_ls = 0;  
    37.             end  
    38.             break;%跳出for循环  
    39.         end  
    40.         %y=At*theta,以下求theta的最小二乘解(Least Square)  
    41.         theta_ls = (At'*At)^(-1)*At'*y;%最小二乘解  
    42.         %(4) Pruning  
    43.         [val,pos]=sort(abs(theta_ls),'descend');  
    44.         %(5) Sample Update  
    45.         Pos_theta = Is(pos(1:K));  
    46.         theta_ls = theta_ls(pos(1:K));  
    47.         %At(:,pos(1:K))*theta_ls是y在At(:,pos(1:K))列空间上的正交投影  
    48.         r_n = y - At(:,pos(1:K))*theta_ls;%更新残差   
    49.         if norm(r_n)<1e-6%Repeat the steps until r=0  
    50.             break;%跳出for循环  
    51.         end  
    52.     end  
    53.     theta(Pos_theta)=theta_ls;%恢复出的theta  
    54. end  
    function [ theta ] = CS_CoSaMP( y,A,K )
    %CS_CoSaOMP Summary of this function goes here
    %Created by jbb0523@@2015-04-29
    %Version: 1.1 modified by jbb0523 @2015-05-09
    %   Detailed explanation goes here
    %   y = Phi * x
    %   x = Psi * theta
    %	y = Phi*Psi * theta
    %   令 A = Phi*Psi, 则y=A*theta
    %   K is the sparsity level
    %   现在已知y和A,求theta
    %   Reference:Needell D,Tropp J A.CoSaMP:Iterative signal recovery from
    %   incomplete and inaccurate samples[J].Applied and Computation Harmonic 
    %   Analysis,2009,26:301-321.
        [y_rows,y_columns] = size(y);
        if y_rows<y_columns
            y = y';%y should be a column vector
        end
        [M,N] = size(A);%传感矩阵A为M*N矩阵
        theta = zeros(N,1);%用来存储恢复的theta(列向量)
        Pos_theta = [];%用来迭代过程中存储A被选择的列序号
        r_n = y;%初始化残差(residual)为y
        for kk=1:K%最多迭代K次
            %(1) Identification
            product = A'*r_n;%传感矩阵A各列与残差的内积
            [val,pos]=sort(abs(product),'descend');
            Js = pos(1:2*K);%选出内积值最大的2K列
            %(2) Support Merger
            Is = union(Pos_theta,Js);%Pos_theta与Js并集
            %(3) Estimation
            %At的行数要大于列数,此为最小二乘的基础(列线性无关)
            if length(Is)<=M
                At = A(:,Is);%将A的这几列组成矩阵At
            else%At的列数大于行数,列必为线性相关的,At'*At将不可逆
                if kk == 1
                    theta_ls = 0;
                end
                break;%跳出for循环
            end
            %y=At*theta,以下求theta的最小二乘解(Least Square)
            theta_ls = (At'*At)^(-1)*At'*y;%最小二乘解
            %(4) Pruning
            [val,pos]=sort(abs(theta_ls),'descend');
            %(5) Sample Update
            Pos_theta = Is(pos(1:K));
            theta_ls = theta_ls(pos(1:K));
            %At(:,pos(1:K))*theta_ls是y在At(:,pos(1:K))列空间上的正交投影
            r_n = y - At(:,pos(1:K))*theta_ls;%更新残差 
            if norm(r_n)<1e-6%Repeat the steps until r=0
                break;%跳出for循环
            end
        end
        theta(Pos_theta)=theta_ls;%恢复出的theta
    end
            原先的版本:

    1. function [ theta ] = CS_CoSaMP( y,A,K )  
    2. %CS_CoSaMP Summary of this function goes here  
    3. %Version: 1.0 written by jbb0523 @2015-04-29  
    4. %   Detailed explanation goes here  
    5. %   y = Phi * x  
    6. %   x = Psi * theta  
    7. %   y = Phi*Psi * theta  
    8. %   令 A = Phi*Psi, 则y=A*theta  
    9. %   K is the sparsity level  
    10. %   现在已知y和A,求theta  
    11. %   Reference:Needell D,Tropp J A.CoSaMP:Iterative signal recovery from  
    12. %   incomplete and inaccurate samples[J].Applied and Computation Harmonic   
    13. %   Analysis,2009,26:301-321.  
    14.     [y_rows,y_columns] = size(y);  
    15.     if y_rows<y_columns  
    16.         y = y';%y should be a column vector  
    17.     end  
    18.     [M,N] = size(A);%传感矩阵A为M*N矩阵  
    19.     theta = zeros(N,1);%用来存储恢复的theta(列向量)  
    20.     Pos_theta = [];%用来迭代过程中存储A被选择的列序号  
    21.     r_n = y;%初始化残差(residual)为y  
    22.     for kk=1:K%最多迭代K次  
    23.         %(1) Identification  
    24.         product = A'*r_n;%传感矩阵A各列与残差的内积  
    25.         [val,pos]=sort(abs(product),'descend');  
    26.         Js = pos(1:2*K);%选出内积值最大的2K列  
    27.         %(2) Support Merger  
    28.         Is = union(Pos_theta,Js);%Pos_theta与Js并集  
    29.         %(3) Estimation  
    30.         %At的行数要大于列数,此为最小二乘的基础(列线性无关)  
    31.         if length(Is)<=M  
    32.             At = A(:,Is);%将A的这几列组成矩阵At  
    33.         else%At的列数大于行数,列必为线性相关的,At'*At将不可逆  
    34.             break;%跳出for循环  
    35.         end  
    36.         %y=At*theta,以下求theta的最小二乘解(Least Square)  
    37.         theta_ls = (At'*At)^(-1)*At'*y;%最小二乘解  
    38.         %(4) Pruning  
    39.         [val,pos]=sort(abs(theta_ls),'descend');  
    40.         %(5) Sample Update  
    41.         Pos_theta = Is(pos(1:K));  
    42.         theta_ls = theta_ls(pos(1:K));  
    43.         %At(:,pos(1:K))*theta_ls是y在At(:,pos(1:K))列空间上的正交投影  
    44.         r_n = y - At(:,pos(1:K))*theta_ls;%更新残差   
    45.         if norm(r_n)<1e-6%Repeat the steps until r=0  
    46.             break;%跳出for循环  
    47.         end  
    48.     end  
    49.     theta(Pos_theta)=theta_ls;%恢复出的theta  
    50. end  
    function [ theta ] = CS_CoSaMP( y,A,K )
    %CS_CoSaMP Summary of this function goes here
    %Version: 1.0 written by jbb0523 @2015-04-29
    %   Detailed explanation goes here
    %   y = Phi * x
    %   x = Psi * theta
    %	y = Phi*Psi * theta
    %   令 A = Phi*Psi, 则y=A*theta
    %   K is the sparsity level
    %   现在已知y和A,求theta
    %   Reference:Needell D,Tropp J A.CoSaMP:Iterative signal recovery from
    %   incomplete and inaccurate samples[J].Applied and Computation Harmonic 
    %   Analysis,2009,26:301-321.
        [y_rows,y_columns] = size(y);
        if y_rows<y_columns
            y = y';%y should be a column vector
        end
        [M,N] = size(A);%传感矩阵A为M*N矩阵
        theta = zeros(N,1);%用来存储恢复的theta(列向量)
        Pos_theta = [];%用来迭代过程中存储A被选择的列序号
        r_n = y;%初始化残差(residual)为y
        for kk=1:K%最多迭代K次
            %(1) Identification
            product = A'*r_n;%传感矩阵A各列与残差的内积
            [val,pos]=sort(abs(product),'descend');
            Js = pos(1:2*K);%选出内积值最大的2K列
            %(2) Support Merger
            Is = union(Pos_theta,Js);%Pos_theta与Js并集
            %(3) Estimation
            %At的行数要大于列数,此为最小二乘的基础(列线性无关)
            if length(Is)<=M
                At = A(:,Is);%将A的这几列组成矩阵At
            else%At的列数大于行数,列必为线性相关的,At'*At将不可逆
                break;%跳出for循环
            end
            %y=At*theta,以下求theta的最小二乘解(Least Square)
            theta_ls = (At'*At)^(-1)*At'*y;%最小二乘解
            %(4) Pruning
            [val,pos]=sort(abs(theta_ls),'descend');
            %(5) Sample Update
            Pos_theta = Is(pos(1:K));
            theta_ls = theta_ls(pos(1:K));
            %At(:,pos(1:K))*theta_ls是y在At(:,pos(1:K))列空间上的正交投影
            r_n = y - At(:,pos(1:K))*theta_ls;%更新残差 
            if norm(r_n)<1e-6%Repeat the steps until r=0
                break;%跳出for循环
            end
        end
        theta(Pos_theta)=theta_ls;%恢复出的theta
    end

            在程序主循环的(3)Estimation部分增加了以下几行代码,以使函数运行更加稳定:

    1. if kk == 1  
    2.     theta_ls = 0;  
    3. end  
                if kk == 1
                    theta_ls = 0;
                end

    3、CoSaMP单次重构测试代码

            以下测试代码基本与OMP单次重构测试代码一样。

    1. %压缩感知重构算法测试  
    2. clear all;close all;clc;  
    3. M = 64;%观测值个数  
    4. N = 256;%信号x的长度  
    5. K = 12;%信号x的稀疏度  
    6. Index_K = randperm(N);  
    7. x = zeros(N,1);  
    8. x(Index_K(1:K)) = 5*randn(K,1);%x为K稀疏的,且位置是随机的  
    9. Psi = eye(N);%x本身是稀疏的,定义稀疏矩阵为单位阵x=Psi*theta  
    10. Phi = randn(M,N);%测量矩阵为高斯矩阵  
    11. A = Phi * Psi;%传感矩阵  
    12. y = Phi * x;%得到观测向量y  
    13. %% 恢复重构信号x  
    14. tic  
    15. theta = CS_CoSaMP( y,A,K );  
    16. x_r = Psi * theta;% x=Psi * theta  
    17. toc  
    18. %% 绘图  
    19. figure;  
    20. plot(x_r,'k.-');%绘出x的恢复信号  
    21. hold on;  
    22. plot(x,'r');%绘出原信号x  
    23. hold off;  
    24. legend('Recovery','Original')  
    25. fprintf('\n恢复残差:');  
    26. norm(x_r-x)%恢复残差  
    %压缩感知重构算法测试
    clear all;close all;clc;
    M = 64;%观测值个数
    N = 256;%信号x的长度
    K = 12;%信号x的稀疏度
    Index_K = randperm(N);
    x = zeros(N,1);
    x(Index_K(1:K)) = 5*randn(K,1);%x为K稀疏的,且位置是随机的
    Psi = eye(N);%x本身是稀疏的,定义稀疏矩阵为单位阵x=Psi*theta
    Phi = randn(M,N);%测量矩阵为高斯矩阵
    A = Phi * Psi;%传感矩阵
    y = Phi * x;%得到观测向量y
    %% 恢复重构信号x
    tic
    theta = CS_CoSaMP( y,A,K );
    x_r = Psi * theta;% x=Psi * theta
    toc
    %% 绘图
    figure;
    plot(x_r,'k.-');%绘出x的恢复信号
    hold on;
    plot(x,'r');%绘出原信号x
    hold off;
    legend('Recovery','Original')
    fprintf('\n恢复残差:');
    norm(x_r-x)%恢复残差

            运行结果如下:(信号为随机生成,所以每次结果均不一样)

            1)图:

            2)Command  windows

            Elapsedtime is 0.073375 seconds.

            恢复残差:

            ans=

              7.3248e-015

    4、测量数M与重构成功概率关系曲线绘制例程代码

            以下测试代码基本与OMP测量数M与重构成功概率关系曲线绘制代码一样。增加了“fprintf('K=%d,M=%d\n',K,M);”,可以观察程序运行进度。
    1. clear all;close all;clc;  
    2. %% 参数配置初始化  
    3. CNT = 1000;%对于每组(K,M,N),重复迭代次数  
    4. N = 256;%信号x的长度  
    5. Psi = eye(N);%x本身是稀疏的,定义稀疏矩阵为单位阵x=Psi*theta  
    6. K_set = [4,12,20,28,36];%信号x的稀疏度集合  
    7. Percentage = zeros(length(K_set),N);%存储恢复成功概率  
    8. %% 主循环,遍历每组(K,M,N)  
    9. tic  
    10. for kk = 1:length(K_set)  
    11.     K = K_set(kk);%本次稀疏度  
    12.     M_set = 2*K:5:N;%M没必要全部遍历,每隔5测试一个就可以了  
    13.     PercentageK = zeros(1,length(M_set));%存储此稀疏度K下不同M的恢复成功概率  
    14.     for mm = 1:length(M_set)  
    15.        M = M_set(mm);%本次观测值个数  
    16.        fprintf('K=%d,M=%d\n',K,M);  
    17.        P = 0;  
    18.        for cnt = 1:CNT %每个观测值个数均运行CNT次  
    19.             Index_K = randperm(N);  
    20.             x = zeros(N,1);  
    21.             x(Index_K(1:K)) = 5*randn(K,1);%x为K稀疏的,且位置是随机的                  
    22.             Phi = randn(M,N)/sqrt(M);%测量矩阵为高斯矩阵  
    23.             A = Phi * Psi;%传感矩阵  
    24.             y = Phi * x;%得到观测向量y  
    25.             theta = CS_CoSaMP(y,A,K);%恢复重构信号theta  
    26.             x_r = Psi * theta;% x=Psi * theta  
    27.             if norm(x_r-x)<1e-6%如果残差小于1e-6则认为恢复成功  
    28.                 P = P + 1;  
    29.             end  
    30.        end  
    31.        PercentageK(mm) = P/CNT*100;%计算恢复概率  
    32.     end  
    33.     Percentage(kk,1:length(M_set)) = PercentageK;  
    34. end  
    35. toc  
    36. save CoSaMPMtoPercentage1000 %运行一次不容易,把变量全部存储下来  
    37. %% 绘图  
    38. S = ['-ks';'-ko';'-kd';'-kv';'-k*'];  
    39. figure;  
    40. for kk = 1:length(K_set)  
    41.     K = K_set(kk);  
    42.     M_set = 2*K:5:N;  
    43.     L_Mset = length(M_set);  
    44.     plot(M_set,Percentage(kk,1:L_Mset),S(kk,:));%绘出x的恢复信号  
    45.     hold on;  
    46. end  
    clear all;close all;clc;
    %% 参数配置初始化
    CNT = 1000;%对于每组(K,M,N),重复迭代次数
    N = 256;%信号x的长度
    Psi = eye(N);%x本身是稀疏的,定义稀疏矩阵为单位阵x=Psi*theta
    K_set = [4,12,20,28,36];%信号x的稀疏度集合
    Percentage = zeros(length(K_set),N);%存储恢复成功概率
    %% 主循环,遍历每组(K,M,N)
    tic
    for kk = 1:length(K_set)
        K = K_set(kk);%本次稀疏度
        M_set = 2*K:5:N;%M没必要全部遍历,每隔5测试一个就可以了
        PercentageK = zeros(1,length(M_set));%存储此稀疏度K下不同M的恢复成功概率
        for mm = 1:length(M_set)
           M = M_set(mm);%本次观测值个数
           fprintf('K=%d,M=%d\n',K,M);
           P = 0;
           for cnt = 1:CNT %每个观测值个数均运行CNT次
                Index_K = randperm(N);
                x = zeros(N,1);
                x(Index_K(1:K)) = 5*randn(K,1);%x为K稀疏的,且位置是随机的                
                Phi = randn(M,N)/sqrt(M);%测量矩阵为高斯矩阵
                A = Phi * Psi;%传感矩阵
                y = Phi * x;%得到观测向量y
                theta = CS_CoSaMP(y,A,K);%恢复重构信号theta
                x_r = Psi * theta;% x=Psi * theta
                if norm(x_r-x)<1e-6%如果残差小于1e-6则认为恢复成功
                    P = P + 1;
                end
           end
           PercentageK(mm) = P/CNT*100;%计算恢复概率
        end
        Percentage(kk,1:length(M_set)) = PercentageK;
    end
    toc
    save CoSaMPMtoPercentage1000 %运行一次不容易,把变量全部存储下来
    %% 绘图
    S = ['-ks';'-ko';'-kd';'-kv';'-k*'];
    figure;
    for kk = 1:length(K_set)
        K = K_set(kk);
        M_set = 2*K:5:N;
        L_Mset = length(M_set);
        plot(M_set,Percentage(kk,1:L_Mset),S(kk,:));%绘出x的恢复信号
        hold on;
    end

            本程序在联想ThinkPadE430C笔记本(4GBDDR3内存,i5-3210)上运行共耗时1102.325890,程序中将所有数据均通过“save CoSaMPMtoPercentage1000”存储了下来,以后可以再对数据进行分析,只需“load CoSaMPMtoPercentage1000”即可。

            本程序运行结果:

    5、结语

            有关CoSaMP的原始引用文献共有四个版本,分别如参考文献[1][2][3][4],可依据链接下载,其中[1]和[2]基本一致,本人主要看的是文献[2]。

            有关CoSaMP的算法流程,可参见参考文献[2]:

    这个流程中的其它部分都可以看懂,就是那句“b|Tc←0”很不明白,“Tc”到底是指的什么呢?现在看来应该是T的补集(complementary set),向量b的元素序号为全集,子集T对应的元素等于最小二乘解,补集对应的元素为零。

            有关算法流程中的“注3”提到的迭代次数,在文献[2]中多处有提及,不过面向的问题不同,可以文献[2]中搜索“Iteration Count”,以下给出三处:



            文献[8]的3.4节提到“设算法的迭代步长为K,候选集中最多有3K个原子,每次最多剔除K个原子,以保证支撑集中有2K个原子”,对这个观点我保留意见,我认为应该是“每次最多剔除2K个原子,以保证支撑集中有K个原子”。

    参考文献:

    [1]D. Needell, J.A. Tropp, CoSaMP: Iterative signal recovery from incomplete andinaccurate samples, ACM Technical Report 2008-01, California Institute ofTechnology, Pasadena, 2008.

    (http://authors.library.caltech.edu/27169/)

    [2]D. Needell, J.A. Tropp.CoSaMP: Iterative signal recoveryfrom incomplete and inaccurate samples.http://arxiv.org/pdf/0803.2392v2.pdf

    [3] D. Needell, J.A. Tropp.CoSaMP:Iterativesignal recovery from incomplete and inaccurate samples[J].Appliedand Computation Harmonic Analysis,2009,26:301-321.

    (http://www.sciencedirect.com/science/article/pii/S1063520308000638)

    [4]D.Needell, J.A. Tropp.CoSaMP: Iterative signal recoveryfrom incomplete and inaccurate samples[J]. Communications of theACM,2010,53(12):93-100.

    (http://dl.acm.org/citation.cfm?id=1859229)

    [5]Li Zeng. CS_Reconstruction.http://www.pudn.com/downloads518/sourcecode/math/detail2151378.html

    [6]wanghui.csmp. http://www.pudn.com/downloads252/sourcecode/others/detail1168584.html

    [7]付自杰.cs_matlab. http://www.pudn.com/downloads641/sourcecode/math/detail2595379.html

    [8]杨真真,杨震,孙林慧.信号压缩重构的正交匹配追踪类算法综述[J]. 信号处理,2013,29(4):486-496.



    展开全文
  • 该方法基于线性分组码中稀疏校验矩阵的零化子特性,建立了以误差向量为目标信号的线性规划问题,实现了低密度奇偶校验(LDPC)码的压缩感知重构。仿真结果表明:在加性高斯白噪声信道和原对偶内点算法下,选取的3种LDPC码...
  • 压缩感知重构算法之OMP算法python实现

    万次阅读 多人点赞 2016-03-18 15:08:55
    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构算法之OLS算法python实现 压缩感知重构...

    压缩感知重构算法之OMP算法python实现
    压缩感知重构算法之CoSaMP算法python实现
    压缩感知重构算法之SP算法python实现
    压缩感知重构算法之IHT算法python实现
    压缩感知重构算法之OLS算法python实现
    压缩感知重构算法之IRLS算法python实现

    本文主要简单介绍了利用python代码实现压缩感知的过程。

    压缩感知简介

    【具体可以参考这篇文章
    假设一维信号x长度为N,稀疏度为K。Φ 为大小M×N矩阵(M<<N)y=Φ×x为长度M的一维测量值。压缩感知问题就是已知测量值y和测量矩阵Φ的基础上,求解欠定方程组y=Φ×x得到原信号x。Φ的每一行可以看作是一个传感器(Sensor),它与信号相乘,采样了信号的一部分信息。而这一部分信息足以代表原信号,并能找到一个算法来高概率恢复原信号。 一般的自然信号x本身并不是稀疏的,需要在某种稀疏基上进行稀疏表示x=ψs,ψ为稀疏基矩阵,S为稀疏系数。所以整个压缩感知过程可以描述为

    y=Φx=ΦΨs=Θs

    重建算法:OMP算法简析

    OMP算法
    输 入:测量值y、传感矩阵Phi=Φψ、稀疏度K
    初始化:初始残差 r0=y,迭代次数t=1,索引值集合index;
    步 骤:
    1、找到残差r和传感矩阵的列积中最大值对应下标,也就是找到二者内积绝对值最大的一个元素对应的下标,保存到index当中
    2、利用index从传感矩阵中找到,新的索引集Phit
    3、利用最小二乘法处理新的索引集和y得到新的近似值θ=argmin||yPhitθ||2
    4、计算新的残差rt=yPhitθ,t=t+1
    5、残差是否小于设定值,小于的话 退出循环,不小于的话再判断t>K是否成立,满足即停止迭代,否则重新回到步骤1,继续执行该算法。
    输 出:θ的K-稀疏近似值


    实验

    要利用python实现,电脑必须安装以下程序

    • python (本文用的python版本为3.5.1)
    • numpy python包(本文用的版本为1.10.4)
    • scipy python包(本文用的版本为0.17.0)
    • pillow python包(本文用的版本为3.1.1)

    python代码

    #coding:utf-8
    #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    # DCT基作为稀疏基,重建算法为OMP算法 ,图像按列进行处理
    # 参考文献: 任晓馨. 压缩感知贪婪匹配追踪类重建算法研究[D]. 
    #北京交通大学, 2012.
    #
    #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    # 导入所需的第三方库文件
    import  numpy as np
    import math
    from PIL import Image
    
    #读取图像,并变成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)
    
    #OMP算法函数
    def cs_omp(y,D):    
        L=math.floor(3*(y.shape[0])/4)
        residual=y  #初始化残差
        index=np.zeros((L),dtype=int)
        for i in range(L):
            index[i]= -1
        result=np.zeros((256))
        for j in range(L):  #迭代次数
            product=np.fabs(np.dot(D.T,residual))
            pos=np.argmax(product)  #最大投影系数对应的位置        
            index[j]=pos
            my=np.linalg.pinv(D[:,index>=0]) #最小二乘,看参考文献1           
            a=np.dot(my,y) #最小二乘,看参考文献1     
            residual=y-np.dot(D[:,index>=0],a)
        result[index>=0]=a
        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_omp(img_cs_1d[:,i],Theta_1d) #利用OMP算法计算稀疏系数
        sparse_rec_1d[:,i]=column_rec;        
    img_rec=np.dot(mat_dct_1d,sparse_rec_1d)          #稀疏系数乘上基矩阵
    
    #显示重建后的图片
    image2=Image.fromarray(img_rec)
    image2.show()

    matlab代码

    %这个代码是网上某位大哥写的,在此谢过了~
    function Demo_CS_OMP()
    %------------ read in the image --------------
    img=imread('lena.bmp');     % testing image
    img=double(img);
    [height,width]=size(img);
    %------------ form the measurement matrix and base matrix -------
    Phi=randn(floor(0.7*height),width);  % only keep one third of the original data  
    Phi = Phi./repmat(sqrt(sum(Phi.^2,1)),[floor(0.7*height),1]); % normalize each column
    
    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;  
    
    %-------- recover using omp ------------
    sparse_rec_1d=zeros(height,width);  
    Theta_1d=Phi*mat_dct_1d;%测量矩阵乘上基矩阵
    for i=1:width
        column_rec=cs_omp(img_cs_1d(:,i),Theta_1d,height);
        sparse_rec_1d(:,i)=column_rec'; %  稀疏系数
    end
    img_rec_1d=mat_dct_1d*sparse_rec_1d;  %稀疏系数乘上基矩阵
    
    
    %------------ show the results --------------------
    figure(1)
    subplot(2,2,1),imshow(uint8(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'));
    
    %*******************************************************%
    function hat_x=cs_omp(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)/4
    
    n=length(y);
    s=floor(3*n/4); %  测量值维数
    hat_x=zeros(1,m); %  待重构的谱域(变换域)向量                     
    Aug_t=[];        %  增量矩阵(初始值为空矩阵)
    r_n=y;  %  残差值 
    
    for times=1:s; %  迭代次数(稀疏度是测量的1/4)
    
        product=abs(T_Mat'*r_n);    
        [val,pos]=max(product);   %最大投影系数对应的位置
        Aug_t=[Aug_t,T_Mat(:,pos)];   %矩阵扩充
        T_Mat(:,pos)=zeros(n,1); %选中的列置零
        aug_x=(Aug_t'*Aug_t)^(-1)*Aug_t'*y;  % 最小二乘,看参考文献1
        r_n=y-Aug_t*aug_x;   %残差
        pos_array(times)=pos;   %纪录最大投影系数的位置
    
    end
    hat_x(pos_array)=aug_x;  %  重构的向量 
    
    
    

    参考文献

    1、最小二乘法介绍 (wiki链接
    2、任晓馨. 压缩感知贪婪匹配追踪类重建算法研究[D]. 北京交通大学, 2012.(OMP算法介绍)

    欢迎python爱好者加入:学习交流群 667279387

    展开全文
  • 准稀疏信号的压缩感知重构,压缩感知领域权威文论。
  • 作为1-bit压缩感知重构算法,在此基础上可以仿真,改进稀疏度自适应算法
  • 针对当前压缩感知重构算法存在重构质量偏低、重构时间过长等问题,提出了基于矩阵流形分离字典构造的分块压缩感知重构算法。首先,该算法基于矩阵流形模型训练出可分离稀疏表示矩阵,并对其正交化;其次,构造随机...
  • 基于分布式压缩感知理论,利用高光谱图像谱间的低秩特性,提出一种高光谱图像分布式压缩感知重构方法。该方法在编码端对各谱段图像分别进行压缩感知测量,运算简单,便于硬件实现。解码端重构时,首先对各谱段图像...
  • 压缩感知重构算法——FPC前言Fixed PointContinuationFPC参考 前言 所谓FPC即Fixed Point Continuation,其中涉及到两个部分,即Fixed Point和Continuation。不动点迭代算法和连续算法。下面针对这两个方面对FPC算法...

    压缩感知重构算法——FPC

    前言

    所谓FPC即Fixed Point Continuation,其中涉及到两个部分,即Fixed Point和Continuation。不动点迭代算法和连续算法。下面针对这两个方面对FPC算法的原理进行阐述。

    Fixed Point

    首先,FPC算法是2007年Elaine T. Hale等人提出的一种解决压缩感知中L1范数最小化问题的重构算法。属于凸优化算法的一种。其解决问题的数学模型如下:
    在这里插入图片描述
    目标即求minφ(x)的解x*。而我们知道,求一个函数的最优解,即求其导数的零解,即T(x)=∂φ(x)=0的解x*。
    求函数T(x)=0,可以使用不动点迭代的方法,即将T(x)=0变成x=g(x)的形式,进行迭代求解。根据这个思想,我们再来看原始的目标函数φ(x),通常φ(x)可以分解为两个凸函数的相加,即φ(x)=φ12。那么我们对应的算子T也可以转换为两个单调算子的和,即T=T1+T2。之后我们开始进行不动点迭代的转换,即求T的零解
    在转换过程中我们假设参数τ>0,且T2是一个单值函数,且(I+τT1)可逆。
    在这里插入图片描述
    可推出φ(x)最小解的迭代式:在这里插入图片描述
    对于解决的凸优化问题,即T1=▽||x||1,T2= μ▽||Ax-b||22/2。同时要求(I+τT1)是收缩的。
    之后针对凸优化问题的解,原论文中给出命题:在这里插入图片描述
    其中g(x)=▽f(x)=▽μ||Ax-b||22/2。
    上式(15)其中包含两个步骤,一个是梯度下降步,一个是阈值收缩步。
    在这里插入图片描述
    最终可表示为迭代式在这里插入图片描述
    其中v=τ/μ.
    以上便是FPC的FP不动点迭代部分,

    Continuation

    而对于连续算法,又名同伦法。其目的是用于选择合适的μ值。
    同伦法的思想即为了解决一个问题f(x),可以构造一个新的问题H(x,s)=sf(x)+(1-s)g(x)。其中当s=1时,H(x,1)=f(x),即原问题;当s=0时,H(x,0)=g(x)。其中g(x)一般可设置为一个已知解的问题,如f(x)-f(x*),解为x*。然后s从0到1缓慢变换,得到一个路径,这个H(x,s)即连接f(x)到g(x)的路径。然后将其融入到其他算法中,进行迭代,往往会比给定一个具体的初值的效果要更好。
    有关同伦法具体解释可参考这篇博客同伦法(Homotopy Method)

    FPC

    而FPC算法即在不动点迭代中加入同伦法的思想,不以直接设定的初值μ来进行迭代计算,而是生成一个μ的序列,然后在这个序列中缓慢变化选择,进行迭代。下面给出FPC算法的实现步骤:
    在这里插入图片描述

    参考

    【1】FPC论文
    【2】同伦法

    展开全文
  • 浅谈压缩感知(三十):压缩感知重构算法之L1最小二乘 主要内容: l1_ls的算法流程l1_ls的MATLAB实现一维信号的实验与结果 前言 前面所介绍的算法都是在匹配追踪算法MP基础上延伸的贪心算法,从本节开始,介绍...

    浅谈压缩感知(三十):压缩感知重构算法之L1最小二乘

    主要内容:

    1. l1_ls的算法流程
    2. l1_ls的MATLAB实现
    3. 一维信号的实验与结果

    前言

    前面所介绍的算法都是在匹配追踪算法MP基础上延伸的贪心算法,从本节开始,介绍基于凸优化的压缩感知重构算法。

    约束的凸优化问题:

    去约束的凸优化问题:

    在压缩感知中,J函数和H函数的选择:

     

    那么,后面要解决的问题就是如何通过最优化方法来求出x。

    一、l1_ls的算法

    l1_ls,全称ℓ1-regularized least squares,基于L1正则的最小二乘算法,在标准内点法的基础上,在truncated-Newton framework中,利用Hessian的结构信息来预测共轭梯度preconditioned conjugate gradient (PCG),通过PCG来计算搜索方向,这样可以大大降低计算量。

    具体参考:http://www.stanford.edu/~boyd/papers/l1_ls.html

    二、l1_ls的MATLAB实现(l1_ls.m)

    可以通过上面的链接将相关代码下载下来,这里就不贴出来。

    三、一维信号的实验与结果

    1、simple_example.m

    2、operator_example.m

    展开全文
  • 首先提出一种基于遗传算法的压缩感知重构新方法, 并设计了具体的算法流程. 该方法运用遗传迭代思想, 在稀疏度未知的情况下可准确重构出原始信号, 避免了子空间跟踪问题. 在此基础上, 进一步将所提新方法应用于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 758
精华内容 303
关键字:

压缩感知重构