如何根据像素差异找到两幅图像之间的差异?
答案 0 :(得分:5)
有很多方法,从几行代码到大项目。
您可以尝试:
像素级差异,即image matrix A - image matrix B
颜色直方图差异。您还可以将图像分割成几个小窗口,并在每个窗口中聚合直方图差异。
精确的功能,如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#中快速实现类似的过滤器