我正在扩展用于分类图像的图像库,我想找到包含或包含在其他图像中的重复图像,变换图像和图像.
我已经测试了OpenCV的SIFT实现,它运行得很好,但对于多个图像来说速度相当慢.太快了我以为我可以提取功能并将它们保存在数据库中,因为很多其他与图像相关的元数据已经被保存在那里.
将新图像的功能与数据库中的功能进行比较的最快方法是什么?
通常比较是使用kd-trees,FLANN或我在SO上的另一个线程中找到的金字塔匹配内核来计算欧氏距离,但还没有看到太多.
由于我不知道有效地在数据库中保存和搜索kd树的方法,我目前只看到三个选项:
*让MySQL计算数据库中每个特征的欧氏距离,尽管我确定这将花费不合理的时间来拍摄多张照片.
*在开始时将整个数据集加载到内存中并构建kd-tree(s).这可能很快,但内存密集.此外,所有数据都需要从数据库传输.
*将生成的树保存到数据库中并加载所有树,这将是最快的方法,但也会产生大量流量,因为新图像必须重建kd树并将其发送到服务器.
我正在使用OpenCV的SIFT实现,但我并没有死定.如果有一个特征提取器更适合这个任务(并且大致同样强大),我很高兴,如果有人可以提出一个.
我通常更喜欢扩展方法,因为他们发现它们更容易阅读,但在看到Erno对这个问题的答案后,我想知道最小查询看起来如何只使用扩展方法?
更一般地说,是否存在可以在一种形式而不是另一种形式中创建的查询,或者两种方法是否相同?
我有多个类在线程中执行冗长的任务,并希望它们输出某种进度,所以我可以将它显示到进度条或计数器.
我可以使用在接口中定义的事件或委托,但似乎每个实现我都需要编写完全相同的FireEvent代码来检查事件是否为null并提升它,如果不是的话.
使用抽象类似乎也很糟糕,因为这样的功能不属于最顶级的类,这意味着我必须再次在不同的地方实现它.
如何以最可重用的方式执行此操作,无需重复代码?
我在Windows上运行我的程序,它将枚举目录中的文件并将其传递给处理文件的其他库.虽然我的程序支持unicode,但库不支持,所以我必须将unicode文件路径和名称转换为ANSI.只要该文件名中没有unicode字符,它就可以正常工作.
我知道Windows中的每个文件和目录都可以通过它的8.3名称访问,但我不知道如何通过windows api获取该名称.