好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C / SIFT / SQL – 如果有一种方法可以有效地比较图像的SIFT描述符和SQL数据库中的

我想找到一种方法,可以将图像(查询)的SIFT描述符与包含大量不同图片描述符的SQL数据库中的描述符进行比较.

事实上,我的最终目的是做一个应用程序,它允许将一张图片与数据库中的大量图片(不在我的设备中)进行比较,而是在SQL数据库中进行比较.

我想到的第一件事就是在SQL数据库中存储每个描述符,并使用Brute Force方法或FlanneBased方法将每个描述符与另一个描述符进行比较.问题是,在SQL数据库中,由于匹配背后的“数学”(欧几里德距离例如是sqrt(a²b²…)),计算匹配需要很长时间,并且不可能做到在庞大的数据库中进行那种比较.

例如,如果我没有弄错的话,SIFT描述符包含128个数字,那么想象一下将每个描述符的每个数字进行比较的时间.

如果有另一种方法来做那些东西?我知道在SQL数据库中,当您使用“SELECT a FROM b WHERE …”之类的内容时,请求会很有效.

因此我想知道是否有办法以有效的方式存储SIFT描述符?例如,我想把“加密”描述符变成一种大的字符串链,每个链都是唯一的,因此我可以将它们进行比较,但我不知道它是否是一个很好的解决方案.

我已经读过这篇文章了:Comparing SIFT features stored in a mysql database但它没有帮助我.

谢谢.

如果我是你,我宁愿比较代码中的描述符,而不是SQL. SQL不适用于此.我会做以下事情: –

1. Pre-load N descriptors from SQL onto memory.
2. Compare distances to query descriptor, descriptor by descriptor.
3. If distance<threshold, push to possiblematches.
4. When you reach N/2 descriptors, push the next N.
5. Compare all matches, choose the best one or the best D descriptors, as per your requirement.

但是,为此,我宁愿使用OpenCV内置的FileStorage类,它为XML和YAML文件提供I / O;它解决了手动解析描述符值的麻烦.

查看更多关于C / SIFT / SQL – 如果有一种方法可以有效地比较图像的SIFT描述符和SQL数据库中的的详细内容...

  阅读:44次