前言
这一部分是为了选定在当前帧的视野范围内的地图点,需要满足4个条件才能入选:
条件1.将这个地图点变换到当前帧的相机坐标系下,满足深度值为正。
条件2.将地图点投影到当前帧的像素坐标系下,满足在图片的有效范围内。
条件3.计算地图点到相机中心的距离,满足在有效范围内。
条件4.计算当前相机指向地图点的向量与地图点的平均观测方向的夹角,满足小于60°(实际比较的是余弦值)。
1.函数声明
/*
pMP 当前地图点
viewingCosLimit 当前相机指向地图点向量和地图点的平均观测方向夹角余弦阈值
return true 地图点合格,且在视野内
return false 地图点不合格,抛弃
*/
bool Frame::isInFrustum(MapPoint *pMP, float viewingCosLimit)
{
....
}
2.函数定义
1.判断其是否满足条件1
获得这个地图点的世界坐标并将其转换到当前相机坐标系下
// mbTrackInView是决定一个地图点是否进行重投影的标志
// 这个标志的确定要经过多个函数的确定,isInFrustum()只是其中的一个验证关卡。这里默认设置为否
pMP->mbTrackInView = false;
// 3D in absolute coordinates
cv::Mat P = pMP->GetWorldPos();
// 3D in ca