1
Vector3f DrawResult::findPlane(const vector<Vector3f> &point_cloud, vector<Vector3f> &inlier_points)
input: point_cloud
output inlier_points , plane_center
简单说明: 该函数主要是通过ransac方法从point_cloud中估计出来平面,然后将距离在一定阈值之内的点选出来作为inlier_points,最后返回这些inlier_point的中心点(平均求得的点)
2
Vector4f findPlane(const vector<Vector3f> &point_cloud);
Vector4f DetectPlane(const vector<Vector3f> &points_cloud);
input:inlier_point
output: plane
这两个函数都是通过inlier_points来估计平面点 DetectPlane结果会更好
3
Vector3f findGround(const vector<Vector3f> &point_cloud, vector<Vector3f> &inlier_points);
input:point_cloud
output: inlier_point ,plane_center
该函数在有imu的情况下使用,很直接的通过z值来划分区域得到不同z值所对应的水平面
4
void drawAR(cv::Mat &result, const vector<Vector3f> &point_cloud, Vector3f P_latest, Matrix3f R_latest, bool vins_update, bool has_imu = true);
input: image(result),point_cloud(3D),translation(P_latest),rotation(R_latest)
这个是绘制AR的主要函数,
- 如果有imu直接使用findGround找到水平面和中心点
- 如果没有imu,筛选调用findPlane函数找到平面和中心点
调用drawGround将筛选出来的点绘制出来
如果之前已经有存在的box,调用drawBox函数将已有AR物体绘制出来
如果有新的AR物体请求,调用drawBox绘制,然后保存新的AR物体到GroundPoint里面
5
bool checkBorder(const cv::Point2f &pt)
input: image_point
output:is in image?
6
void DrawResult::drawBox(cv::Mat &result, Vector3f corner_0, Vector3f corner_x, Vector3f corner_y, Vector3f corner_z, float size, Vector3f P_latest, Matrix3f R_latest, bool inAR)
input : image(result) 一些AR物体的三维点,translation(P_latest) rotation(R_latest)