Einzelnen Beitrag anzeigen

bossberlin112

Registriert seit: 24. Aug 2010
1 Beiträge
 
#8

AW: Bildvergleich mit ZeroMeanNormalizedCross-Correlation (ZNCC)

  Alt 23. Jan 2013, 18:18
Hallo, leider funktioniert das ganze nicht.

Es gibt immer eine Exception hier:

for x:=0 to Bild1.Width-1 do
begin
summe1:=summe1+RGB2TColor(P1[y][x].rgbtRed, P1[y][x].rgbtGreen, P1[y][x].rgbtBlue);
summe2:=summe2+RGB2TColor(P2[y][x].rgbtRed, P2[y][x].rgbtGreen, P2[y][x].rgbtBlue);
end;

Ich möchte 2 Bilder vergleichen und den Prozentwert der Übereinstimmung bestimmen. Gibt's ne aktuellere Version bzw. ein Testprogramm, um evtl. Fehler auszuschließen?!

Derzeit bestimme ich die Anzahl unterschiedlicher Pixel über folgende Funktion, allerdings ist mir nicht ganz klar, wie ich hier den Korrelationskoeffizient bestimme etc. .... kann wer helfen?

Code:
function TForm1.CompareImages(Image1,Image2:TBitmap):Int64;
var x,y:integer;
   P1,P2:PRGBTripleArray;
   summe1,summe2:integer;
begin
  result := 0;
  summe1 := 0;
  summe2 := 0;
  for y := 0 to Image1.Height -1 do
   begin
     P1 := Image1.ScanLine[y];
     P2 := Image2.ScanLine[y];
       if not CompareMem(p1,p2,Image1.Width*SizeOf(TRGBTriple)) then
         begin
           for x := 0 to Image1.Width-1 do
             begin
               inc(summe1,RGB(P1[x].rgbtRed,P1[x].rgbtGreen,P1[x].rgbtBlue));
               inc(summe2,RGB(P2[x].rgbtRed,P2[x].rgbtGreen,P2[x].rgbtBlue));
               if summe1 <> summe2 then
                 begin
                   summe1 := 0;
                   summe2 := 0;
                   inc(result);
                 end;
             end;
         end;
   end;
  Application.ProcessMessages;
end;

Geändert von bossberlin112 (23. Jan 2013 um 18:21 Uhr)
  Mit Zitat antworten Zitat