作为LEAD Technologies 25周年纪念的一部分,我们正在搞一个“25天收集25个项目来展示LEAD功能强度和易用性”的活动。今天要展示的项目来自于阿明的分享。
非常相似的图像
完全一样的图像
非常不同的图像
它是做什么的
该C#编写的WinForms应用程序可以用LEADTOOLS第19版中各种图像处理算法来进行图像对比。
所使用的功能
· Viewers
开发进程日志
大家好,我是阿明。我要创建这样一个程序,该程序可以获取两个输入的图像,并使用各种技术来计算出两者之间不同的相似度。我要使用VS 2010里面的C#语言来进行编码,因为它的项目可以很容易地升级到更高版本的Visual Studio。
首先,我要通过创建一个加载并显示了两个图像的简单的窗体来启动该项目,并用它来做逐像素的比较。对于这一点而言,我要使用的是Leadtools.Controls.ImageViewer
控件,以及Leadtools.Codecs.RasterCodecs.Load
方法。
为了执行图像对比,我要使用的是CombineCommand
类,以及OperationXor
标志,这会使目标图像中所有与对应的源图像相同的像素归零。
最初的设计和比较代码花了我差不多一小时的时间,但我还是要修改一点点。我会将一堆测试图像添加到两个组合框,以便于装载,并且会在启动时填写这两个组合框,而不是每一次都浏览并加载不同的图像。这个变更我又花了一个小时来完成。
现在,我将添加除精确像素匹配以外的其他比较标准。
要实现的第二个比较标准是图像的平均强度。如果将两个亮(或两个暗)的图像用这种方式来进行比较,您会发现,即使他们在所有其他方面都有所不同,其比较结果还是会十分相似。得益于StatisticsInformationCommand
类的帮助,这各部分编码进行得相当顺利,该类可以用几行代码返回所有图像像素强度值的平均值(平均)。
第三比较标准是进行逐个像素强度的比较。这忽略了色彩这部分的内容,使得彩色图像看起来像自己的灰度副本一样。得益于同一个CombineCommand类的帮助,该实现也得以迅速地完成。然而,在此过程中我使用了AbsoluteDifference
标志,而不是OperationXor
标志,因为我想计算的是相似性价值,而不仅仅是一个完全匹配的指标。
上述两种比较方式,任何一种都花了大约一个小时的时间来实现。
第四和第五个比较标准都是与颜色信息相关的,并且不依赖于图像的亮度。我会用ColorSeparateCommand
类来获取这两个图像的色相和饱和度数据,然后用我用之前使用的相同的统计命令来计算出这些平面的平均值。
由于这两个比较标准是相关的,在大约一个小时的时间里我就把两个标准一起完成了。
要执行的最后一个的比较标准是一个频域相似性评估。为了获得频率量级,我将使用我们的FastFourierTransformCommand
类。通常情况下,FFT需要的图像尺寸是二的幂次方,但我们的功能用填充克服了这一点,所以我在我自己的代码中用了PadOptimally
标志。
我还要确保两个图像具有相同的尺寸,如果需要的话,以256×256像素调整它们的大小,以便使输出频率数据阵列具有相同的尺寸。
唯独这个功能花了我将近3个小时的时间才完成。但是,如果没有LEADTOOLS的帮助,它可会能花费我几天的时间,或者更久。
下载该项目
该示例项目的源代码您可以点击这里进行下载。
08 Compare Images.zip (854.52 kb)
要运行该项目,请将其解压缩到该目录下: C:\LEADTOOLS 19\Examples\DotNet\CS directory。
支持
关于其他产品的更多信息,请访问我们的官方网站,
欢迎下载免费的全功能评估版SDK,全功能试用版中有这个例子的全部源代码。
同时欢迎您使用评估版期间的免费技术支持���