Я использую алгоритм 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);
}
}
}