/*********版权所有(C)2025,武汉高德红外股份有限公司*************************************** * 文件名称: Arith_GeoStitcher.h * 文件标识:吊舱视频帧外参拼接 * 内容摘要:基于机载下视外部参数的几何校正,支持独立工作,也可以作为特征拼接的外参初始值 * 其它说明:【注意:为了便于推导,局部地理坐标系采用的是东-北-地坐标系,使用大地坐标转换工具时注意转换。】 * 当前版本:V0.5 * 创建作者:04046wcw * 创建日期:2025/01/15 * 包含关系: *****************************************************************************************/ #pragma once #include "StitchStruct.h" // 像方-物方转换关系 struct TForm { cv::Mat R; cv::Mat T; }; // 投影关系,描述反算过程 struct Proj { TForm tf_p2g;//从帧到地理坐标系的Rt矩阵 TForm tf_g2p;//从地理坐标系到帧的Rt矩阵 }; class GeoSolver { public: // 构造函数 GeoSolver(); ~GeoSolver(); // 建立全景图与归一化地理系的H矩阵,解析出H cv::Mat findHomography(FrameInfo info); // 测试 cv::Mat findHomography2(FrameInfo info); // 设置起始拼接点外参,返回当前光轴大地指向 ANGLE32F SetOriginPoint(FrameInfo info); // 根据H计算原始像方的经纬度 PointBLH getBLHFromFrame(cv::Mat H, cv::Point2f ptInFrame); // 计算局部地理系下目标的经纬度 PointBLH getBLHFromGeo(cv::Point2f ptInGeo); // 经纬度转换为局部地理系坐标 cv::Point2f getGeoFromBLH(PointBLH ptPos); private: // 计算当前帧像方-地理坐标系R t(反投影关系) Proj AnlayseTform(FrameInfo info); // 帧像方-地理坐标 cv::Point2f Trans_uv2Geo(cv::Point2f pos_frame, TForm form); // 地理坐标-帧像方 cv::Point2f Trans_Geo2uv(cv::Point2f pos_geo, TForm form); // 平移矩阵,以初始化点为基准,计算当前位置在初始点的地理坐标,那么当前帧所有点的坐标做此平移 cv::Mat Mat_TransENGMove(FrameInfo info); // 机体ENG(东北地)到像方的 旋转矩阵 cv::Mat Mat_TransENG2uv(FrameInfo info); private: PointXYZ originPoint;//成图初始点的地心地固坐标,作为拼接参考 FrameInfo origininfo; }; // 多边形面积 double polygonArea(const vector& points); // 计算两个四边形的 IOU double computeQuadrilateralIOU(const vector& quad1, const vector& quad2); // H映射点 cv::Point2f warpPointWithH(cv::Mat H,cv::Point2f srcPt); // H映射多边形,按照顺时针 vector warpRectWithH(cv::Mat H,cv::Size size); // 坐标系统转换 PointXYZ getNUEFromENG(PointXYZ p); PointXYZ getENGFromNUE(PointXYZ p);