Hi,
Die folgende Prozedur ist von
http://www.tipps.delphi-source.de/gr...020911-8.shtml
Wenn ich mit ihr zwei genau gleich große Bilder vergleiche, so liefert sie die absurdesten Ergebnisse...
Bsp:
1. ich liefere 2 Bilder von der Größe 5*8. Sie sind beide komplett grau, bis auf den Pixel ganz links oben im ersten Bild.
2. Das Programm gibt an, dass es 3 Unterschiede gibt, was ja eindeutig 2 zuviel sind.
Wenn ich das eine Bild noch weiter verändert hab, so zeigte er mal zu wenige, mal zu viele Fehler an.
Woran kann das liegen?
Code:
procedure CompareImages(Image1, Image2: TImage);
var x, y: integer;
anzahl_unterschiede: LongInt;
zeile1, zeile2: PByteArray;
prozent: single;
const schwellenwert=5;
// Erst wenn die Unterschiede den Schwellenwert überschreiten,
// wird die Abweichung registriert.
begin
anzahl_unterschiede:=0;
for y:=0 to image1.Picture.Bitmap.height-1 do begin
zeile1:=image1.Picture.Bitmap.scanline[y];
zeile2:=image2.Picture.Bitmap.scanline[y];
for x:=0 to image1.Picture.Bitmap.width-1 do
if abs(zeile1[x]-zeile2[x])>schwellenwert then
inc(anzahl_unterschiede);
if image1.Picture.Bitmap.height*image1.Picture.Bitmap.width>0 then
prozent:=100*(anzahl_unterschiede/(image1.Picture.Bitmap.height*
image1.Picture.Bitmap.width))
else
prozent:=0;
form1.label1.caption:='Unterschiede:'+FloatToStr(prozent)+'%';
form1.label2.caption:='Unterschiede:'+IntToStr(anzahl_unterschiede);
end;
end;