标签:H21i score FindHomography currentScore SLAM2 vector mvMatches12 ORB cv
FindHomography
void Initializer::FindHomography(vector<bool> &vbMatchesInliers, float &score, cv::Mat &H21)
{
// Number of putative matches
const int N = mvMatches12.size();
// Normalize coordinates
vector<cv::Point2f> vPn1, vPn2;
//防止不同分辨率、尺度和坐标原点下的影响,提高解的稳定性和精度
//T 表示归一化的关系 P‘ = T * p
Normalize(mvKeys1,vPn1, T1);
Normalize(mvKeys2,vPn2, T2);
cv::Mat T2inv = T2.inv();
// Best Results variables
score = 0.0;
//N个点,都是0
vbMatchesInliers = vector<bool>(N,false);
// Iteration variables
//八点法
vector<cv::Point2f> vPn1i(8);
vector<cv::Point2f> vPn2i(8);
cv::Mat H21i, H12i;
vector<bool> vbCurrentInliers(N,false);
float currentScore;
// Perform all RANSAC iterations and save the solution with highest score
//mMaxIterations:随机选取的(8组点对)点对的数量
for(int it=0; it<mMaxIterations; it++)
{
// Select a minimum set
//提取出八个点在mvMatches12中对应的索引,在取出坐标
for(size_t j=0; j<8; j++)
{
int idx = mvSets[it][j];
vPn1i[j] = vPn1[mvMatches12[idx].first];
vPn2i[j] = vPn2[mvMatches12[idx].second];
}
//计算本质矩阵,并且这里把归一化坐标的还原也计算在本质矩阵中
cv::Mat Hn = ComputeH21(vPn1i,vPn2i);
H21i = T2inv*Hn*T1;
H12i = H21i.inv();
//计算分数,选择最好的模型
currentScore = CheckHomography(H21i, H12i, vbCurrentInliers, mSigma);
//用更好的分数 替换 旧的,直到得到最好的模型
if(currentScore>score)
{
H21 = H21i.clone();
vbMatchesInliers = vbCurrentInliers;
score = currentScore;
}
}
}
标签:H21i,score,FindHomography,currentScore,SLAM2,vector,mvMatches12,ORB,cv 来源: https://blog.csdn.net/weixin_51326570/article/details/114741527
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。