基于像素比较的2个图像之间的差异

时间:2010-01-05 09:43:39

标签: image-processing

如何根据像素差异找到两幅图像之间的差异?

5 个答案:

答案 0 :(得分:5)

有很多方法,从几行代码到大项目。

您可以尝试:

  1. 像素级差异,即image matrix A - image matrix B

  2. 颜色直方图差异。您还可以将图像分割成几个小窗口,并在每个窗口中聚合直方图差异。

  3. 精确的功能,如Gist,Sift等。这是最先进的/研究方法。

答案 1 :(得分:0)

您可以使用属于ImageMagick的compare工具。

compare -metric MSE image1.png image2.png difference.png

它将突出显示第三个文件中的差异,并输出差异的数值估计值。

如果您有兴趣找到更接近人类感知的图像之间的差异,那么请寻找SSIM / DSSIM工具。

答案 2 :(得分:0)

没有任何特定的像素比较方法,但我会尽力帮助你......

笔记记录> http://php.net/manual/en/book.image.php包含有关图像处理的所有必需功能,我必须说它们代表非常仔细和精美。

// Setup the true color and palette images
$im1 = imagecreatefrompng('orginal_image.png');
$im2 = imagecreate(imagesx($im1), imagesy($im1));

// Add some colors to $im2
$colors   = Array();
$colors[] = imagecolorallocate($im2, 255, 36, 74);
$colors[] = imagecolorallocate($im2, 40, 0, 240);
$colors[] = imagecolorallocate($im2, 82, 100, 255);
$colors[] = imagecolorallocate($im2, 84, 63, 44);

// Match these colors with the true color image
imagecolormatch($im1, $im2);

// Free from memory
imagedestroy($im1);
imagedestroy($im2);

答案 3 :(得分:0)

打开Visual Studio。 =>新项目

选择Visual C#=>控制台应用程序

工具=> Nuget包管理器。 =>解决方案的Nuget包管理器

在浏览和安装下找到EmguCV。

在Program.cs下

using Emgu.CV;
using Emgu.CV.Structure;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace diffOfImages
{
    class Program
    {
        static void Main(string[] args)
        {
            Image<Bgr, byte> img1 = new Image<Bgr, byte>(@"d:\temp\temp1.jpg");
            Image<Bgr, byte> img2 = new Image<Bgr, byte>(@"d:\temp\temp2.jpg");
            var theDiff = img1.AbsDiff(img2);
            theDiff.Save(@"d:\temp\theDiff.jpg");
        }
    }
}

按F5

请参阅https://www.raymond.cc/blog/how-to-compare-the-difference-between-two-identical-looking-images/

答案 4 :(得分:-1)

您可以实施Sobel Filter

您可以使用AForge框架

在C#中快速实现类似的过滤器