1.問(wèn)題描述:
算法假定輸入信號(hào)與字典庫(kù)中的原子在結(jié)構(gòu)上具有一定的相關(guān)性,這種相關(guān)性通過(guò)信號(hào)與原子庫(kù)中原子的內(nèi)積表示,即內(nèi)積越大,表示信號(hào)與字典庫(kù)中的這個(gè)原子的相關(guān)性越大,因此可以使用這個(gè)原子來(lái)近似表示這個(gè)信號(hào)。當(dāng)然這種表示會(huì)有誤差,將表示誤差稱為信號(hào)殘差,用原信號(hào)減去這個(gè)原子,得到殘差,再通過(guò)計(jì)算相關(guān)性的方式從字典庫(kù)中選出一個(gè)原子表示這個(gè)殘差。迭代進(jìn)行上述步驟,隨著迭代次數(shù)的增加,信號(hào)殘差將越來(lái)越小,當(dāng)滿足停止條件時(shí)終止迭代,得到一組原子,及殘差,將這組原子進(jìn)行線性組合就能重構(gòu)輸入信號(hào)。
2.部分程序:
clc;
clear;
close all;
% 記錄時(shí)間
a1=clock;
%讀入圖像
load reference_measurement.mat;
Im=double(rgb2gray(images));
%整幅圖像,對(duì)每一行分別進(jìn)行處理
image2=zeros(64,64);
for i=1:64
i
bat=Im(i,1:64);
%迭代次數(shù)
iterative_number=60;
%用于存儲(chǔ)匹配追蹤得到的圖像
[a,N]=size(bat);
%初始化重建信號(hào)、差值信號(hào)
signal=bat;
signal_reconstruct=zeros(1,N);
signal_r=bat;
%尺度因子
a_base=2;
j_min=0;
j_max=ceil(log2(N));
%平移因子
u_base=1/2;
p_min=0;
%頻率因子
v_base=pi;
k_min=0;
%相位因子
w_base=pi/6;
i_min=0;
i_max=12;
%預(yù)處理
signal_reconstruct=(1/N)*sum(signal);
signal_r=signal-signal_reconstruct;
%開(kāi)始迭代處理
for n=1:iterative_number
% 尋找最佳原子
[proj,scale,translation,freq,phase]=select_best(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);
t=0:N-1;
t=(t-translation)/scale;
%重構(gòu)原子
g=(1/sqrt(scale))*exp(-pi*t.*t).*cos(freq*t+phase);
%歸一化
g=g/sqrt(sum(g.*g));
%構(gòu)造重建信號(hào),加上原子與在其上投影的乘積
signal_reconstruct=signal_reconstruct+proj*g;
%更新誤差信號(hào)
signal_r=signal_r-proj*g;
end
image2(i,1:64)=signal_reconstruct;
end
%讀入原圖像
image1=Im;
%原圖像和重建圖像對(duì)比
subplot(121);
imagesc(image1);
title('原始圖像');
colormap(gray);
subplot(122);
imagesc(image2);
title('重建圖像');
colormap(gray);
3.仿真結(jié)論: