RGB-Dカメラとテキストファイルでデータセットを取得しました。ここで、データセットの各イメージに対して、タイムスタンプとファイル名が格納されています。私が行うのは、このファイルを解析し、2つのstd :: mapを埋め、1つはrgbイメージ用、もう1つは深度イメージ用です。今、タイムスタンプが交差しないので、私はタイムスタンプに基づいて一致するイメージを見つけるルーチンを書く必要があります。これは私が今までに書いたものです:2つのstd :: map間のマッチを見つけるC++の効率的な方法
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タイムスタンプのための1対1の関係を持っていますか:ここで
、この場合の擬似コードのですか?彼らは固定されたルールに従っていますか? RGBタイムスタンプは、同じ画像のDタイムスタンプよりも常に小さいですか? –
はいカメラのフレームレートは30Hzなので、対応するRGBとDEPTH画像は同じタイムスタンプを持つことはできませんが(明らかな理由により)、その差は1/33を超えることはできません。そのため、 。 –
@FedericoNardiシーケンスが「完全」(1つでもギャップもない)で、1対1の場合、最も古いマッチを見つけて順番にペアにすることはできませんか? (つまり、最初の深度画像を持つ最初のrgb画像、2番目の深度画像を持つ最初のrgb画像など) – molbdnilo