我一直在玩写一个刮掉Deviantart.com的刮刀。它在本地保存新图像的副本,并在Postgresql DB中为图像创建记录。我的问题:当新图像出现时,我如何知道这个新图像是否与我之前见过的图像相对应? Dupes在DA上相当罕见,但与此同时,这是一个更普遍意义上的有趣问题。
关于如何进行的想法?
现在Postgresql DB填充为我刮图像,其中有一个表格如下:
CREATE TABLE Image
(
id SERIAL PRIMARY KEY NOT NULL,
url varchar(5000) UNIQUE NOT NULL,
dateadded timestamp without time zone default (now() at time zone 'utc'),
width int,
height int
);
当我从DA(例如:http://th05.deviantart.net/fs70/PRE/f/2014/222/2/3/sketch_dump_56_by_lilaira-d7uj8pe.png)抓取图片时,url是图片的链接,dateadded
是刮刀找到图片的datetime
,{{1} }& width
是图片尺寸。
我目前不将图像本身存储在数据库中,但我确实保留了本地镜像 - 我将图像的URL和height
文件。所以对于网址:http://th05.deviantart.net/fs70/PRE/f/2014/222/2/3/sketch_dump_56_by_lilaira-d7uj8pe.png我在wget -r -nc
现在,一般情况下的图像识别非常困难。我希望能够处理像轻微调整大小的事情,我可以通过将所有保存到特定分辨率的图像归一化来解释,并在查询时将查询图像规范化为相同的分辨率。我希望能够处理格式改变(PNG与JPG等)之类的事情,我可以通过将图像文件读入标准化格式来做(例如:每个像素的未压缩RGB值,尽管理想情况下有些"松弛& #34;这里可以容忍。)
很高兴(愿意放弃简化/更准确):
<somedir>/th05.deviantart.net/fs70/PRE/f/2014/222/2/3/sketch_dump_56_by_lilaira-d7uj8pe.png
,有人拿imageA
并裁剪它并将其上传为{{ 1}}我想注意这是一个重复的内容。imageA
,有人需要{{1}并且裁剪它,我希望能够将裁剪后的图像映射到imageB
)约束/额外信息:
imageA
,我将其调整为50x50,并且50x50网格出现在新图像中,我不会考虑新图像&#34;相同&#34;作为imageA
(虽然我认为之前列出的标准我会认为imageA
是新图像的副本)思考?建议?
对于我的用例,我更关心误报而不是假阴性,并且这样一个模糊匹配&#34;方法应谨慎行事。
如果重要的是我用Python编写所有这些内容,尽管TBH我很乐意使用替代技术,如果它能够优雅/高效地解决我的问题。
答案 0 :(得分:0)
我会抓住一个不在边缘附近的小子图像,并在数据库图像中的源位置附近交叉关联。您可以在互相关之前对其进行重新取样以计算小尺寸,并且您可以选择与之匹配的附近区域的大小来计算特定百分比的不对称作物。
为了避免在无特征区域(例如天空)上感知拟合,您可以使用局部图像变化作为子图像位置的选择标准。
这仍然会很慢,因此有必要使用全局图像度量来首先从数据库中选择候选副本(例如danf提到的颜色直方图)。