public void TestCompareCompressedPicture() { using (var imageStream1 = TestImage.Flora.GetStream()) using (var bmp1 = (Bitmap)Image.FromStream(imageStream1)) using (var imageStream2 = TestImage.FloraCompressed.GetStream()) using (var bmp2 = (Bitmap)Image.FromStream(imageStream2)) { var hash1 = BitmapHash.Compute(bmp1); var hash2 = BitmapHash.Compute(bmp2); var diff = BinaryUtils.ComputeByteArrayEquality(hash1, hash2); Assert.True(diff > 0.9); } }
public float Compare(HashContext context, Hash bitmapHash) { var colorData = bitmapHash.HashData.AsSpan(32); var colorFactor = ComputeColorFactor(colorData, context.ColorData.Span); var bitmapHashData = bitmapHash.HashData.AsSpan(0, 32); float bestSimilarity = 0; foreach (var variant in context.Variants) { var similarity = BinaryUtils.ComputeByteArrayEquality(variant.Span, bitmapHashData); bestSimilarity = Math.Max(bestSimilarity, similarity); } return(bestSimilarity * colorFactor); }