三维重建之条纹投影结构光(二)——四步相移+三频外差法
接上文:
三维重建之条纹投影结构光(一)https://blog.csdn.net/beyond951/article/details/123361852?spm=1001.2014.3001.5501
针对上文思路进行验证,本篇博客主要对相位进行求解,首先,对上面博客的理论进行复述,然后包括相位主值的计算和相位展开。
四步相移+三频外差理论推导
相位主值求取—四步相移法
通过一帧变形条纹 图样是很难得到高精度的相位Φ(x,y),需要采用相移算法来准确测定相位。对条纹 图进行相移的方法有很多 ,比较常用的是N帧满周期等间距相移法 。投影 的正弦条纹每隔一个光栅周期的1/N 移动一次 ,并产生相应的光强函数 ,In(x,y),此时正弦条纹的相位对应移动2π/N。四步相移算法 ,每次的相移增量为 π/2,故可以得到相应的四幅变形条纹图,这里假设In(x,y)(n=1,2,3,4) 代表第n幅图像光强 ,则:
由上面可以计算得到的相位函数Φ(x,y)为
由于是通过反正切 函数计算相位信息,因此所得的相位值都是被截断在(-π,π]区间内的不连续相位。 为 了得到连续 的相位分布 ,需要进行相位展开。采用三频外差方法进行相位展开。
相位展开—三频外差法
三频外差法是一种时间相位展开方法 ,它是在三频展开法的基础上改进而来。通过投射三种不同频率的条纹图到物体表面,拍摄得到一组受物体表面调制的条纹图序列 ,然后将每点的相位沿时间序列独立进行展开 ,可以从原理上避免误差的传播。
投影三套条纹周期数t=s-√s,s,s+√s+1的条纹图,由四步相移得到三幅截断相位图。之后进行两次外差,可以看出,第一次外差得到数目为(√s,√ s+1)的条纹图,再进行一次外差得到条纹周期数为 1的条纹图,其中外差即对应像素点相位相减。
首先定义展开运算符U[Φ1,Φ2]如下:
其中NINT(·)为四舍五入取整运算。
然后外差得到的条纹周期数为1的相位分布等同于Φw(1)等同于已展开的相位Φu(1),以它为起始相位逐级向上进行相位展开:
其中v=√s表示不同外差级次的倍率,而k逐级去2、3。通过最小二乘法对展开相位进行拟合,计算得到的斜率表示为:
再将斜率乘以最大投影条纹数,即可得到最终的展开相位ΔΦ。
综上上述,复述完毕,上代码。
代码实现
相位主值求取—四步相移法
//*****************四步相移法求解图像的相位主值******************//
//本次实验采用四步相移法+三频外差法
//输入输出:输入位十二张图片;输出为三张不同频率的主值图
vector<Mat> FringeStructuredLight::SolveThePhase(vector<Mat> srcVec)
{}
相位展开—三频外差法
//*****************三频外差法对四步相移法求的相位进行展开******************//
//本次实验采用四步相移法+三频外差法
//输入输出:输入位三张主值相位图片;输出为相位的展开图
Mat FringeStructuredLight::UnwrappedPhase(vector<Mat> srcVec)
{}
main函数
int main()
{//********声明一些变量存储相位图和高度**********//vector<Mat> heightPhase;vector<double> height;//********计算参考平面的相位**********//string filePath_h0 = "D:*.bmp";vector<Mat> imgVec_h0 = Api.ReadImg(filePath_h0);//********对文件路径下的十二副图计算三组主值相位**********//vector<Mat> mainPhaseVec_h0 = Api.SolveThePhase(imgVec_h0);//********相位展开**********//Mat unwrapPhase_h0 = Api.UnwrappedPhase(mainPhaseVec_h0);return 0;
}
ReadImg函数
//*****************读取文件夹里面的图片******************//
vector<Mat> FringeStructuredLight::ReadImg(std::string filepath)
{vector<Mat> tempVec;std::vector<cv::String> image_files;glob(filepath, image_files);//最后一张图不读for (int i = 0; i < image_files.size()-1; i++){Mat temp = imread(image_files[i]);tempVec.push_back(temp);}return tempVec;
}
效果展示
四步相移+三频外差一共十二副图,因此四步相移法相位主值求取后有三幅图,三频外差最后得到相位展开图。
主值求取结果
相位展开结果
上面将展开相位图通过halcon进行展示。下一步展开相高模型的标定。
三维重建之条纹投影结构光(二)——四步相移+三频外差法相关推荐
- 三维重建之条纹投影结构光(一)
该系列为条纹投影结构光学习笔记,一共分为四篇.第一篇记录文献阅读的笔记,对重要知识点进行摘录介绍:第二篇为相位求解和相位展开:第三篇为相高模型的标定:第四篇为重构篇. ...
- 结构光N步相移+多频外差法之解相位:三频四相
结构光N步相移+多频外差法之解相位:三频四相 四步相移 多频外差 四步相移 光强公式: I为像素xy位置接收到的光强,a为背景,b是调制(modulation),来自于投影仪的光强亮度,cos部分,第 ...
- 多频外差法(三频四步相移)
四步相移法求主值 计算相位函数: 代码: void MultifrequencyHeterodyeMethod::fourStepPhaseShifting(cv::Mat grating_img[] ...
- 结构光三维重建1——四步相移原理
一.简介 结构光三维重建主要的原理就是从投影仪中投影出特定图案的结构光,然后通过对多组结构光的分析计算,得到投影仪像素与相机像素的对应关系,进而通过事先标定好的系统参数,实现所拍物体的三维重建. 下面 ...
- 图像凸集投影法_论文分享|数字投影结构光三维测量方法研究
温馨提示:本文约5600字,阅读全文需约10分钟. 文末福利:按照文末提示操作,输入关键词可获取论文全文. 摘要 人类所处的物理世界空间是三维的,任何实物都以三维的方式呈现.随着社会的进步发展,三维信 ...
- 结构光、双目、ToF——三种3D技术对比
本文虽然命名为对比文档,但是对比意义不是特别强烈的内容仍不在少数--如三种3D技术的误差等部分--换言之,本文旨在通过对比的形式对三种3D技术的特点和特性进行总结.资料主要来自于网络,部分相关参考文献 ...
- 3.6总结半年来的专业学习——图像处理、光栅投影、四步相移、多频外差,从matlab入门到opencv入门
2019.9.17 研究生导师定了,老师给了一些论文,并推荐了几本书 1.计算机辅助光学测量/金观昌著 作者是在美国奥克兰大学杨老师实验室做过访问学者,所以书的内容和实验室的研究方向非常切合 2.基于 ...
- 相位测量轮廓术PMP+相移方法(三维测量——三、四步相移)
这篇也是我开始学习结构光--三维测量时的一个引导文章,也很感谢作者在我后期的学习中的指导. FTP和PMP 根据我看的文献,PMP方法应该是1984年由Srinivasan等人提出的.FTP是利用傅里 ...
- 【视觉-结构光三维重建-理论篇】结构光 三维重建----论文调研3
动态目标实时三维重建-结构光方案 动态目标 三维重建 Stripe boundary codes for real-time structured-light range scanning of mo ...
最新文章
- android R文件丢失解决方法
- iOS 富文本编辑工厂, 让书写更简便.
- 使用 Apache OpenJPA 开发 EJB 3.0 应用,第 6 部分: 处理实体生命周期事件的回调
- 解决Extjs中Combobox显示值和真实值赋值问题
- 亚马逊团队在Interspeech 2020深度噪声抑制挑战赛中获得第一名
- (计算机组成原理)第二章数据的表示和运算-第一节5:本章习题
- sql2005 安装完成后只有配置工具,没有管理工具和性能分析工具
- 基于vue的nuxt框架cnode社区服务端渲染
- linux系统中make install 时指定安装路径
- 三言两语聊Python模块–文档测试模块doctest
- 博士申请 | 澳大利亚麦考瑞大学吴佳教授招收图挖掘方向全奖博士生
- 计算机维修万用电表使用,万用表的使用方法——图解
- 弹性计算的内部概念:弹性扩张、弹性收缩、弹性自愈
- 研究生看论文的看的是什么
- 研发团队管理--向上沟通
- MindSpore21天实战营(3):基于ResNet50实现毒蘑菇识别实战
- 南京大学计算机 曹云浩,【2015.青春曲园】第二十六届“迎校庆”校园十佳歌手大赛独家放送~...
- 小米平板刷机shell怎么退_小米MI PAD(小米平板)手机快速救砖,线刷教程分享,小白轻松救活手机...
- 如何通过MES实现机床联网?
- 模式识别数学基础——线性代数部分