二张JPG图片请问如何对比它的相似度,例如:90% ,100% ,,60%?
我给图片,请看一下,是二张监控图片,请问相似度如何计算?通过C#来实现。
.NET 5 的控制台应用程序实现,供参考:
using System;
using System.Drawing;
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
var img1 = new Bitmap(@"D:\tmp\03.jpg");
var img2 = new Bitmap(@"D:\tmp\04.jpg");
if (img1.Size != img2.Size)
{
Console.Error.WriteLine("两张图片尺寸不一致");
return;
}
float diff = 0;
for (var y = 0; y < img1.Height; y++)
{
for (var x = 0; x < img1.Width; x++)
{
var pixel1 = img1.GetPixel(x, y);
var pixel2 = img2.GetPixel(x, y);
diff += Math.Abs(pixel1.R - pixel2.R);
diff += Math.Abs(pixel1.G - pixel2.G);
diff += Math.Abs(pixel1.B - pixel2.B);
}
}
var d = 100 * (diff / 255) / (img1.Width * img1.Height * 3);
Console.WriteLine("两张图片差异度: {0} %", d);
Console.WriteLine("两张图片相似度: {0} %", 100 - d);
Console.ReadKey();
}
}
}
输出结果:
两张图片差异度: 4.3947005 %
两张图片相似度: 95.6053 %
第2次问了把,我也不给代码,人家上次给的代码你不要。我也不想费劲
只告诉你大体步骤,免得后面有给你不要的东西
1.黑白二值化,避免颜色干扰
2.第一步二值化后,直接余弦相似度比较
至于代码么,你知道上面两步,你自己就可以直接找到代码,至于啥ml.net,opencv这类库这两步都是成品方法,直接调用其实都可
写完发现,严格点的话中间在加一步把:归一化,将图片归一到相同尺寸,避免尺寸不同,算余弦值的时候不一样
这个好像是我8号回答被采纳的那个 有点亏了 回答早了 哈哈哈