实现匹配追踪算法 [英] Implementing matching pursuit algorithm

查看:199
本文介绍了实现匹配追踪算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了匹配追踪算法,但我无法获得所需的结果。

I have implemented matching pursuit algorithm but i m unable to get the required result.

这是我的代码:

D=[1 6 11 16 21 26 31 36 41 46
    2 7 12 17 22 27 32 37 42 47
    3 8 13 18 23 28 33 38 43 48
    4 9 14 19 24 29 34 39 44 49
    5 10 15 20 25 30 35 40 45 50];
b=[6;7;8;9;10];
n=size(D);
A1=zeros(n);
R=b;
H=10;
if(H <= 0)
    error('The number of iterations needs to be greater then 0')
end;
for k=1:1:H
    [c,d] = max(abs(D'*R));    %//'
    A1(:,d)=D(:,d);
    D(:,d)=0;
    y = A1\b;
    R = b-A1*y;
end

输出

y=

0.8889  
     0  
     0  
     0  
     0  
     0  
     0  
     0  
     0  
0.1111 

我应该只在(2,1)获得非零值,其他值应为零,但我得到2非零值。你能帮我找出错误的位置吗?

I should get only non-zero value at (2,1) and other values should be zero but I'm getting 2 non-zero value. Can you please help me find out where the error is?

谢谢。

推荐答案

这是更新的代码。这基于 https://en.wikipedia.org/wiki/Matching_pursuit 提供的算法

Here is the updated code. This is based on the algorithm provided at https://en.wikipedia.org/wiki/Matching_pursuit

clc;
clear all;

D=[1 6 11 16 21 26 31 36 41 46
    2 7 12 17 22 27 32 37 42 47
    3 8 13 18 23 28 33 38 43 48
    4 9 14 19 24 29 34 39 44 49
    5 10 15 20 25 30 35 40 45 50];

b=[6;7;8;9;10];

H=10;

for index=1:10
   G(:,index)=D(:,index)./norm(D(:,index)); 
end
G1=G;

n=size(G);
R=b;
if(H <= 0)
    error('The number of iterations needs to be greater then 0')
end;
if(H >size(D,2))
    error('The number of iterations needs to be less than dictionary size')
end;

bIndex=1:size(G,2);
for k=H:-1:1
    innerProduct=[];
    for index=1:size(G,2)
        innerProduct(index)=dot(R,G(:,index));
    end
    [c,d] = max(abs(innerProduct));    
    An(H-k+1)=innerProduct(d);
    R = R-(An(H-k+1)*G(:,d));
    G(:,d)=[];
    strong(H-k+1)=bIndex(d);
    bIndex(d)=[];
end
G_new=G1(:,strong);


%% reconstruction
bReconstructed=zeros(size(G_new,1),1);
for index=1:size(G_new,2)
    bReconstructed(:,index) = (An(index)*G_new(:,index));
end
b_new=sum(bReconstructed,2)

这篇关于实现匹配追踪算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆