Hel*_*iro 10 ruby image image-processing similarity computer-vision
我正在尝试构建一个脚本来浏览我原来的高分辨率照片,并在我拥有专业帐户之前替换我上传到Flickr的旧的低分辨率照片.
对于他们中的许多人,我可以使用Exif信息,例如确定匹配日期.但是有些真的很旧,要么原始文件没有Exif信息,要么被我当时使用的任何愚蠢的调整大小软件所破坏.
因此,无法依赖元数据,我不得不求助于内容本身.问题是原件的分辨率不同于Flickr上的分辨率(这是这项努力的重点).那么有没有办法让我将它们与某种模糊相似性度量进行比较,这样可以让我设置一个需要人类输入的阈值?
我想知道一个图像是另一个图像的调整大小版本可以产生比一般相似性更好的结果.任何语言的解决方案都可以,但Ruby会是一个加分:)
有趣的问题,顺便说一句:)
缓慢的解决方案 - 成功的绝佳机会
使用比例不变特征检测器查找两个图像中的相应特征.如果功能与类似位置的高分相匹配,那么您就有了匹配.
我建议SIFT为图像中的特征生成一个缩放和旋转不变的128整数描述符.SURF(在OpenCV中可用)是另一个(更快的)特征点检测器.
您可以通过bruteforce(将每个描述符与另一个图像中的描述符进行比较)来匹配两个图像中的要素,这些图像是O(n ^ 2)但非常快(特别是在VL SIFT实现中).但是,如果您需要将一个图像中的要素与几个图像(您可能需要)进行比较,则应构建一个要素树,以便使用其他图像的要素进行查询.KD树很有用,OpenCV有很好的实现.
快速解决方案 - 可能有效
将高分辨率图像下采样到低分辨率尺寸并使用类似SAD的相似性度量(其中,两个图像中像素周围的3x3像素的块之间的差异的总和是得分)以确定匹配.