代码之家  ›  专栏  ›  技术社区  ›  Arnkrishn

索引图像以访问数据库中的数据

  •  0
  • Arnkrishn  · 技术社区  · 16 年前

    当数据集的键是字符串时,我们使用trie结构来有效地访问数据。如果数据集的键是图像,那么最好的索引是什么?

    关键是,我指的是能够唯一区分数据的东西。这是否是一个不太常用的场景,即通过图像访问数据?我确实觉得有一些应用程序可以像指纹数据库一样使用它。

    在这种情况下哈希有帮助吗?我的意思是根据像素值把图像散列成一个唯一的数字。

    请分享这方面的任何建议。

    干杯

    3 回复  |  直到 16 年前
        1
  •  1
  •   Chad Birch    16 年前

    我不能100%确定你想做什么,但是散列应该给你一个唯一的字符串来识别一个图像。您没有指定您的语言,但是大多数都有一个函数来散列整个文件的数据,所以您可以通过它运行图像文件。(例如,php有 md5_file() )

        2
  •  2
  •   Daniel Brückner    16 年前

    可以使用哈希函数根据图像查找项目。但我认为这种情况没有什么实际用途。

    应用程序(如指纹识别、面部识别或对象识别)执行特征提取过程。这意味着它们将复杂的图像结构转换为更简单的特征向量,可以与存储的模式进行比较。

    真正困难的工作是特征提取过程,它必须将重要信息与图像中的“噪声”分离开来。

    仅仅散列图像将不会产生可用的特性。我唯一考虑的情况是散列一个图像来查找一些信息,那就是建立一个图像数据库。但即使在这种情况下,像sha1或md5这样的普通散列函数也没有什么用处,因为修改一个像素或元数据(如作者)会改变散列值,使基于普通散列函数的两个图像无法识别。

        3
  •  1
  •   Elliot Nelson    16 年前

    不清楚你想解决什么问题。虽然我认为在这种情况下,trie结构与常规哈希表相比,几乎没有性能优势,因为每次执行查找时都会执行(大)哈希,但您肯定可以获得整个图像的哈希并将其用作trie结构中的键。

    如果要在树中快速比较两个图像或查找类似图像的地方实现某种功能,可以考虑使用图像的gif或jpeg头作为键的开头。这将导致具有相似类型、大小、索引颜色等的图像在trie结构中彼此相邻分组。然后,只有在发生冲突(即,trie中有多个具有完全相同标题的图像)时,才能计算图像的哈希。