求用MP算法分解重建图像的matlab代码
展开全部
这里是一维信号的重建:
%基于MP算法
clc;clear
%观测向量y的长度M=80,即采样率M/N=0.3
N=256;
K=15; %信号稀疏度为15
M=80; %
x = zeros(N,1);
q = randperm(N);
x(q(1:K)) =randn(K,1); %原始信号
%构造高斯测量矩阵,用以随机采样
Phi = randn(M,N)*sqrt(1/M);
for i = 1:N
Phi(:,i) = Phi(:,i)/norm(Phi(:,i));
end
y=Phi*x ; %获得线性测量
%用MP算法开始迭代重构
m=2*K; %总的迭代次数
r_n=y; % 残差值初始值
x_find=zeros(N,1); %x_find为MP算法恢复的信号
for times=1:m
for col=1:N
neiji(col)=Phi(:,col)'*r_n; %计算当前残差和感知矩阵每一列的内积
end
[val,pos]=max(abs(neiji)); %找出内积中绝对值最大的元素和它的对应的感知矩阵的列pos
x_find(pos)=x_find(pos)+neiji(pos); %计算新的近似x_find
r_n=r_n-neiji(pos)*Phi(:,pos); %更新残差
end
subplot(3,1,1);plot(x);title('target');
subplot(3,1,2);plot(x_find);title('reconstruct');
subplot(3,1,3);plot(r_n);title('残差');
%基于MP算法
clc;clear
%观测向量y的长度M=80,即采样率M/N=0.3
N=256;
K=15; %信号稀疏度为15
M=80; %
x = zeros(N,1);
q = randperm(N);
x(q(1:K)) =randn(K,1); %原始信号
%构造高斯测量矩阵,用以随机采样
Phi = randn(M,N)*sqrt(1/M);
for i = 1:N
Phi(:,i) = Phi(:,i)/norm(Phi(:,i));
end
y=Phi*x ; %获得线性测量
%用MP算法开始迭代重构
m=2*K; %总的迭代次数
r_n=y; % 残差值初始值
x_find=zeros(N,1); %x_find为MP算法恢复的信号
for times=1:m
for col=1:N
neiji(col)=Phi(:,col)'*r_n; %计算当前残差和感知矩阵每一列的内积
end
[val,pos]=max(abs(neiji)); %找出内积中绝对值最大的元素和它的对应的感知矩阵的列pos
x_find(pos)=x_find(pos)+neiji(pos); %计算新的近似x_find
r_n=r_n-neiji(pos)*Phi(:,pos); %更新残差
end
subplot(3,1,1);plot(x);title('target');
subplot(3,1,2);plot(x_find);title('reconstruct');
subplot(3,1,3);plot(r_n);title('残差');
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询