yueying / LearningVO

112 stars 51 forks source link

当跟踪角点数量低于一定的阈值,重新计算角点的时候,新计算的角点被覆盖 #1

Open zhangxiaoya opened 6 years ago

zhangxiaoya commented 6 years ago

就是这个函数,最后两行,当FAST点低于阈值的时候,会重新进行检测,但是检测到的角点是存放在px_ref_中,但是后面的代码用px_cur_覆盖了。导致了重新检测效果没有了。

bool VisualOdometry::processFrame(int frame_id)
{
    double scale = 1.00;//初始尺度为1
    featureTracking(last_frame_, new_frame_, px_ref_, px_cur_, disparities_); //通过光流跟踪确定第二帧中的相关特征
    cv::Mat E, R, t, mask;
    E = cv::findEssentialMat(px_cur_, px_ref_, focal_, pp_, cv::RANSAC, 0.999, 1.0, mask);
    cv::recoverPose(E, px_cur_, px_ref_, R, t, focal_, pp_, mask);
    scale = getAbsoluteScale(frame_id);//得到当前帧的实际尺度
    if (scale > 0.1) //如果尺度小于0.1可能计算出的Rt存在一定的问题,则不做处理,保留上一帧的值
    {
        cur_t_ = cur_t_ + scale*(cur_R_*t);
        cur_R_ = R*cur_R_;
    }
    // 如果跟踪特征点数小于给定阈值,进行重新特征检测
    if (px_ref_.size() < kMinNumFeature)
    {
        featureDetection(new_frame_, px_ref_);
        featureTracking(last_frame_, new_frame_, px_ref_, px_cur_, disparities_);
    }
    px_ref_ = px_cur_;
    return true;
}

修改后,

bool VisualOdometry::processFrame(int frame_id)
{
    double scale = 1.00;//初始尺度为1
    featureTracking(last_frame_, new_frame_, px_ref_, px_cur_, disparities_); //通过光流跟踪确定第二帧中的相关特征
    cv::Mat E, R, t, mask;
    E = cv::findEssentialMat(px_cur_, px_ref_, focal_, pp_, cv::RANSAC, 0.999, 1.0, mask);
    cv::recoverPose(E, px_cur_, px_ref_, R, t, focal_, pp_, mask);
    scale = getAbsoluteScale(frame_id);//得到当前帧的实际尺度
    if (scale > 0.1) //如果尺度小于0.1可能计算出的Rt存在一定的问题,则不做处理,保留上一帧的值
    {
        cur_t_ = cur_t_ + scale*(cur_R_*t);
        cur_R_ = R*cur_R_;
    }
    // 如果跟踪特征点数小于给定阈值,进行重新特征检测
    if (px_ref_.size() < kMinNumFeature)
    {
        featureDetection(new_frame_, px_ref_);
        featureTracking(last_frame_, new_frame_, px_ref_, px_cur_, disparities_);
    }
        else
           px_ref_ = px_cur_;
    return true;
}
wujun007 commented 5 years ago

我看了一下你的这个项目,你这个项目的中心思想主要是想做一个什么呢?还有 请问你是否有做过三维重构方面的项目吗?

zhangxiaoya commented 5 years ago

我看了一下你的这个项目,你这个项目的中心思想主要是想做一个什么呢?还有 请问你是否有做过三维重构方面的项目吗?

你是在跟我说话吗?

wujun007 commented 5 years ago

是的 ,不知道你是否有做过三维重构方面的项目,如果有不知道你是否愿意和我加个QQ好友 我们一起探讨一下三维重构方面的技术。如果可以你加我QQ:2903818955

ouyangandy commented 5 years ago

可是自己制作的数据集怎么得到ground truth呢?没有这个ground truth怎么办呢?

PandarLee commented 5 years ago

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

ouyangandy commented 5 years ago

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

很有可能是数据集不对。或者数据集不理想

wujun007 commented 5 years ago

从新计算的图像角点还是原图像角点吗?如果还是原图像的话,你就要做一件事再上一次计算的角点低于阈值时,将所有本次计算出来的角点进行保存,让后将从新划算出来的角点拿出来与上一次的角点进行比对,比对方式就是这个角点在于这张当前检测图像中的坐标是否一致,不一致的话,将本次不一致的角点加入到上一次保存的角点中,然后把所有角点比对完了看看是否达到理想阈值,如果到了就输出出来看看,人工检测看看有没有误

---原始邮件--- 发件人: "ouyangandy"notifications@github.com 发送时间: 2019年4月24日(星期三) 下午4:44 收件人: "yueying/LearningVO"LearningVO@noreply.github.com; 抄送: "wujun007"2903818955@qq.com;"Comment"comment@noreply.github.com; 主题: Re: [yueying/LearningVO] 当跟踪角点数量低于一定的阈值,重新计算角点的时候,新计算的角点被覆盖 (#1)

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

很有可能是数据集不对。或者数据集不理想

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

PandarLee commented 5 years ago

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

很有可能是数据集不对。或者数据集不理想

谢谢,是数据集的问题

ouyangandy commented 5 years ago

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

很有可能是数据集不对。或者数据集不理想

谢谢,是数据集的问题 你好,请问你是怎么跑起来的呢?用的是什么数据集,能够交流一下吗?@PandarLee

ouyangandy commented 5 years ago

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

一直想跑一下看看效果然后替换自己的数据集,结果发现不知道使用哪一个标准数据集。能够说明一下吗?多谢了。

wujun007 commented 5 years ago

KITTI/data_odometry_color 你可以用这个试试,我之前也用过这个数据集------------------ 原始邮件 ------------------ 发件人: "notifications"notifications@github.com 发送时间: 2019年4月30日(星期二) 下午5:08 收件人: "yueying/LearningVO"LearningVO@noreply.github.com; 抄送: "wujun007"2903818955@qq.com;"Comment"comment@noreply.github.com; 主题: Re: [yueying/LearningVO] 当跟踪角点数量低于一定的阈值,重新计算角点的时候,新计算的角点被覆盖 (#1)

想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退

一直想跑一下看看效果然后替换自己的数据集,结果发现不知道使用哪一个标准数据集。能够说明一下吗?多谢了。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

PandarLee commented 5 years ago

KITTI/data_odometry_color 你可以用这个试试,我之前也用过这个数据集------------------ 原始邮件 ------------------ 发件人: "notifications"notifications@github.com 发送时间: 2019年4月30日(星期二) 下午5:08 收件人: "yueying/LearningVO"LearningVO@noreply.github.com; 抄送: "wujun007"2903818955@qq.com;"Comment"comment@noreply.github.com; 主题: Re: [yueying/LearningVO] 当跟踪角点数量低于一定的阈值,重新计算角点的时候,新计算的角点被覆盖 (#1) 想问下,这个是怎么跑起来的……,表示编译通过了,然后打开VO闪退 一直想跑一下看看效果然后替换自己的数据集,结果发现不知道使用哪一个标准数据集。能够说明一下吗?多谢了。 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

谢谢,已经解决,用的是odometry_color数据集,其中用到了ground_truth

PandarLee commented 5 years ago

可是自己制作的数据集怎么得到ground truth呢?没有这个ground truth怎么办呢?

在这里的ground_truth提供了scale尺度信息,要是自己做数据集的话,得在程序中添加尺度估计模块了,我QQ295471853,欢迎交流

zhangxiaoya commented 5 years ago

可是自己制作的数据集怎么得到ground truth呢?没有这个ground truth怎么办呢?

用TUM的数据集

ouyangandy commented 5 years ago

可是自己制作的数据集怎么得到ground truth呢?没有这个ground truth怎么办呢?

用TUM的数据集 如果使用自己的数据集,由于没有真值,就没有尺度的统一,那怎么把尺度统一呢?

wujun007 commented 5 years ago

尺度统一不是通过欧式距离自己根据k进邻计算的

---原始邮件--- 发件人: "ouyangandy"notifications@github.com 发送时间: 2019年5月10日(星期五) 中午11:22 收件人: "yueying/LearningVO"LearningVO@noreply.github.com; 抄送: "wujun007"2903818955@qq.com;"Comment"comment@noreply.github.com; 主题: Re: [yueying/LearningVO] 当跟踪角点数量低于一定的阈值,重新计算角点的时候,新计算的角点被覆盖 (#1)

可是自己制作的数据集怎么得到ground truth呢?没有这个ground truth怎么办呢?

用TUM的数据集 如果使用自己的数据集,由于没有真值,就没有尺度的统一,那怎么把尺度统一呢?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

ouyangandy commented 5 years ago

尺度统一不是通过欧式距离自己根据k进邻计算的

大佬可以进一步解释吗?或者参考案例方便贴上吗?