如何比较两张图像并确定它们是100%相似,还是仅改变颜色或裁剪?
答案 0 :(得分:3)
嗯,抽象地说,你需要定义一个比较两个图像的相似度函数。要确定图像是否“100%相似”(相等),您可以执行以下操作:
if ( sum( abs( pixel_1_i - pixel_2_j ) ) / num_pixels < threshold ) return true
对于图像颜色不同或裁剪
的情况if (error < threshold) return true
顺便说一句:如果你的图像被缩放或旋转,这种方法将不起作用。
进一步研究:
答案 1 :(得分:2)
以下是一个相当简单的问题解决方法,对于同一主题的两张不同照片从略微不同的角度拍摄效果不佳,但是如果你有两张同样想要验证的图像副本就可以使用
两个相同图像的情况很简单 - 只需循环通过像素阵列从另一个中减去RGB值。如果差异小于小公差,则像素是相同的。因此,只要您发现像素差异大于公差,就会知道图像不同。
您可以允许一定数量或百分比的差异,以允许压缩文物产生差异。
要检查颜色的变化,您可以查看HLS(色相,亮度和饱和度)值。如果像素具有相同的L&amp; S值但是H值不同,那么它只是颜色不同(我认为)。
裁剪更加困难,因为您必须尝试在较大的图像中找到较小图像的位置。
答案 2 :(得分:1)
您可以使用对象描述符,例如:
SIFT - http://en.wikipedia.org/wiki/Scale-invariant_feature_transform
SURF - http://en.wikipedia.org/wiki/SURF
然后使用计算的描述符比较图像。这些描述符将使您能够处理旋转,缩放和稍微改变的图像。
描述符也包括定向渐变,这意味着这些描述符对照明和颜色变化也很稳健。
您可以使用Accord.NET(SURF实施)。