AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Bildvergleich mit Summe der quadratischen Unterschiede (SSD)
Thema durchsuchen
Ansicht
Themen-Optionen

Bildvergleich mit Summe der quadratischen Unterschiede (SSD)

Ein Thema von christian.noeding · begonnen am 13. Dez 2009 · letzter Beitrag vom 14. Dez 2009
 
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#1

Bildvergleich mit Summe der quadratischen Unterschiede (SSD)

  Alt 13. Dez 2009, 12:28
Ein kleiner, schneller Algorithmus, um Bilder miteinander zu vergleichen ist der SSD (Sum of Squared Differences) Algorithmus. Die Formel ist im Anhang zu diesem Post.

Das Bild wird zunächst in den L*a*b*-Farbraum umgerechnet, um das Bild nur über die Helligkeit eines Pixels zu vergleichen. Anschließend wird der Algorithmus ausgeführt. Der zurückgegebene Wert wird größer, je UNTERSCHIEDLICHER die Bilder sind.

Der SSD-Algorithmus ist allerdings nicht wirklich super. Besser ist der ZNCC, den ich ebenfalls hier in der CodeLib beschrieben habe (Link zum ZNCC)

Delphi-Quellcode:
function SSD(Canvas1, Canvas2: TCanvas; Pixel:integer):Single;
var
  x, y:integer;
  Gamma, Intensity1, PixelValue1, Intensity2, PixelValue2:single;
  R1, G1, B1, R2, G2, B2, Grayscale1, Grayscale2:byte;
  MyColor1, MyColor2:TColor;

  SSDvalue:Extended;
begin
  SSDvalue:=0.0;
  Gamma:=2.2;

  for x:=0 to (Pixel-1) do
  begin
    for y:=0 to (Pixel-1) do
    begin
      MyColor1:=Canvas1.Pixels[x, y];
      TColor2RGB(MyColor1, R1, G1, B1);

      MyColor2:=Canvas2.Pixels[x, y];
      TColor2RGB(MyColor2, R2, G2, B2);

      // Graustufenbild 1 (Umrechnung auf L*a*b - Farbraum)
      Intensity1:=0.2126 * Power(R1/255, Gamma) + 0.7152 * Power(G1/255, Gamma) + 0.0722 * Power(B1/255, Gamma);
      Grayscale1:=255-round(116*Power(Intensity1, 1/3)-16);
      PixelValue1:=Grayscale1/255;

      // Graustufenbild 2 (Umrechnung auf L*a*b - Farbraum)
      Intensity2:=0.2126 * Power(R2/255, Gamma) + 0.7152 * Power(G2/255, Gamma) + 0.0722 * Power(B2/255, Gamma);
      Grayscale2:=255-round(116*Power(Intensity2, 1/3)-16);
      PixelValue2:=Grayscale2/255;

      // SumOfSquaredDifferences (SSD) (wird MINIMAL (<1) bei guter Übereinstimmung)
      SSDvalue:=SSDvalue+Power((PixelValue1-PixelValue2), 2);
    end;
  end;

  result:=SSDvalue;
end;
Angehängte Grafiken
Dateityp: png ssd_172.png (10,0 KB, 35x aufgerufen)
Christian Nöding
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz