三维重建之条纹投影结构光(二)——四步相移+三频外差法

这篇具有很好参考价值的文章主要介绍了三维重建之条纹投影结构光(二)——四步相移+三频外差法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        接上文:

三维重建之条纹投影结构光(一)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幅图像光强 ,则:

四步相移法,条纹投影结构光,线性代数,opencv,c++

         由上面可以计算得到的相位函数Φ(x,y)为

四步相移法,条纹投影结构光,线性代数,opencv,c++

         由于是通过反正切 函数计算相位信息,因此所得的相位值都是被截断在(-π,π]区间内的不连续相位。 为 了得到连续 的相位分布 ,需要进行相位展开。采用三频外差方法进行相位展开。

相位展开—三频外差法

        三频外差法是一种时间相位展开方法 ,它是在三频展开法的基础上改进而来。通过投射三种不同频率的条纹图到物体表面,拍摄得到一组受物体表面调制的条纹图序列 ,然后将每点的相位沿时间序列独立进行展开 ,可以从原理上避免误差的传播。

        投影三套条纹周期数t=s-√s,s,s+√s+1的条纹图,由四步相移得到三幅截断相位图。之后进行两次外差,可以看出,第一次外差得到数目为(√s,√ s+1)的条纹图,再进行一次外差得到条纹周期数为 1的条纹图,其中外差即对应像素点相位相减。

        首先定义展开运算符U[Φ1,Φ2]如下:

四步相移法,条纹投影结构光,线性代数,opencv,c++

         其中NINT(·)为四舍五入取整运算。

        然后外差得到的条纹周期数为1的相位分布等同于Φw(1)等同于已展开的相位Φu(1),以它为起始相位逐级向上进行相位展开:

四步相移法,条纹投影结构光,线性代数,opencv,c++

        其中v=√s表示不同外差级次的倍率,而k逐级去2、3。通过最小二乘法对展开相位进行拟合,计算得到的斜率表示为

四步相移法,条纹投影结构光,线性代数,opencv,c++

        再将斜率乘以最大投影条纹数,即可得到最终的展开相位ΔΦ。

四步相移法,条纹投影结构光,线性代数,opencv,c++

         综上上述,复述完毕,上代码。

代码实现

相位主值求取—四步相移法

//*****************四步相移法求解图像的相位主值******************//
//本次实验采用四步相移法+三频外差法
//输入输出:输入位十二张图片;输出为三张不同频率的主值图
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;
}

效果展示

        四步相移+三频外差一共十二副图,因此四步相移法相位主值求取后有三幅图,三频外差最后得到相位展开图。

主值求取结果

四步相移法,条纹投影结构光,线性代数,opencv,c++

 四步相移法,条纹投影结构光,线性代数,opencv,c++

四步相移法,条纹投影结构光,线性代数,opencv,c++

 相位展开结果

四步相移法,条纹投影结构光,线性代数,opencv,c++

 四步相移法,条纹投影结构光,线性代数,opencv,c++

         上面将展开相位图通过halcon进行展示。下一步展开相高模型的标定。文章来源地址https://www.toymoban.com/news/detail-716103.html

到了这里,关于三维重建之条纹投影结构光(二)——四步相移+三频外差法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于条纹投影的物体三维形貌测量理论与仿真实验-含Matlab代码

    基于光栅投影的光学三维面形测量具有非接触、精度高、速度快、低成本、全场测量和易于实现等特点,在逆向工程、工业检测、质量控制、虚拟现实、医学诊断、文物修复和物体识别等领域应用广泛。相移轮廓术(PSM)和傅里叶变换轮廓术(FTP)是两种传统方法。相移法计算简单

    2024年02月03日
    浏览(100)
  • 线结构光三维重建(二)相机标定、光平面标定

    线结构光三维重建(一) https://blog.csdn.net/beyond951/article/details/125771158                   上文主要对线激光的三角测量原理、光平面的标定方法和激光条纹提取的方法进行了一个简单的介绍,本文则主要针对线激光三维重建系统的系统参数标定进行阐述,同时对采集到

    2024年02月09日
    浏览(29)
  • 医疗PACS源码,支持三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜

    C/S 架构的PACS系统源码,PACS主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理,并通过网络向全院提供病人检查影像及诊断报告;各影像科室之间共享不同设备的病人检查影像及诊断报告;在诊断工作站上,调阅HIS中病人的其它信息 (如: 病人信息、病历信息、

    2024年02月12日
    浏览(34)
  • 【三维重建】三维重构基础知识、三维数据、重建流程

    1.使用几何建模软件,通过人机交互生成人为控制下的三维:3DMAX、Maya、AutoCAD、UG 2.获取真实的物体形状:三维重构 三维图像重构: 摄像机获取图像,对图像分析处理,结合CV知识推导出现实中物体的三维信息 从二维图像到三维空间的重构(模仿生物两只眼睛观察物体产生的

    2024年02月02日
    浏览(41)
  • 三维形体投影面积

    🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,

    2024年02月10日
    浏览(28)
  • MedNeRF:用于从单个X射线重建3D感知CT投影的医学神经辐射场

     计算机断层扫描(CT)是一种有效的医学成像方式,广泛应用于临床医学领域,用于各种病理的诊断。多探测器CT成像技术的进步实现了额外的功能,包括生成薄层多平面横截面身体成像和3D重建。然而,这涉及患者暴露于相当剂量的电离辐射。过量的电离辐射会对身体产生

    2024年02月02日
    浏览(23)
  • 三维变换矩阵实战——三维点云的旋转、缩放、镜像、错切、平移、正交投影

    旋转矩阵:右边矩阵是点云的原始坐标,左边的是旋转矩阵     可视化:绕x轴旋转90度 代码: 旋转矩阵:    可视化:绕y轴旋转180度 代码: 旋转矩阵:    可视化:绕z轴旋转90度 代码: 旋转矩阵:  线绕哪个轴转,xyz矩阵就和哪和轴的旋转矩阵先计算      可视化:先

    2024年02月04日
    浏览(73)
  • 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

    本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。 MVS(多视点立体视觉,Multi-view stereo)能够单独从图像中构造出高度细节化的3D模型,采集一个庞大的图像数据集,用其来构建出一个用来解析

    2024年01月15日
    浏览(34)
  • 【卫星三维重建】卫星影像三维重建数据集-MVS3DM数据集介绍

    MVS3DM数据集是用于IARPA多视图卫星影像3D重建挑战赛的标准数据集(IARPA Multi-View Stereo 3D Mapping Challenge),该数据集由Digital Globe WorldView-3卫星影像以及机载激光雷达获取的影像覆盖范围内的点云数据作为算法真值数据组成。 卫星影像数据类型和数量 :包含50张WorldView3全色影像(

    2024年03月12日
    浏览(82)
  • 【三维重建】之 matlab读取 .wrl 三维图像文件

    wrl(虚拟现实语言): wrl文件是一种虚拟现实文本格式文件。也是VRML的场景模型文件的扩展名。 wrl文件是纯ASCII文件,所以可以用文本编辑器打开和编辑。虽然这样,但是对于大型的3D文件。用纯手工的方法是不可取的。应该选择用三维软件(maya,max等)进行场景建模和输出。

    2024年02月17日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包