单像素成像
前言
这里对单像素成像的原理,历史和应用等等先不过多介绍了。在一般的单像素成像实验中,我们都是用随机散斑,然而为了计算方便,可以用正交基底作为散斑图案,这一篇文章中主要介绍基于傅里叶基底的单像素成像。
傅里叶谱是由一系列傅里叶系数组成的。为了获得傅里叶系数,将对应的傅里叶条纹投影到目标上,并使用关联探测器测量,可以通过关联算法重建傅里叶谱。将正弦条纹作为照明基底,就能够得到图像中各个空间频率的信息所对应的系数。
一、相关公式
这一节介绍一下单像素成像的相关公式。由于写公式太麻烦了,这里直接引用暨南大学张子邦的博士论文《傅里叶单像素成像技术》,相关片段的截图。
二、相关代码
1.读入目标
代码如下(matlab):
clear all;
close all;
I=imread('');# 目标路径
[N,~]=size(I(:,1));
f=0:N-1;
I_T1=zeros(N,N);
I_T2=zeros(N,N);
I_T3=zeros(N,N);
I_T4=zeros(N,N);
temp=0;# 平均光强a
temp1=0;
2.核心代码
以下是根据公式编写的代码:
N1=1;
N2=N;
for j=N1:N2
for k=N1:N2
for m=1:N
for n=1:N
temp=temp+double(I(m,n))*cos(2*pi*(j-1)*(m-1)/N+2*pi*(k-1)*(n-1)/N);
end# I(m,n)为物体图像反射强度
temp1=temp1+temp;
temp=0;
end
I_T1(j,k)=temp1;
temp1=0;
end
end
temp=0;
temp1=0;
for j=N1:N2
for k=N1:N2
for m=1:N
for n=1:N
temp=temp+double(I(m,n))*cos(2*pi*(j-1)*(m-1)/N+2*pi*(k-1)*(n-1)/N+pi/2);
end
temp1=temp1+temp;
temp=0;
end
I_T2(j,k)=temp1;
temp1=0;
end
end
temp=0;
temp1=0;
for j=N1:N2
for k=N1:N2
for m=1:N
for n=1:N
temp=temp+double(I(m,n))*cos(2*pi*(j-1)*(m-1)/N+2*pi*(k-1)*(n-1)/N+pi);
end
temp1=temp1+temp;
temp=0;
end
I_T3(j,k)=temp1;
temp1=0;
end
end
temp=0;
temp1=0;
for j=N1:N2
for k=N1:N2
for m=1:N
for n=1:N
temp=temp+double(I(m,n))*cos(2*pi*(j-1)*(m-1)/N+2*pi*(k-1)*(n-1)/N+3*pi/2);
end
temp1=temp1+temp;
temp=0;
end
I_T4(j,k)=temp1;
temp1=0;
end
end
I_F=(I_T1-I_T3+i*(I_T2-I_T4)); # 公式(2-12),可得到傅里叶系数
I1=ifft2(I_F);# 逆变换得到目标图像
总结
以上就是今天要讲的内容,简单介绍了单像素成像的仿真代码。有问题可以留言或者私信交流。