大量の画像の計算された記述子をローカルファイル内またはデータベース内に保持することが興味深いかどうかを判断しようとしています (各 .png 画像の解像度は 500x500 で、重みは約 25kb です)。
ブリーフ 32 記述子で ORB を使用すると、1 つの記述子の重量は約 3 メガバイトになります。私の写真はすべて同じ寸法であるため、このようなサイズは一定のままです。
最速のものを見つけるために、次の2つのテストを実行しました。
## TEST : Import descriptor from file
listOfDec = list()
start = datetime.now()
for i in range(0, 100):
listOfDec.append(np.loadtxt("DESC_TEST".txt"))
end = datetime.now()
time_taken = end - start
print('Time: ',time_taken)
## TEST : Compute descriptor from source image
listOfDec = list()
start = datetime.now()
for i in range(0, 100):
img1 = cv2.imread(dirPath+picture,0)
a, desc = orb.detectAndCompute(img1, None)
listOfDec.append(desc)
end = datetime.now()
time_taken = end - start
print('Time: ',time_taken)
正直なところ、記述子全体を再計算するよりもデータをロードする方が速いと思いました。
これが私のテストの結果です:
だから今、私は混乱しています。ORB が非常に高速なアルゴリズムであることは知っていますが、SSD ディスクから読み取るよりも 3MB の記述子を「生成」する方がどのように高速でしょうか? ベンチマークに何か問題がありますか?
ありがとうございました。