Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zhangxiaoya opened this issue Jun 7, 2018 · 17 comments

Comments

@zhangxiaoya
Copy link

就是这个函数,最后两行,当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
Copy link

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

@zhangxiaoya
Copy link
Author

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

你是在跟我说话吗?

@wujun007
Copy link

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

@ouyangandy
Copy link

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

@PandarLee
Copy link

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

@ouyangandy
Copy link

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

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

@wujun007
Copy link

wujun007 commented Apr 24, 2019 via email

@PandarLee
Copy link

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

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

谢谢,是数据集的问题

@ouyangandy
Copy link

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

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

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

@ouyangandy
Copy link

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

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

@wujun007
Copy link

wujun007 commented Apr 30, 2019 via email

@PandarLee
Copy link

KITTI/data_odometry_color 你可以用这个试试,我之前也用过这个数据集------------------ 原始邮件 ------------------ 发件人: "notifications"[email protected] 发送时间: 2019年4月30日(星期二) 下午5:08 收件人: "yueying/LearningVO"[email protected]; 抄送: "wujun007"[email protected];"Comment"[email protected]; 主题: 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
Copy link

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

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

@zhangxiaoya
Copy link
Author

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

用TUM的数据集

@ouyangandy
Copy link

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

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

@wujun007
Copy link

wujun007 commented May 10, 2019 via email

@ouyangandy
Copy link

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants