鉴于两个不同的图像文件(我选择的任何格式),我需要编写一个程序来预测一个程序是否是另一个的非法副本。副本的作者可能会执行诸如旋转,制作否定或添加琐碎细节(以及更改图像的尺寸)之类的内容。
你知道做这种工作的算法吗?
答案 0 :(得分:291)
答案 1 :(得分:35)
我成功地使用本文介绍的技术检测从相邻网络摄像头捕获的图像中的重叠区域。我的协方差矩阵由Sobel,canny和SUSAN方面/边缘检测输出以及原始灰度像素组成。
答案 2 :(得分:33)
一个想法:
第2步并非无足轻重。特别是,您可能需要使用智能算法在另一个图像上查找最相似的关键点。点描述符通常是非常高维的(如一百个参数),并且有许多要点可以查看。 kd-trees在这里可能很有用,哈希查找效果不好。
变体:
答案 3 :(得分:15)
这确实不像看起来那么简单:-)尼克的建议很好。
要开始使用,请记住,任何有价值的比较方法基本上都可以通过将图像转换为不同的形式来实现 - 这种形式可以更容易地选择相似的功能。通常情况下,这些东西不适合阅读非常轻松......
我能想到的最简单的例子之一就是使用每个图像的颜色空间。如果两个图像具有高度相似的颜色分布,那么您可以合理地确定它们显示相同的东西。至少,你可以有足够的确定性来标记它,或做更多的测试。比较色彩空间中的图像也会抵制诸如旋转,缩放和一些裁剪之类的事情。当然,它不会抵制图像的严重修改或严重的重新着色(即使是简单的色调偏移也会有些棘手)。
http://en.wikipedia.org/wiki/RGB_color_space
http://upvector.com/index.php?section=tutorials&subsection=tutorials/colorspace
另一个例子涉及一个叫做Hough变换的东西。该变换基本上将图像分解为一组线。然后,您可以在每张图像中选取一些“最强”的线条,看看它们是否排成一行。你可以做一些额外的工作来尝试和补偿旋转和缩放 - 在这种情况下,因为比较几行计算工作比对整个图像做同样多的计算工作 - 它不会那么糟糕。 / p>
http://homepages.inf.ed.ac.uk/amos/hough.html
http://rkb.home.cern.ch/rkb/AN16pp/node122.html
http://en.wikipedia.org/wiki/Hough_transform
答案 4 :(得分:8)
您需要使用水印方案将代码嵌入到图像中。为了退后一步,与某些人提出的一些低级方法(边缘检测等)相反,水印方法更优越,因为:
它抵抗信号处理攻击 ►信号增强 - 锐化,对比度等 ►过滤 - 中位数,低通,高通等 ►附加噪声 - 高斯,均匀等 ►有损压缩 - JPEG,MPEG等
它抵抗几何攻击 ►仿射变换 ►数据缩减 - 裁剪,裁剪等 ►随机局部扭曲 ►翘曲
对水印算法进行一些研究,您将走上解决问题的正确道路。 ( 注意:您可以使用STIRMARK数据集对方法进行基准测试。这是此类应用程序的公认标准。
答案 5 :(得分:5)
这只是一个建议,它可能不起作用,我已经准备好接受这个了。
这会产生误报,但希望不是假阴性。
调整两个图像的大小,使它们的大小相同(我假设两个图像中宽度与长度的比例相同)。
使用无损压缩算法(例如gzip)压缩两个图像的位图。
查找具有相似文件大小的文件对。例如,您可以根据文件大小的相似性对每个文件对进行排序,并检索前X个。
正如我所说,这肯定会产生误报,但希望不是假阴性。您可以在五分钟内实现这一点,而Porikil等。人。可能需要大量的工作。
答案 6 :(得分:4)
我相信如果你愿意将这种方法应用于每个可能的方向和负面版本,图像识别(具有良好的可靠性)的良好开端是使用特征脸:http://en.wikipedia.org/wiki/Eigenface
另一个想法是将两个图像转换为其组件的向量。一个好方法是创建一个以x * y维度运算的向量(x是图像的宽度,y是高度),每个维度的值应用于(x,y)像素值。然后运行K-Nearest Neighbors的变体,有两个类别:匹配和不匹配。如果它足够接近原始图像,它将适合匹配类别,如果不是,那么它将不适合。
K Nearest Neighbors(KNN)可以在这里找到,网上也有其他很好的解释:http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm
KNN的好处是,与原始图像比较的变体越多,算法就越准确。缺点是你需要一个图像目录来训练系统。
答案 7 :(得分:1)
如果您愿意考虑采用不同的方法来检测图像的非法副本,您可以考虑使用watermarking。 (从1.4开始)
...将版权信息插入数字对象而不会降低质量。只要数字对象的版权存在问题,就会提取此信息以识别合法所有者。还可以对原始购买者的身份以及版权所有者的身份进行编码,从而允许跟踪任何未经授权的副本。
虽然它也是一个复杂的领域,但是有一些技术允许水印信息通过大量图像更改持续存在:(来自1.9)
当然,常见问题解决方案要求实施这种方法:“......非常具有挑战性”,但如果你成功使用它,你就会对图像是否是副本有很高的信心,而不是百分比可能性。...合理强度的任何信号变换都不能去除水印。因此,一个愿意删除水印的海盗将不会成功,除非他们过多地贬低该文件以达到商业利益。
答案 8 :(得分:0)
如果您正在运行Linux,我建议使用两种工具:
align_image_stack from package hugin-tools - 是一个可以自动纠正旋转,缩放和其他扭曲的命令行程序(它主要用于合成HDR摄影,但也适用于视频帧和其他文档)。更多信息:http://hugin.sourceforge.net/docs/manual/Align_image_stack.html
从包imagemagick 进行比较 - 一个可以查找和计算两个图像中不同像素数量的程序。这是一个简洁的教程:http://www.imagemagick.org/Usage/compare/ uising -fuzz N%你可以增加容错。 N越高,误差容限越高,仍将两个像素计为相同。
align_image_stack应该纠正任何偏移,这样compare命令实际上有可能检测到相同的像素。