傅里叶变换轮廓术(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); 

%条纹图样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写,所以就不放源码了。

 

得到连续相位后,根据上面提到的高度相位关系就可以求出被测物体原高度了。

 

 

 

 
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值