通过C#来实现二张JPG图片请问如何对比它的相似度,例如:90% ,100% ,,60%?

二张JPG图片请问如何对比它的相似度,例如:90% ,100% ,,60%?

我给图片,请看一下,是二张监控图片,请问相似度如何计算?通过C#来实现。

img

img

img

img

.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号回答被采纳的那个 有点亏了 回答早了 哈哈哈