|
|
|
@ -15,21 +15,21 @@ GeoSolver::~GeoSolver()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cv::Point2f GeoSolver::project(cv::Point2f pos_pan, Proj m_Proj, PanInfo pan)
|
|
|
|
|
{
|
|
|
|
|
cv::Point2f pos_geo = Trans_pan2Geo(pos_pan, pan);
|
|
|
|
|
cv::Point2f pos_frame = Trans_Geo2uv(pos_geo, m_Proj.tf_g2p);
|
|
|
|
|
return pos_frame;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cv::Point2f GeoSolver::back_project(cv::Point2f pos_frame, Proj m_Proj, PanInfo pan)
|
|
|
|
|
{
|
|
|
|
|
cv::Point2f pos_geo = Trans_uv2Geo(pos_frame, m_Proj.tf_p2g);
|
|
|
|
|
|
|
|
|
|
cv::Point2f pos_pan = Trans_Geo2pan(pos_geo, pan);
|
|
|
|
|
|
|
|
|
|
return pos_pan;
|
|
|
|
|
}
|
|
|
|
|
//cv::Point2f GeoSolver::project(cv::Point2f pos_pan, Proj m_Proj, PanInfo pan)
|
|
|
|
|
//{
|
|
|
|
|
// cv::Point2f pos_geo = Trans_pan2Geo(pos_pan, pan);
|
|
|
|
|
// cv::Point2f pos_frame = Trans_Geo2uv(pos_geo, m_Proj.tf_g2p);
|
|
|
|
|
// return pos_frame;
|
|
|
|
|
//}
|
|
|
|
|
//
|
|
|
|
|
//cv::Point2f GeoSolver::back_project(cv::Point2f pos_frame, Proj m_Proj, PanInfo pan)
|
|
|
|
|
//{
|
|
|
|
|
// cv::Point2f pos_geo = Trans_uv2Geo(pos_frame, m_Proj.tf_p2g);
|
|
|
|
|
//
|
|
|
|
|
// cv::Point2f pos_pan = Trans_Geo2pan(pos_geo, pan);
|
|
|
|
|
//
|
|
|
|
|
// return pos_pan;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
void GeoSolver::SetOriginPoint(FrameInfo info)
|
|
|
|
|
{
|
|
|
|
@ -182,61 +182,7 @@ Proj GeoSolver::AnlayseTform(FrameInfo info)
|
|
|
|
|
return projection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cv::Mat GeoSolver::findHomography(Proj proj, PanInfo pan)
|
|
|
|
|
{
|
|
|
|
|
// 同名点计算,从像方到全景
|
|
|
|
|
cv::Point2f leftTop_map = back_project(cv::Point2f(0,0), proj, pan);
|
|
|
|
|
cv::Point2f rightTop_map = back_project(cv::Point2f(1000,0), proj, pan);
|
|
|
|
|
cv::Point2f rightBottom_map = back_project(cv::Point2f(1000,1000), proj, pan);
|
|
|
|
|
cv::Point2f leftBottom_map = back_project(cv::Point2f(0,1000), proj, pan);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<cv::Point2f> srcPoints;
|
|
|
|
|
srcPoints.push_back(cv::Point2f(0,0));
|
|
|
|
|
srcPoints.push_back(cv::Point2f(1000,0));
|
|
|
|
|
srcPoints.push_back(cv::Point2f(1000,1000));
|
|
|
|
|
srcPoints.push_back(cv::Point2f(0,1000));
|
|
|
|
|
|
|
|
|
|
// 目标图像(全景图)的四个顶点坐标
|
|
|
|
|
std::vector<cv::Point2f> dstPoints;
|
|
|
|
|
dstPoints.push_back(leftTop_map); // 左
|
|
|
|
|
dstPoints.push_back(rightTop_map); // 右上
|
|
|
|
|
dstPoints.push_back(rightBottom_map); // 右下
|
|
|
|
|
dstPoints.push_back(leftBottom_map); // 左下
|
|
|
|
|
|
|
|
|
|
// 计算单应性矩阵 H
|
|
|
|
|
cv::Mat H = cv::findHomography(srcPoints, dstPoints);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return H;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cv::Mat GeoSolver::findHomography(Proj proj)
|
|
|
|
|
{
|
|
|
|
|
std::vector<cv::Point2f> srcPoints;
|
|
|
|
|
srcPoints.push_back(cv::Point2f(0, 0));
|
|
|
|
|
srcPoints.push_back(cv::Point2f(1000, 0));
|
|
|
|
|
srcPoints.push_back(cv::Point2f(1000, 1000));
|
|
|
|
|
srcPoints.push_back(cv::Point2f(0, 1000));
|
|
|
|
|
|
|
|
|
|
// 同名点计算,从像方到全景
|
|
|
|
|
cv::Point2f leftTop_map = Trans_uv2Geo(srcPoints[0], proj.tf_p2g);
|
|
|
|
|
cv::Point2f rightTop_map = Trans_uv2Geo(srcPoints[1], proj.tf_p2g);
|
|
|
|
|
cv::Point2f rightBottom_map = Trans_uv2Geo(srcPoints[2], proj.tf_p2g);
|
|
|
|
|
cv::Point2f leftBottom_map = Trans_uv2Geo(srcPoints[3], proj.tf_p2g);
|
|
|
|
|
|
|
|
|
|
// 目标图像(全景图)的四个顶点坐标
|
|
|
|
|
std::vector<cv::Point2f> dstPoints;
|
|
|
|
|
dstPoints.push_back(leftTop_map); // 左
|
|
|
|
|
dstPoints.push_back(rightTop_map); // 右上
|
|
|
|
|
dstPoints.push_back(rightBottom_map); // 右下
|
|
|
|
|
dstPoints.push_back(leftBottom_map); // 左下
|
|
|
|
|
|
|
|
|
|
// 计算单应性矩阵 H
|
|
|
|
|
cv::Mat H = cv::findHomography(srcPoints, dstPoints);
|
|
|
|
|
|
|
|
|
|
return H;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cv::Mat GeoSolver::findHomography(FrameInfo info)
|
|
|
|
|
{
|
|
|
|
|