我正在使用 MinHash 算法来查找图像之间的相似图像。我遇到过这篇文章,How can I recognize slightly modified images?
它指向了MinHash算法。
我正在使用这篇博文中的 C# 实现,Set Similarity and Min Hash
.
但是在尝试使用该实现时,我遇到了两个问题。
- 我应该将值设置为什么值
universe
? - 将图像字节数组传递给
HashSet
时,它只包含不同的字节值;因此比较 1 ~ 256 的值。
universe
MinHash 中这是什么?
我可以做些什么来改进 C# MinHash 实现?
由于HashSet<byte>
包含高达 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<byte> GetImageByte(string imagePath)
{
using (var fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
using (var br = new BinaryReader(fs))
{
//List<int> bytes = br.ReadBytes((int)fs.Length).Cast<int>().ToList();
var bytes = new List<byte>(br.ReadBytes((int) fs.Length).ToArray());
return new HashSet<byte>(bytes);
}
}
}