寻找SQL-Query来选择具有相似颜色的图像

时间:2014-10-14 17:33:42

标签: sql sqlite image-processing colors

我创建了以下sqlite-DB-table,并使用有关不同频率的信息填充它 我分析的一组图像的像素颜色。我想根据相似的颜色选择图像。 我受到马修·穆勒(http://research.cs.wisc.edu/vision/piximilar/)的一个项目的启发,重新焕发活力 一个相似的网站,我即将改变他建议的搜索模式。

每个图像由100个像素组成,因此列color1 ... color6的总和始终为100。

id int | filename text | color1 int | color2 int | color3 int | color4 int | color5 int | color6 int |
------------------------------------------------------------------------------------------------------
1      | 1.bmp         | 23         | 25         | 50         | 0          | 0          | 0          |
2      | 2.bmp         | 25         | 12         | 11         | 2          | 37         | 13         |
3      | 3.bmp         | 15         | 16         | 17         | 18         | 19         | 15         |
4      | 4.bmp         | 0          | 100        | 0          | 0          | 0          | 0          |
... 

我正在尝试编写一个SQL查询来选择所有元组

a)其中一列的频率高于某个阈值。 以上DB的示例:threshold = 40 - >选择具有ID 1和4的行。

b)任何列的两个之和超过某个阈值。 以上DB的示例:threshold = 60 - >返回带有ID 1,2和4的行

c)行根据它们与某个元组的“关闭”/“相似”的方式进行排序。 上面的DB示例:«closeness»到id 2是目标: 结果顺序:2,3,1,4

非常感谢您对好的查询a,b和c的建议。 谢谢,Dani

1 个答案:

答案 0 :(得分:1)

我认为如果您对表进行规范化,您的查询将更容易编写

files

file_id, filename
1, 1.bmp
2, 2.bmp

file_colors

file_id, color_id, color_value
1, 1, 23
1, 2, 25
1, 3, 50
1, 4, 0
1, 5, 0

a)高于某个值的任何1种颜色

select file_id from file_colors
group by file_id
having count(case when color_value >= 40 then 1 end) > 0

b)任何高于某个值的2种颜色的总和

select distinct file_id from file_colors t1
join file_colors t2 on t1.file_id = t2.file_id
where t1.color_id <> t2.color_id
and t1.color_value + t2.color_value >= 60

c)你没有定义'差异'。下面的查询将其计算为每种颜色的绝对距离之和。

select t1.file_id
from file_colors t1
join file_colors t2 on t2.file_id = 2 and t2.color_id = t1.color_id
group by t1.file_id
order by sum(abs(t1.color_value - t2.color_value))