Используя MinHash для нахождения общих черт между 2 изображениями

Я использую алгоритм MinHash для нахождения подобных изображений между изображениями. Я натыкался на это сообщение, How can I recognize slightly modified images? который указал на меня на алгоритм MinHash.

Я использовал реализацию C# от этого сообщения в блоге, Set Similarity and Min Hash.

Но при попытке использовать реализацию, я столкнулся с 2 проблемами.

  • Что значение должно я устанавливать universe значение к?
  • При передаче массива байтов изображения HashSet, это только содержит отличные значения байта; таким образом сравнивая значения от 1 ~ 256.

Что это такое universe в MinHash?
И что я могу сделать для улучшения реализации C# MinHash?

С тех пор HashSet содержит значения до 256, значение подобия всегда выходят к 1.

Вот источник, который использует реализацию C# MinHash от Set Similarity and Min Hash:

class Program
{
    static void Main(string[] args)
    {
        var imageSet1 = GetImageByte(@".\Images\01.JPG");
        var imageSet2 = GetImageByte(@".\Images\02.TIF");
        //var app = new MinHash(256);
        var app = new MinHash(Math.Min(imageSet1.Count, imageSet2.Count));
        double imageSimilarity = app.Similarity(imageSet1, imageSet2);
        Console.WriteLine("similarity = {0}", imageSimilarity);
    }

    private static HashSet GetImageByte(string imagePath)
    {
        using (var fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
        using (var br = new BinaryReader(fs))
        {
            //List bytes = br.ReadBytes((int)fs.Length).Cast().ToList();
            var bytes = new List(br.ReadBytes((int) fs.Length).ToArray());
            return new HashSet(bytes);
        }
    }
}

10
задан Cœur 14 June 2018 в 11:17
поделиться