文章可能存在错误。
先介绍一下线性空间,所谓线性空间即$Ax=b $ A中向量的线性组合产生的空间即为线性空间。
零空间自然是
A
x
=
0
Ax=0
Ax=0时 A的线性空间。
二者有区别,具体这篇有讲 https://blog.csdn.net/daduzimama/article/details/123823651 ----松下J27
而“零空间比例"(nullspace ratio)带入到openMVG则是6点法求解2d3d投影矩阵时,奇异值分解部分V的倒数第二个奇异值与第一个奇异值之间的比值为零空间比例。 本质上算是衡量解的线性相关。
当这个比值较小时,意味着倒数第二个奇异值接近于0,从而表示矩阵A存在较大的零空间。换句话说,矩阵A的列在某些方向上存在线性相关,因此有较大的零空间。而当这个比值较大时,表示矩阵A的零空间较小,矩阵A的列更加独立。
个人觉得(可能的错误 ) 矩阵之间列的秩比较大,也就是说选的点比较有代表性。
double NullspaceRatio
(
const Eigen::Ref<const Mat> & A,
Eigen::Ref<Vec> nullspace
)
{
Eigen::JacobiSVD<Mat> svd(A, Eigen::ComputeFullV); //奇异值分解拿到最右边的V
nullspace = svd.matrixV().col(A.cols()-1);//就是v最后一列
return svd.singularValues()(A.cols()-2) / svd.singularValues()(0);//这里有个线性空间A的零空间概念 跑出来是 ratio 0.0035134452808048252 double 实际上大于 if (ratio > 1e-5) 就被认为是个正确的解(值的大小)
}
这部分代码来自于main_sfm_localization SixPointResectionSolver 点进去 再点 solve 中的 ratio = NullspaceRatio(A, p);