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

发现潜在的bug #11

Open
RayShark0605 opened this issue Sep 14, 2022 · 2 comments
Open

发现潜在的bug #11

RayShark0605 opened this issue Sep 14, 2022 · 2 comments

Comments

@RayShark0605
Copy link

Tracking.cc [729行和738行附近]
for (int i = 0; i < mInitialFrame.mvKeys.size(); i++) { int j = mvIniLastLineMatches[i]; if (j >= 0) { mvIniLastLineMatches[i] = mvIniLineMatches[j]; } }
这个循环中的变量i取决于mInitialFrame.mvKeys的大小,会导致mvIniLastLineMatches下标越界!!

LSDmatcher.cpp [944行附近]
const float radius = th*pKF->mvScaleFactorsLine[nPredictedLevel];
该语句中的中的nPredictedLevel可能会导致mvScaleFactorsLine下标越界!!在测试中发现,某个时候mvScaleFactorsLine是大小为1的vector,但是nPredictedLevel却为1(越界)

以上的bug会在Debug模式编译下运行报错!尽管在Release模式编译之后运行时并不会报错,但是可能会导致程序出现预料之外的结果!
请问,我该如何修改?

1
2

@BambValley
Copy link

这里可能是作者代码复现时,误把对线特征索引的遍历写成点特征的了。
我认为将
for (int i = 0; i < mInitialFrame.mvKeys.size(); i++)
改为:
for (int i = 0; i < mInitialFrame.NL; i++)
或许会有帮助

@BambValley
Copy link

至于第二处越界错误
const float radius = th*pKF->mvScaleFactorsLine[nPredictedLevel];

我注意到项目中的配置文件Examples\Monocular\EuRoC.yaml的线特征层数设置为1:
LINEextractor.nLevels: 1

这样匹配时所预测的特征所在层nPredictedLevel就没有意义了,因为只有一层,
你或许可以直接把nPredictedLevel置为0,即
nPredictedLevel = 0

为什么只有一层,我猜测是对于耗时的优化,LSD本身提取就比较耗时

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

2 participants