Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何比较被裁剪的相同来源的图像?_Image Processing_Image Comparison - Fatal编程技术网

Image processing 如何比较被裁剪的相同来源的图像?

Image processing 如何比较被裁剪的相同来源的图像?,image-processing,image-comparison,Image Processing,Image Comparison,假设我有一个图像文件/URL,我想让我的软件在一组多达100个图像中搜索它(或者至少按这个数量级搜索)。软件应找到的目标图像应与给定图像“相同”,但它仍应能够“原谅”对其中任何一个图像的轻微处理(这两个图像的裁剪方式可能不同,或者压缩方式也可能不同)。 问题是-这是一项可行的任务吗,因为在搜索之前我不会有任何图像(即,搜索之前不会有任何索引)。它是否可能在亚秒时间内工作(请记住,比较集非常小)。如果可行,我可以使用哪些工具来完成这项任务?这可能是软件组件,甚至是在线服务(我可以用它来证明概念)。

假设我有一个图像文件/URL,我想让我的软件在一组多达100个图像中搜索它(或者至少按这个数量级搜索)。软件应找到的目标图像应与给定图像“相同”,但它仍应能够“原谅”对其中任何一个图像的轻微处理(这两个图像的裁剪方式可能不同,或者压缩方式也可能不同)。 问题是-这是一项可行的任务吗,因为在搜索之前我不会有任何图像(即,搜索之前不会有任何索引)。它是否可能在亚秒时间内工作(请记住,比较集非常小)。如果可行,我可以使用哪些工具来完成这项任务?这可能是软件组件,甚至是在线服务(我可以用它来证明概念)。你能帮我吗? 为了进一步关注我的问题,我不是问应该使用哪种算法,在这一点上,我宁愿使用现有的工具/API/服务

软件应该找到的目标图像应该与给定图像“相同”,但它仍然能够“原谅”对其中任何一个图像的轻微处理

如果“轻微处理”不涉及旋转,而只涉及“裁剪”,那么简单的互相关应该可以工作,如果可以进行透视校正、旋转、镜头畸变校正,那么事情就更复杂了

我认为这种方法对轻微的颜色修正是相当宽容的。无论如何,如果需要,您始终可以将两个图像转换为灰度并比较灰度版本

为了进一步关注我的问题,我不是问应该使用哪种算法,在这一点上,我宁愿使用现有的工具/API/服务

可以从OpenCV库(链接点到API的C版本),但它也可以用于C++和Python。使用裁剪后的图像作为模板,并在所有图像中查找它

如果您比较的图像在浅色背景上具有深色特征,则可以使用
CV_TM_cceeff
CV_TM_cceeff\u NORMED
方法。它们都从两幅图像中减去模板区域的平均值。标准化方法(
CV_TM_*\u normald
)通常工作得更好,但比非标准化方法慢


你可以考虑在互相关之前对图像进行一些预处理。如果先对它们进行规格化,则互相关对轻微的亮度/对比度修改将不太敏感。如果按照@misha的建议,首先检测边缘,您将丢失颜色/亮度信息,但轮廓重叠的结果会更好。

jetxee让您走上正确的道路。但是,如果仅使用模板匹配,则可能会遇到背景干扰模板匹配结果的问题。例如,如果模板是建筑,且背景主要为浅色(例如沙漠沙),则模板匹配将失败,因为浅色背景始终比深色模板返回更高的互相关。下面是这个问题的一个例子

解决方法与链接中的方法相同:

  • 对模板和目标图像执行边缘检测
  • 扔掉原始模板和图像
  • 使用边缘检测模板和边缘检测目标图像执行模板检测

至于原谅轻微的处理,边缘检测步骤将负责这一点。只要两幅图像中的边缘没有明显改变(模糊、光学扭曲),这种方法就可以工作。

我知道你不是专门寻找算法,但尽管如此,让我建议以下方法,它可以非常有效地完成你正试图做的事


对于同一图像的裁剪版本,包括旋转,F或a(注意artsy半裸体绘画-良好来源)将为您提供两幅图像之间的平移、旋转和比例系数,从而确定从一幅图像到另一幅图像需要进行哪些操作。

有效点。然而,当直接使用
cvMatchTemplate
时,如果使用
CV_TM_cceeff
CV_TM_cceeff_NORMED
方法,可以避免明亮背景的问题。它们都从两幅图像中减去模板区域的平均值。一、 就个人而言,喜欢在边缘检测后进行交叉相关,但这并不总是最佳解决方案,因为颜色/亮度信息丢失;这样你就无法区分,例如,黑色背景上的白色圆圈和白色背景上的黑色圆圈。谢谢你的提示。我以前从未使用过这些参数。好链接+1为傅里叶梅林。