我在基于RANSAC方案中全方位图像的球体模型验证基本矩阵时苦苦挣扎。 See here用于球体模型的可视化。
为了消除异常值,基本/基本矩阵在RANSAC方案中计算,每次迭代仅8点。为了找到最正确的基本矩阵并拒绝异常值,必须检查极线约束。
原始代码检查针孔情况下基本矩阵的极线约束,其中像素的w分量为1。
由于我必须使用球体模型,我不直接计算基本但基本矩阵与从凸轮到单位球体的投影图像点。这部分正在运作。 但是当我尝试根据球体的单位向量检查基本矩阵的极线约束时,解决方案是错误的。 在球体情况下,w组件不是1,我认为检查有问题,但我找不到任何解决方案。
有人可以帮助我如何调整球体情况的极线约束验证吗?
在这里,您可以找到我的自适应原始代码,将矢量用于单位范围:
for(int i=0; i<N; i++)
{
bool bIn = true;
const cv::KeyPoint &kp1 = mvKeys1[mvMatches12[i].first];
const cv::KeyPoint &kp2 = mvKeys2[mvMatches12[i].second];
// original part in the pinhole case
const float u1 = kp1.pt.x;
const float v1 = kp1.pt.y;
const float w1 = 1.0;
const float u2 = kp2.pt.x;
const float v2 = kp2.pt.y;
const float w2 = 1.0;
// NEW: using the sphere model -> points not anymore on image plane
cv::Mat X1, X2;
cam2sphere(kp1.pt.x, kp1.pt.y, X1);
cam2sphere(kp2.pt.x, kp2.pt.y, X2);
const float u1 = X1.at<float>(0);
const float v1 = X1.at<float>(1);
const float w1 = X1.at<float>(2);
const float u2 = X2.at<float>(0);
const float v2 = X2.at<float>(1);
const float w2 = X2.at<float>(2);
// Reprojection error in second image
// l2=F21x1=(a2,b2,c2)
const float a2 = f11*u1+f12*v1+f13*w1;
const float b2 = f21*u1+f22*v1+f23*w1;
const float c2 = f31*u1+f32*v1+f33*w1;
const float num2 = a2*u2+b2*v2+c2*w2;
const float squareDist1 = num2*num2/(a2*a2+b2*b2); // ???
const float chiSquare1 = squareDist1*invSigmaSquare;
if(chiSquare1>th)
bIn = false;
else
score += thScore - chiSquare1;
// Reprojection error in first image
// l1 =x2tF21=(a1,b1,c1)
const float a1 = f11*u2+f21*v2+f31*w2;
const float b1 = f12*u2+f22*v2+f32*w2;
const float c1 = f13*u2+f23*v2+f33*w2;
const float num1 = a1*u1+b1*v1+c1*w1;
const float squareDist2 = num1*num1/(a1*a1+b1*b1);
const float chiSquare2 = squareDist2*invSigmaSquare;
if(chiSquare2>th)
bIn = false;
else
score += thScore - chiSquare2;
if(bIn)
vbMatchesInliers[i]=true;
else
vbMatchesInliers[i]=false;
}
return score;
我希望我的问题有点清楚。否则,我很乐意给出进一步的解释。
非常感谢, 纳斯
答案 0 :(得分:0)
所以我找到了自己的问题/问题的答案。
可以在this paper中找到“运动结构”(SfM)以及球形图像的错误描述。
对极约束的角度误差 m 2 T E m 1 = 0 < / strong>定义为:
eg = sin-1(m2TEm1)
其中:
e
:极线错误g
:代表测地线计算效率的最佳近似值是投影距离错误:
ep = |m2TEm1|/(||m2||*||Em1||)