如何在我的sql数据库中存储SURF,SIFT,Harrison-Corner功能?

时间:2014-05-12 21:48:24

标签: c++ mysql sql surf sift

所以这是我的问题。我不是数据库程序员,所以正确的设计和实现对我来说并不明显,但无论如何这里是我的问题。

我有一个sql数据库(mysql)和很多图像。我想从这些图像中提取特征并以有条理的方式存储描述符。

我想为每种类型的功能(筛选,冲浪等)提供单独的表格。获取表中功能的代码不是必需的,因为我可以解决这个问题。

我的问题在于表创建。基本上我不知道组织桌子的好方法,我不会在每张图片上有数万行。我更喜欢,1000个特征图像只有大约1000行。即。

mysql_query(connector," CREATE TABLE siftFEATRES(ID INT not null,int array [128])") 其中ID是图像的forign键(或类似的东西)

我知道这种语法不起作用,我不想输入128列名称。 Id将是图像的外键。或类似的东西。

只是想找到关于这样做的一些想法,或者我在考虑这个错误。

1 个答案:

答案 0 :(得分:1)

RDMS系统可以很好地处理许多短行(对于那些对它们没有太多经验的人来说,这是令人惊讶的)。 MySQL也不例外。

您的图像功能实际上需要128个整数来描述它们吗?难以相信。我不知道我在SURF或SIFT周围的方式,所以这可能都是错的。那就是说......

创建一个可能包含以下列的表。

  1. id(autoincremented number,aka surrogate primary key)
  2. set_id(标识所讨论图像集的整数)
  3. source_id(标识所讨论的源图像的整数)
  4. feature_id(识别特征的整数。可能在每组图像中都是唯一的)
  5. scale_id(描述图像所在scale_space金字塔中的位置的整数)
  6. x(图像中的位置)
  7. y(图像中的位置)
  8. 您将在索引上拥有标准索引(主键)。如果您在(set_id, scale_id, source_id, feature_id, x, y)上创建另一个索引,则会找到表单

    的查询
     SELECT source_id, scale_id, feature_id, x,y
       FROM sift
     WHERE set_id = constant
       AND scale_id BETWEEN 3 AND 7
    
    确实非常快。

    您的评论似乎需要存储一个适度大小的二进制对象。 MySQL有一个适当的数据类型用于保存该信息:BLOB类型(二进制大对象。请参见此处:http://dev.mysql.com/doc/refman/5.0/en/blob.html它们通常用于存储JPEG字节流等内容,但它们可用于任何二进制内容。 / p>

    不要将TEXT或VARCHAR()用于二进制数据; MySQL提供的服务器或客户端驱动程序软件可能会决定它要对该数据进行字符集转换。这将使你的二进制数据哈希。

    在将对象转换为数字文本的意义上,您无需序列化对象。您可以直接将它们存储在BLOB中。

    问题是,尝试搜索这些BLOB对象中的信息是没有意义的。如果您需要搜索数据库(使用WHERE指令等),您将需要专门构建的列(如上面的示例)以及BLOB列。