傅⾥叶变换轮廓术(FTP)matlab模拟上⼀篇讲了傅⾥叶变换轮廓术的原理,这篇简单讲讲Matlab模拟傅⾥叶变换轮廓术(FTP)
由于部分代码我不是⽤Matlab写的,所以个别步骤我会跳过,但相关的操作百度⼀搜⼀⼤把,动起⼩⼿丰⾐⾜⾷
条纹产⽣
FTP⽤到的都是正弦光栅条纹,⽤matlab⽣成正弦光栅条纹其实也很简单
f=1/18;%条纹频率,即18个像素⼀个周期
w=2*pi*f;%⾓频率
%条纹尺⼨
x=1:150;
y=1:150;
[x,y]=meshgrid(x,y);
matlab求傅里叶变换%条纹图样I
I=127.5+127.5*cos(w*x);%可在条纹中加相移
%I=127.5+127.5*cos(w*x-2*pi/3);%相移2pi/3的条纹
I=mat2gray(I);%转为灰度图显⽰
imshow(I);
⽬标物体
⽬标物体⽤⼤部分论⽂都⽤到的matlab的peak函数⽣成即可
%⽬标物体
z=3*peaks(150);
figure('name','⽬标');mesh(z);
变形条纹
将得到的正弦光栅条纹投影到⽬标物体上,这⾥是根据上⼀篇⽂章的⾼度和相位的⼏何关系, 反推相位和⾼度的关系
L=80;%摄像机出瞳到参考⾯的距离
d=15;%摄像机出瞳和投影仪出瞳的距离
I1=127.5+127.5*cos(w*(x+z*d./(L-z)));%纵向
I1=mat2gray(I1);
figure('name','变形图样');imshow(I1);
傅⾥叶变换+滤波+傅⾥叶逆变换
由于这⼀步我是⽤C++和OpenCV来写的,所以就不能贴源码了
主要是对变形图样做傅⾥叶变换,设计合适的滤波器滤出其中⼀半基频分量,再做逆变换后求相位,这些都可以在⽹上到matlab的相应代码。
相位解包裹
经过上⼀步的操作,得到的是包裹相位,即相位被截断在[-π,π]之间,需要相位解包裹得到连续相位。
只要peak函数产⽣的⾼度不是设置得特别⼤,可以采⽤最简单的Itoh's method的⼀维解包裹⽅法来解包裹
基本思路是:
同⼀⾏前后两个点的相位作⽐较,如果后⼀个点的相位⽐前⼀个点的相位⼤π,则后⼀个点的相位减2π;
如果后⼀个点的相位⽐前⼀个点的相位⼩π,则后⼀个点的相位加π。
额······这步我同样没⽤matlab写,所以就不放源码了。
得到连续相位后,根据上⾯提到的⾼度相位关系就可以求出被测物体原⾼度了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论