C# 如何比较两个图像以检测重复和裁剪的重复?
我如何比较两幅图像并确定它们是否100%相似,或者只是在颜色或裁剪上有所改变?以下是一种相当简单的方法来解决这个问题,并且无法从稍微不同的角度拍摄同一主题的两张不同照片,但是,如果您有两份要验证的同一图像的副本,则可以使用 两个相同图像的情况很简单——只需循环通过像素阵列从另一个图像减去RGB值即可。如果差异小于小公差,则像素相同。因此,一旦您发现像素差异大于公差,您就知道图像是不同的 您可以考虑一定数量或百分比的差异,以考虑压缩人工制品引起的差异 要检查颜色的变化,可以查看HLS(色调、亮度和饱和度)值。如果像素有相同的L&S值,但不同的H值,那么只是颜色不同(我认为)C# 如何比较两个图像以检测重复和裁剪的重复?,c#,.net,image-processing,zero-pad,C#,.net,Image Processing,Zero Pad,我如何比较两幅图像并确定它们是否100%相似,或者只是在颜色或裁剪上有所改变?以下是一种相当简单的方法来解决这个问题,并且无法从稍微不同的角度拍摄同一主题的两张不同照片,但是,如果您有两份要验证的同一图像的副本,则可以使用 两个相同图像的情况很简单——只需循环通过像素阵列从另一个图像减去RGB值即可。如果差异小于小公差,则像素相同。因此,一旦您发现像素差异大于公差,您就知道图像是不同的 您可以考虑一定数量或百分比的差异,以考虑压缩人工制品引起的差异 要检查颜色的变化,可以查看HLS(色调、亮度和
裁剪更加困难,因为您必须尝试在较大图像中找到较小图像的位置。抽象地说,您需要定义一个相似性函数,用于比较两个图像。要确定图像是否“100%相似”(相等),可以执行以下操作:
- 比较图像的大小
- 如果图像大小相同,只需相互减去像素即可
if(sum(abs(pixel_1_i-pixel_2_j))/num_pixels
- 对两幅图像应用边缘检测器
- 计算互相关(在频域中,FFT)
- 找到最高峰
- 将(较小的)边贴图放置在确定的位置
- 计算绝对误差
if(错误<阈值)返回true
- :FFT(快速傅立叶变换,,),零填充(如果输入信号大小不同,则FFT需要)
- 边缘检测:,(这些是非常常见的图像处理过滤器,它们应该在
库中提供,就像FFT一样)C#
您可以使用Accord.NET(SURF实现)。您是说经过人工着色的精确副本吗?或者你指的是同一事物的两张不同的图片。这可能会在方法上产生显著的不同。我只寻找经过数字修改的拷贝,包括彩色拷贝。这里不可能使用校验和方法…这是非常有趣和有用的。我必须确定如何处理每种图像格式。这应该是像素的内部循环,还是在不循环所有像素的情况下可以工作“如果(sum(abs(pixel_1_I-pixel_2_j))/num_pixels