DORIS软件与矩阵类问题解决指南

需积分: 9 4 下载量 16 浏览量 更新于2024-08-06 收藏 3.27MB PDF 举报
"DORIS软件说明书,矩阵类问题在不同编译环境下的处理方法" 本文主要涉及两个核心知识点,一是DORIS软件的使用和许可规定,二是C++中的矩阵类问题及其解决策略。 首先,DORIS软件是用于InSAR(干涉合成孔径雷达)数据处理的专业软件,由代尔夫特大学的Radar Team开发并维护。该软件的最新版本为3.16,对应的文档修订版为1.54。DORIS是科学研究的免费工具,但使用条款规定软件及其衍生品不得用于商业目的,并且软件的分发应通过官方渠道进行,以确保软件更新和信息的一致性。用户有责任报告文档或源代码中的不完整性,并且鼓励用户通过扩展和改进算法来丰富DORIS的功能,但这些改进需与开发者共享,以便纳入后续版本。 接着,我们讨论的是C++编程中遇到的矩阵类问题。在实现矩阵类模板时,尤其是在不同的编译环境中,可能会遇到一些挑战。对于acc编译器,需要使用`+inst_include`标识来确保矩阵类被正确地包含。这个标识通常应用于以`.cc`结尾的源文件中。此外,为了创建存档库,需要显式实例化成员函数,具体做法可参考`matlib.c`文件。同时,友元函数也需要显式实例化,这可能涉及到Makefile的配置。在使用g++编译器2.95.2版本时,可能存在无法编译DORIS的情况,这可能是因为特定版本的编译器对模板支持的限制。 对于这类问题,解决方案可能包括升级编译器版本、遵循特定编译器的语法要求,或者在编译选项中添加必要的标志。在处理模板类时,理解编译器的工作原理和模板实例化的规则至关重要。例如,模板的实例化通常发生在第一次使用模板的地方,但如果需要在静态库中使用模板类,可能需要显式实例化所有预期的类型组合,以避免链接时的错误。 DORIS软件的使用不仅涉及到技术操作,还涉及到版权和社区贡献的道德规范。而在C++编程中,尤其是模板类的实现和编译,需要注意编译器的特性以及适当的编译策略,以确保代码能在不同环境下正确编译和运行。

for (int camera_index = 0; camera_index < this->m_safe_camera_list.size(); ++camera_index) { camera* cam = &(this->m_safe_camera_list[camera_index]); if (cam->m_is_exter_calib_check_mark == true) { // as a Internal reference K of the camera, the K-1 is : // 1/ax 0 -px/ax // 0 1/ay -py/ay // 0 0 1 Eigen::Matrix3f invk; invk.setIdentity(); invk(0, 0) = 1.0 / cam->m_inter_calib(0, 0); invk(0, 2) = -1.0 * cam->m_inter_calib(0, 2) / cam->m_inter_calib(0, 0); invk(1, 1) = 1.0 / cam->m_inter_calib(1, 1); invk(1, 2) = -1.0 * cam->m_inter_calib(1, 2) / cam->m_inter_calib(1, 1); Eigen::Vector3f tmp_t_verts = cam->m_exter_calib.topRightCorner(3, 1); Eigen::Matrix3f tmp_inv_r_mat= cam->m_exter_calib.topLeftCorner(3, 3).transpose(); Eigen::Vector3f tmp_root_point = -tmp_inv_r_mat * tmp_t_verts; for (int pose_index = 0; pose_index < cam->m_2D_pose_list.size(); ++pose_index) { Eigen::MatrixXf pose = cam->m_2D_pose_list[pose_index]; // check the pose's Confidence, if all the joints's confidiance is smaller than the gain, drop out float confidence = pose.row(2).maxCoeff(); if (confidence < this->m_joint_confidence_gian) { continue; }; my_radials tmpradials; tmpradials.m_2d_pose = pose; tmpradials.m_root_point = tmp_root_point; tmpradials.m_radials_points = (invk * pose.topRows(2).colwise().homogeneous()).colwise().normalized(); tmpradials.m_radials_points = tmp_inv_r_mat * tmpradials.m_radials_points; tmpradials.m_3d_pose_ID = -1; tmpradials.m_camera_index = camera_index; tmpradials.m_poes_index = pose_index; tmpradials.m_pose_confidence = pose.row(2).leftCols(7).sum(); this->m_3d_radials.push_back(tmpradials); } } }

2023-06-13 上传
2023-05-24 上传
2023-05-24 上传