cLx a le don de ma rappeller que je ne suis pas un mathématicien surdoué en montrant son logiciel qui... je le rappelle... a tendance à facilement trouver des doublons là où il n'y en a pas
L'algorythme (le mien à moi, hein cLx?!) que j'utilise n'est pas sorcier:
- On demande trois paramètres : Sensibilité, Précision et Tolérance à l'utilisateur.
- Redimensionnement des images en 50x50 pixels.
- Comparaison des trois composantes pour chaque pixel.
- Ajout de la somme des différences dans un indice.
- Vérification si une des trois différences est supérieure à la précision demandée. Si oui, décrémentation de la tolérance.
- Si l'indice de différence est inférieur à la Sensibilité et que la Tolérance n'est pas dépassée, alors les images sont considérées comme identiques.
En Delphi ça donne ceci :
Citation:
Diff := 0;
Wide := 0;
for Y:=0 to 49 do for X:=0 to 49 do begin
DiffRed := abs(Pic1.Red[X,Y] - Pic2.Red[X,Y]);
DiffGreen := abs(Pic1.Green[X,Y] - Pic2.Green[X,Y]);
DiffBlue := abs(Pic1.Blue[X,Y] - Pic2.Blue[X,Y]);
Inc(Diff, DiffRed + DiffGreen + DiffBlue);
if ((DiffRed >= Precision) or (DiffGreen >= Precision) or (DiffBlue >= Precision)) then inc(Wide);
end;
Result.Pixels := Diff / (50 * 50 * 255 * 3);
Result.Wide := Wide;
Citation:
if ((Diff.Pixels < Sensitivity) and (Diff.Wide < Tolerance)) then AddGroup(Id1, Id2);
Les résultats que j'obtiens, une fois les trois paramètres calibrés, sont vraiment excellents.