private List <ImageHash> FindDuplicatesTo(ImageHash hash, int minSimilarity, ref List <ImageHash> alreadyMarkedAsDupl) { var currHashDupl = new List <ImageHash>(); foreach (var hashCompareWith in _hashLibToCompare) { if (hash.CompareWith(hashCompareWith) >= minSimilarity) { if (!alreadyMarkedAsDupl.Contains(hash)) { alreadyMarkedAsDupl.Add(hash); currHashDupl.Add(hash); } //if (!alreadyMarkedAsDupl.Contains(hashCompareWith)) //{ // alreadyMarkedAsDupl.Add(hashCompareWith); // currHashDupl.Add(hashCompareWith); //} } } return(currHashDupl); }
public void AddPicByPathToCompare(string path) { var hash = new ImageHash(_hashSize); hash.GenerateFromPath(path); _hashLibToCompare.Add(hash); hash = new ImageHash(_hashSize); hash.GenerateFromPathReversed(path); _hashLibToCompare.Add(hash); }
/// <summary> /// Method to compare 2 image hashes /// </summary> /// <returns>% of similarity</returns> public double CompareWith(ImageHash compareWith) { if (HashData.Length != compareWith.HashData.Length) { throw new Exception("Cannot compare hashes with different sizes"); } int differenceCounter = 0; for (int i = 0; i < HashData.Length; i++) { if (HashData[i] != compareWith.HashData[i]) { differenceCounter++; } } return(100 - differenceCounter / 100.0 * HashData.Length / 2.0); }