如何将图像直方图存储到数据库中并能够执行搜索

时间:2010-09-16 00:51:51

标签: database image histogram storage

我需要编写webapp,用户可以根据图像颜色执行搜索。我的问题是如何存储颜色数据?我认为最好的解决方案是减少图像颜色并为每个r,g和b通道准备直方图,但我不知道如何设计数据库。我想使用MySQL DBMS。 有人能指出我正确的方向吗?

此致

2 个答案:

答案 0 :(得分:3)

存储直方图数据时会想到几个想法。显而易见的选择是有一个表(或三个用于单独的R / G / B通道)表示(标准化的)直方图,每个bin有一列。如果你是24位颜色(8位/通道),你可以将每个通道分成16个区([0-15],...,[240-255]),并在每个列中存储像素百分比落入垃圾箱。

这样的事情:

id  imgID  R_0_15 ... R_240_255 G_0_15 ... G_240_255 B_0_15 ... B_240_255
1   1234   0.1        0.23      0.023      0.234     0.11       0.01

通过这种设计,每张图像的整个(标准化)直方图将在表格中表示为单行。

查询会有点挑战 - 您必须动态生成它们以插入感兴趣的值范围的正确列名称。

也许更好的方法是一个HistogramBins表,每个图像和每个bin都有一个行条目:

id  imgID  component  bin_min  bin_max  percentage
1   1234   R          0        15       0.1
....omitted rows...
1   1234   R          240      255      0.23
...etc...

使用该存储格式,可以准备查询而不是动态计算。我不清楚组件是否应该按照我的方式进行分解,或者是否应该为所有三种颜色组件的“bin 1”存储一行。我可能想写一些查询,看看哪种方法最适合你的应用程序。

另外,我一直说'标准化'的原因是这个方案会使你的分箱与图像大小无关。

希望这有助于您入门。让我们知道你最终会得到什么!

答案 1 :(得分:2)

RGB值对人类感知毫无意义,但它们很容易converted to Hue, Saturation, Luminance,这对人们来说更为明智。不幸的是,饱和度和亮度非常直观:更丰富:更淡和更亮:更暗,但我们没有自然的颜色排序,因此色调表示为围绕圆的任意数度的度数。在实践中,要求人们做出良好的色调区分,特别是在搜索尚未看到的东西时,这很难。因此,您可能希望将类别限制为figure "a"中六边形的顶点。

然后你会遇到一个问题,即照片的代表色是什么?图像是半蓝天,半棕褐色或棕褐色?你选择了主导色调吗?您可能希望应用巨大的高斯模糊,然后对结果色调进行平均。您可能需要进一步完善您的问题和目标。

在感知模型上空闲沉思

即使是HSL也有其描述性限制。我在上面提到“棕褐色”作为沙子的颜色。大多数读者可能完全没有问题或命名它,但除非你有太多使用颜色的经验,否则棕褐色的色调是橙色但是苍白(不太饱和)和明亮(更高的值)是非常明显的。大约三分之一的色调圈用于绿色等。