三维重建之条纹投影结构光(三)——相高模型标定

        接上面两文:

三维重建之条纹投影结构光(一)https://blog.csdn.net/beyond951/article/details/123361852?spm=1001.2014.3001.5501三维重建之条纹投影结构光(二)——四步相移+三频外差法https://blog.csdn.net/beyond951/article/details/123769596?spm=1001.2014.3001.5501        接下来对相高模型进行标定,其推导过程如下图所示

        由上面的推导可以发现,在得到了20个不同的高度及其对应的相位图,开始根据这些进行abc参数的求解,即为相高模型的标定,下面是标定的代码

        标定函数:

//*****************根据展开的相位和高度关系进行标定******************//
//输入为20副对应高度和相位图
//输出为一个三通道的Mat矩阵,分别对应标定参数a、b、c
vector<Mat> FringeStructuredLight::Calibration(vector<Mat> heightPhase, vector<double>height)
{
	
}

        标定主程序:

#include "FringeStructuredLight.h"
#include <string>
#include <fstream>  
#include <iostream> 
FringeStructuredLight Api; 

using namespace std;

int main()
{
	//********声明一些变量存储相位图和高度**********//
	vector<Mat> heightPhase;
	vector<double> height;
	//********读取文件路径下的图片**********//
	cout << "开始计算各个高度的相位展开图" << endl;
	//参考平面的相位
	string filePath_h0 = "D:\\01-条纹投影结构光\\资料\\h0\\*.bmp";
	vector<Mat> imgVec_h0 = Api.ReadImg(filePath_h0);
	vector<Mat> mainPhaseVec_h0 = Api.SolveThePhase(imgVec_h0);
	Mat phase_h0= Api.UnwrappedPhase(mainPhaseVec_h0);

	//二十个标定平面的相位求解
	for (int i = 1; i < 21; i++)
	{
		string filePath = "D:\\01-条纹投影结构光\\资料\\h"+to_string(i)+"\\*.bmp";
		vector<Mat> imgVec = Api.ReadImg(filePath);
		//********对文件路径下的十二副图计算三组主值相位**********//
		vector<Mat> mainPhaseVec = Api.SolveThePhase(imgVec);
		//********相位展开**********//
		Mat unwrapPhase = Api.UnwrappedPhase(mainPhaseVec)- phase_h0;
		heightPhase.push_back(unwrapPhase);
	}
	cout << "各个高度的相位图展开完毕" << endl;
	cout << "将各个高度计算赋值" << endl;
	for (int i = 1; i < 21; i++)
	{
		double temp = 0.25*i;
		height.push_back(temp);
	}
	cout << "各个高度赋值完毕" << endl;
	cout << "开始标定" << endl;
	vector<Mat> abcMat = Api.Calibration(heightPhase, height);
	
	return 0;
}

        但自己重构的结果不是很理想,希望和大家探讨,代码某些细节部分可能有问题,但总体思路是对的。

三维重建是一种通过计算机技术将实际物体或场景转换为模型的过程。结构法是其中一种常用的三维重建方法,它利用结构投射在物体上,并通过摄像机捕捉到被投射线的变形,从而推导出物体表面的几何信息。 OpenCV是一个开源的计算机视觉库,提供了许多用于图像和视频处理的函数和工具。而在三维重建中,OpenCV可以用于结构法的实现。具体来说,OpenCV提供了很多用于图像处理和相机标定的函数,这对于结构法中图像的预处理和相机参数的获取非常重要。 结构法与OpenCV的结合使用主要包括以下几个步骤: 1. 相机标定:通过使用OpenCV的相机标定函数,可以获得相机的内参和畸变参数,这对于计算线的变形以及后续三维重建流程非常重要。 2. 图像预处理:利用OpenCV图像处理函数对获取的结构图像进行预处理。这可能包括去畸变、增强对比度、降噪等操作,以提重建的准确性。 3. 线反投影:使用OpenCV图像处理函数对结构图像进行处理,将线的变形信息反投影到空间中,得到物体表面的几何信息。 4. 三维重建:根据反投影得到的几何信息,结合相机的内参和畸变参数,可以利用OpenCV三维重建函数将二维图像转换为模型。 总而言之,结构法与OpenCV的结合使用可以实现三维重建,其中OpenCV提供了相机标定、图像预处理和基础图像处理等功能,为三维重建的实现提供了重要的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond951

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值