|
|
|
@ -348,20 +348,60 @@ void CProduct::CalAffinePars()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//得放射变换参数矩阵
|
|
|
|
|
warp_mat = getAffineTransform(ThroryCoords, RealCoords);
|
|
|
|
|
warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1 后续计算会错误
|
|
|
|
|
//得放射变换参数矩阵
|
|
|
|
|
warp_mat = getAffineTransform(ThroryCoords, RealCoords);
|
|
|
|
|
warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1 后续计算会错误
|
|
|
|
|
|
|
|
|
|
//取出6个变换参数
|
|
|
|
|
m_p00 = warp_mat.at<float>(0, 0);
|
|
|
|
|
m_p01 = warp_mat.at<float>(0, 1);
|
|
|
|
|
m_p02 = warp_mat.at<float>(0, 2);//m_CatchMark1Oft.x;//
|
|
|
|
|
|
|
|
|
|
m_p10 = warp_mat.at<float>(1, 0);
|
|
|
|
|
m_p11 = warp_mat.at<float>(1, 1);
|
|
|
|
|
m_p12 = warp_mat.at<float>(1, 2);//m_CatchMark1Oft.y;//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logstr.Format("仿射=====>偏移:[%.4f]~[%.4f]", m_p02, m_p12);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
logstr.Format("仿射=====>X参数:[ %.4f ]~[%.4f]", m_p00, m_p01);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
logstr.Format("仿射=====>Y参数:[ %.4f ]~[%.4f]", m_p10, m_p11);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
//刚性变换
|
|
|
|
|
if (gCommonFlowMgr->IsUseEstimateAffine())
|
|
|
|
|
{
|
|
|
|
|
vector<Point2d> src(ThroryCoords, ThroryCoords + 2);
|
|
|
|
|
vector<Point2d> dest(RealCoords, RealCoords + 2);
|
|
|
|
|
auto tempMat = warp_mat;
|
|
|
|
|
|
|
|
|
|
int Method = abs(gCommonFlowMgr->m_EstimateAffinepar) % 3;
|
|
|
|
|
Method = 4 * pow(2, Method);
|
|
|
|
|
|
|
|
|
|
//取出6个变换参数
|
|
|
|
|
m_p00 = warp_mat.at<float>(0, 0);
|
|
|
|
|
m_p01 = warp_mat.at<float>(0, 1);
|
|
|
|
|
m_p02 = warp_mat.at<float>(0, 2);//m_CatchMark1Oft.x;//
|
|
|
|
|
warp_mat = estimateAffinePartial2D(src, dest, tempMat, Method/*LMEDS*/);
|
|
|
|
|
warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1 后续计算会错误
|
|
|
|
|
|
|
|
|
|
//取出6个变换参数
|
|
|
|
|
m_p00 = warp_mat.at<float>(0, 0);
|
|
|
|
|
m_p01 = warp_mat.at<float>(0, 1);
|
|
|
|
|
m_p02 = warp_mat.at<float>(0, 2);
|
|
|
|
|
|
|
|
|
|
m_p10 = warp_mat.at<float>(1, 0);
|
|
|
|
|
m_p11 = warp_mat.at<float>(1, 1);
|
|
|
|
|
m_p12 = warp_mat.at<float>(1, 2);
|
|
|
|
|
|
|
|
|
|
m_p10 = warp_mat.at<float>(1, 0);
|
|
|
|
|
m_p11 = warp_mat.at<float>(1, 1);
|
|
|
|
|
m_p12 = warp_mat.at<float>(1, 2);//m_CatchMark1Oft.y;//
|
|
|
|
|
logstr.Format("刚性=====>偏移:[%.4f]~[%.4f]", m_p02, m_p12);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
logstr.Format("刚性=====>X参数:[ %.4f ]~[%.4f]", m_p00, m_p01);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
logstr.Format("刚性=====>Y参数:[ %.4f ]~[%.4f]", m_p10, m_p11);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//计算真实数据的偏移和旋转值
|
|
|
|
|
void CProduct::CalTheoryToRealPar()
|
|
|
|
|