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

本文介绍了通过条纹投影结构光进行三维重建中相高模型的标定过程,包括从20个不同高度的相位图获取数据,然后利用这些数据进行参数a、b、c的求解。提供了标定函数和主程序的代码实现,但作者提到实际结果不理想,期望与读者共同探讨和优化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        接上面两文:

三维重建之条纹投影结构光(一)https://blog.youkuaiyun.com/beyond951/article/details/123361852?spm=1001.2014.3001.5501三维重建之条纹投影结构光(二)——四步相移+三频外差法https://blog.youkuaiyun.com/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;
}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beyond951

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

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

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

打赏作者

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

抵扣说明:

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

余额充值