以12张三频率的四步相移光栅图像生成为例:
首先光栅图像是对二维数据进行操作,所以需要新建空的矩阵来存储图像,同时设置图像的尺寸height和width,分别对应投影仪的分辨率。
首先说明的是论文中所看到的的三套条纹图案其实就是三个频率的图像。
三个频率这里设置为73 64 56。
这三个频率的含义是在光栅条纹的条纹方向上有多少个正弦条纹。
重点来了!
如何控制不同的频率和不同的相位在图案上进行显示呢?换句话说,
投影的光栅条纹图像强度分布公式如何在代码中体现呢?
测量中不存在相移误差(不会有多余的相移加入,按理论计算),且背景光强与条纹对比度均为常数 0.5,对应如下式表示:
I(x,y) =0.5+0.5cos(2*pi*y*f/(heigth)+n*pi2/N);
for i = 1:3 % 控制三种不同的频率for j = 0:3 % 控制四步相移for k = 1:width for q=1:heigthCe{i,j+1}(k,q) =0.5+0.5*cos(2*pi*q*f(i)/(heigth)+j*pi/2);endendend
end
这里你应该会有疑问,即
需要解释的是这里用的是cell元胞来进行存储图像数据,相当于二维数据里的每一个元素仍然是个二维数据,每个元素都是一张生成图案。
(1)因为是四步相移,N=4,n-1用j表示,从0~3;
(2)f对频率进行控制,q控制条纹的方向为横向。
(3)这个公式里的2piq*f(i)/(heigth),f(i)/(heigth)为正弦函数的频率,周期是指(heigth)/f(i),一个正弦函数有多少个像素长度,倒数为频率,这也是与多频中频率含义的不同之处。
个人理解,条纹在产生时的频率是和图像的尺寸有关,如果改变正弦条纹本身周期内的像素个数,即改变了它的周期数,频率也会改变,但是图像尺寸确定后条纹的周期不变,频率不变,这只是针对条纹的产生而言,如果投影仪投射出去,无论拍摄相机的分辨率如何变化,在展开相位时均与不同帧图像的相同像素位置的相差有关。
完整的代码段(包括生成和存储)如下:
%%%投影3套共12幅条纹图
%%%三频分别为73 64 56
clc;
clear all;
Ce = cell(3,4);
f= [73 64 56];
width =1080;
heigth =1920;%先
for i=1:3for j=1:4Ce{i,j} = zeros(width,heigth);end
end
for i = 1:3 % 控制三种不同的频率for j = 0:3 % 控制四步相移for k = 1:width for q=1:heigthCe{i,j+1}(k,q) =0.5+0.5*cos(2*pi*q*f(i)/(heigth)+j*pi/2);endendend
end
for i = 1:3 %循环存储12幅投影条纹图for j=1:4tmp=Ce{i,j};if i==1filename=['C:\Users\11273\Desktop\编码结构光\多频四步相移法投射图案生成matlab\',num2str(j),'.bmp'];elseif i>1filename=['C:\Users\11273\Desktop\编码结构光\多频四步相移法投射图案生成matlab\',num2str(2.^(i)+j),'.bmp']; endimwrite(tmp,filename,'bmp');end
end
效果图如下: