【发布时间】:2016-09-13 09:46:34
【问题描述】:
我有一个使用 RGB-D 相机获取的数据集和一个文本文件,其中存储了数据集的每个图像的时间戳和文件名。我要做的是解析这个文件并填充两个std::map,一个用于rgb图像,另一个用于深度图像。现在,由于时间戳不相交,我必须编写一个基于时间戳查找匹配图像的例程。这是我到目前为止写的:
typedef map<double,string> StampImageMap;
...
vector<string> &vstrImageFilenamesRGB;
vector<string> &vstrImageFilenamesD;
vector<double> &vTimestampsRGB;
vector<double> &vTimestampsDPT;
double tolerance = 0.02;
for(StampImageMap::iterator it=rgb_images.begin(); it != rgb_images.end(); it++) {
bool found = false;
StampImageMap::iterator jt=depth_images.begin();
while(found == false && jt!=depth_images.end()) {
if(fabs(it->first - jt->first) < tolerance) {
found = true;
vstrImageFilenamesRGB.push_back(it->second);
vstrImageFilenamesD.push_back(jt->second);
vTimestampsRGB.push_back(it->first);
vTimestampsDPT.push_back(jt->first);
}
jt++;
}
}
我想知道是否有更有效的方法来执行此任务!
【问题讨论】:
-
RGB 和 D 时间戳有一对一的关系吗?他们是否遵循固定规则,例如同一张图片的 RGB 时间戳总是小于 D 时间戳?
-
是的,相机的帧率是30Hz,所以对应的RGB和DEPTH图像不能有相同的时间戳(原因很明显)但是它们之间的差异不能大于1/33s,这就是我设置变量容差的原因。
-
@FedericoNardi 如果序列是“完整的”(两者都没有间隙)并且是一对一的,你不能只找到最早的匹配然后按顺序配对吗? (即第一个 rgb 图像与第一个深度图像,第二个与第二个图像,依此类推。)
-
@molbdnilo 不幸的是,事实并非如此。一些 DEPTH 图像没有对应的 RGB 图像 :(
-
@FedericoNardi 太糟糕了。不过,您无需从头开始搜索深度图像,因为您找不到比上一个更早的匹配项。
标签: c++ algorithm dataset matching stdmap