Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么重新计算ORB描述符比从磁盘加载要快?_Python_Opencv_Orb_Feature Descriptor - Fatal编程技术网

Python 为什么重新计算ORB描述符比从磁盘加载要快?

Python 为什么重新计算ORB描述符比从磁盘加载要快?,python,opencv,orb,feature-descriptor,Python,Opencv,Orb,Feature Descriptor,我正在尝试决定是否有兴趣将大量图片的计算描述符保存在本地文件或数据库中(每个.png图片的分辨率为500x500,权重约为25kb) 使用带有简短32描述符的ORB,单个描述符的权重约为3兆字节。这样的尺寸将保持不变,因为我所有的照片都是相同尺寸的 为了找出最快的是什么,我进行了以下两项测试: ##测试:从文件导入描述符 listOfDec=list() start=datetime.now() 对于范围(0,100)内的i: 追加(np.loadtxt(“DESC_TEST.txt”)) en

我正在尝试决定是否有兴趣将大量图片的计算描述符保存在本地文件或数据库中(每个.png图片的分辨率为500x500,权重约为25kb)

使用带有简短32描述符的ORB,单个描述符的权重约为3兆字节。这样的尺寸将保持不变,因为我所有的照片都是相同尺寸的

为了找出最快的是什么,我进行了以下两项测试:

##测试:从文件导入描述符
listOfDec=list()
start=datetime.now()
对于范围(0,100)内的i:
追加(np.loadtxt(“DESC_TEST.txt”))
end=datetime.now()
所用时间=结束-开始
打印(“时间:”,所用时间)
##测试:从源图像计算描述符
listOfDec=list()
start=datetime.now()
对于范围(0,100)内的i:
img1=cv2.imread(dirPath+picture,0)
a、 desc=orb.detectAndCompute(img1,无)
listOfDec.append(desc)
end=datetime.now()
所用时间=结束-开始
打印(“时间:”,所用时间)
我真的认为加载数据比重新计算整个描述符要快

以下是我的测试结果:

所以现在我很困惑。我知道ORB是一个非常快的算法,但是如何“生成”3MB描述符比从ssd磁盘读取更快?我的基准测试有什么问题吗

谢谢。

内存确实比磁盘内存好

然而,对于3mb文件,0.08秒的读取速度为37.5mb/s,这对于SSD来说似乎很低。并且您应该提到加载的图像的大小,因为在您的基准测试中,ORB计算包括从磁盘读取图像

ORB描述符本身速度非常快,因为计算非常简单,并且图像数据可以很好地缓存在CPU中。
但是,为了实现更好的性能,您应该尝试C++实现而不是Python。并且存储完全描述符可能没有理由。通常的做法是保存散列或描述符,这取决于用例(但在某些情况下也需要完全的解析器)。.

感谢您的贡献。正如我在编辑中提到的,每张图片都是500x500,重量为25kb。我同意您的看法,SSD的读取速度非常低,理论上应该在500mb/s左右(我相信三星的Evo 850)。我应该使用整个描述符,因为我使用它们来估计给定图片之间的相似性。但如果我有一个新条目,当前结果意味着计算数据库图像的所有描述符并将其与新条目的描述符匹配会更快。如果数据基础足够大,您的解决方案将无法正常工作。在高度依赖于图像性质的情况下,可能有更好的方法来衡量相似性。如果ORB确实是您所需要的,您可以尝试在小图像补丁上运行它(并将它们保存在数据库中)而不是只检查完整描述符的潜在匹配。
loadtxt
读取文本数据并转换为相应的格式,这可能会很慢。@QuangHoang您能推荐一种更快的方法吗?我很乐意测试并比较它:)