基于正弦结构光的三维重建(MATLAB)

基于正弦结构光的三维重建(MATLAB)

I01
基于正弦结构光的三维重建(MATLAB)
I02基于正弦结构光的三维重建(MATLAB)
I03
基于正弦结构光的三维重建(MATLAB)
I04
基于正弦结构光的三维重建(MATLAB)
I05
基于正弦结构光的三维重建(MATLAB)
I1
基于正弦结构光的三维重建(MATLAB)
I2
基于正弦结构光的三维重建(MATLAB)
I3
基于正弦结构光的三维重建(MATLAB)
I4
基于正弦结构光的三维重建(MATLAB)
I5
基于正弦结构光的三维重建(MATLAB)

代码:
生成参考面条纹和变形条纹的程序如下
clc
clear all
close all
load dphase1;
h=dphase1;
% 设定光栅大小
M=553;
N=423;
s1=1:M;
s2=1:N;
[x,y]=meshgrid(s2,s1);

% 设定光栅周期
p=15;
f=1/p;
% 系统结构参数
l=150;
d=250;

%%%%%%%%%%%%%%%%%%%%生成参考面条纹%%%%%%%%%%%%%%%%%%%
a0=0.5;%%%%%%%%%%%%%%%%%投影系数
b0=0.5;%%%%%%%%%%%%%%%%%投影系数
phh=2pi/5;%%%%%%%%设定条纹相移量
I01=a0+b0
cos(2pifx);%%%%%参考面采集到的第一帧条纹
imwrite(I01,‘I01.bmp’);
I02=a0+b0
cos(2pifx+phh);
imwrite(I02,‘I02.bmp’);
I03=a0+b0
cos(2pifx+2phh);
imwrite(I03,‘I03.bmp’);
I04=a0+b0cos(2pifx+3phh);
imwrite(I04,‘I04.bmp’);
I05=a0+b0
cos(2pifx+4phh);
imwrite(I05,‘I05.bmp’);

figure;
surfl(h);
shading interp;
colormap winter;
xlabel(‘X/pixel’),ylabel(‘Y/pixel’),zlabel(‘Z/mm’);
%axis([0 420 512 0 30]);
view(-37.5,40);

%%%%%%%%%%%生成变形条纹%%%%%%%%%%%
ph=(2pih/p)/(l/d);%%%%%%%%%物体高度引起的相位变化%%%%%%%%%%%%%

I1=a0+b0cos(2pifx+ph);%%%%%%%%%%受物体高度调制的变形条纹
imwrite(I1,‘I1.bmp’);
I2=a0+b0cos(2pifx+phh+ph);
imwrite(I2,‘I2.bmp’);
I3=a0+b0cos(2pifx+2phh+ph);
imwrite(I3,‘I3.bmp’);
I4=a0+b0
cos(2pifx+3phh+ph);
imwrite(I4,‘I4.bmp’);
I5=a0+b0cos(2pifx+4*phh+ph);
imwrite(I5,‘I5.bmp’);

save dphase1;

实现人脸重建的程序如下:
clc;
load Parameters
load dphase1.mat
mask=ones(553,423);

I01=imread(‘I01.bmp’);
I02=imread(‘I02.bmp’);
I03=imread(‘I03.bmp’);
I04=imread(‘I04.bmp’);
I05=imread(‘I05.bmp’);
I01=double(I01);
I02=double(I02);
I03=double(I03);
I04=double(I04);
I05=double(I05);

a=I01.sin(2pi/5)+I02.sin(4pi/5)+I03.sin(6pi/5)+I04.sin(8pi/5)+I05.sin(10pi/5);
b=I01.cos(2pi/5)+I02.cos(4pi/5)+I03.cos(6pi/5)+I04.cos(8pi/5)+I05.cos(10pi/5);
phase0=atan2(a,b);

I1=imread(‘I1.bmp’);
I2=imread(‘I2.bmp’);
I3=imread(‘I3.bmp’);
I4=imread(‘I4.bmp’);
I5=imread(‘I5.bmp’);
I1=double(I1);
I2=double(I2);
I3=double(I3);
I4=double(I4);
I5=double(I5);
a=I1.sin(2pi/5)+I2.sin(4pi/5)+I3.sin(6pi/5)+I4.sin(8pi/5)+I5.sin(10pi/5);
b=I1.cos(2pi/5)+I2.cos(4pi/5)+I3.cos(6pi/5)+I4.cos(8pi/5)+I5.cos(10pi/5);
phase=atan2(a,b);

%计算出相位差
dphase=phase-phase0;

%用LingXingUnwrap2函数做相位展开
unph=LingXingUnwrap2(dphase,mask,1,1);

%重构出物体三维轮廓
figure;
mesh(-unph);
colormap pink;
title(‘重构出的三维人脸图’);
%相位转化为高度
h2=(l/d)(-unph)/(2pi*f);
figure;mesh(h2);
colormap summer;
title(‘相位转换高度后三维人脸图’);
%误差分布图 重建物体-被测物体
load dphase1.mat
error=h2-dphase1;
figure;mesh(error);
colormap prism;
title(‘误差分布图’);

结果:

基于正弦结构光的三维重建(MATLAB)
基于正弦结构光的三维重建(MATLAB)
基于正弦结构光的三维重建(MATLAB)
需要两个表格:名字为:Parameters
以及表格名字为: dphase1
这两个表格是数据,此处无法加,我放在下载那里。