【问题标题】:Compare compressed image against original将压缩图像与原始图像进行比较
【发布时间】:2016-10-02 06:55:14
【问题描述】:

我想知道是否有一种方法可以确定两张图片是否相同(我知道有很多关于该主题的帖子),但也有可能一张图片是压缩版本另一张图片的...

This post 还要求提供一个进行图像处理和比较的 C# 库,但我不确定库需要什么样的函数来提供这种特定的匹配。另一方面,This post 是一种方式抽象。 我读过关于OpenCV(或this .NET wrapper)的文章,但我没有这方面的经验,如果不应用that post I didn't understand myself 的抽象,我不确定它是否会做我想做的事。我意思是,OpenCV 可能能够进行所需的计算,它似乎是一个非常强大的工具,但对于看似简单的要求来说似乎有点复杂。或者这实际上更复杂并且像 OpenCV 之类的方法要走吗? (如果是,怎么做?)

那么,我将如何实现这一目标?

【问题讨论】:

  • 将它们加载为位图并检查每个像素的颜色?耗费体力。可能是一个非常糟糕的建议,但仍然是一个建议。
  • 除非您有特殊定义,如果位图相同,您需要比较(未压缩)位图的所有像素。一定要使用 LockBits 或 unsafe 以获得适当的速度!
  • 如果它们是照片(即不是主要是一种颜色的线条图),那么您可能会在每个图像的相应位置采样几千个随机位置并使用差异平方和进行比较。 .这也可以很容易地用于调整大小的图像。

标签: c# .net image image-processing


【解决方案1】:

您可以尝试的一个简单途径是 AForge .NET 库。它完全是 .NET 实现,因此无需担心环境设置,并具有以下功能,可能适合您的情况:

ExhaustiveTemplateMatching 类

"该类实现了穷举模板匹配算法,它对源图像执行完整扫描,将每个像素与模板的对应像素进行比较。该类还可以用于获取两个图像之间的相似度尺寸相同,这对于获取有关图像不同/相似程度的信息很有用”

http://www.aforgenet.com/framework/docs/html/17494328-ef0c-dc83-1bc3-907b7b75039f.htm

// create template matching algorithm's instance
// use zero similarity to make sure algorithm will provide anything
ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0);

// compare two images
TemplateMatch[] matchings = tm.ProcessImage(image1, image2);
// check similarity level
if (matchings[0].Similarity > 0.95f)
{
    // do something with quite similar images
}

【讨论】:

  • 项目有点偏离了方向,但是当我再次拿起它时,这可能是要走的路,以避免让自己陷入复杂的数学问题。感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2015-11-01
相关资源
最近更新 更多