Thema: Delphi Farbwerte vergleichen

Einzelnen Beitrag anzeigen

Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#1

Farbwerte vergleichen

  Alt 26. Apr 2007, 21:30
Es wurde hier schon des öfteren über das Vergleichen von zwei Farbwerten diskutiert.
Da sich weder RGB (RGB-Probleme, wenig Berücksichtigung der menschlichen Farbwahrnehmung)
noch HSV (Sprungstelle bei V von 360° zu 0°; bei Werten in der Nähe von schwarz und weiß werden S und V irrelevant, V ist in Graustufen undefiniert)
gut dazu eignen, möchte ich hier eine andere Variante vorstellen.

Es handelt sich hierbei um den I1I2I3-Farbraum (Wikipedia).
(Warum dieser Farbraum so praktisch ist, erfährt man in Wikipedia )

Als Funktion, die die Farbabweichung nun feststellen soll, sieht das ganze so aus:
Delphi-Quellcode:
function GetPixelAbweichung(Farbe1,Farbe2: TColor): Byte;
type
Farbwerte = record
  I1,I2,I3: Integer;
  end;

var
R,G,B: Byte;
Farbe1I, Farbe2I, DeltaI: Farbwerte;

begin
R:=GetRValue(Farbe1);
G:=GetGValue(Farbe1);
B:=GetBValue(Farbe1);
Farbe1I.I1:=(R+G+B)div 3; // Umrechnung: RGB in I1I2I3
Farbe1I.I2:=(R-B)div 2;
Farbe1I.I3:=(2*G-R-B)div 4;

R:=GetRValue(Farbe2);
G:=GetGValue(Farbe2);
B:=GetBValue(Farbe2);
Farbe2I.I1:=(R+G+B)div 3; // Umrechnung: RGB in I1I2I3
Farbe2I.I2:=(R-B)div 2;
Farbe2I.I3:=(2*G-R-B)div 4;

DeltaI.I1:=Abs(Farbe1I.I1-Farbe2I.I1); // Abweichung (Differenz) der Einzelwerte
DeltaI.I2:=Abs(Farbe1I.I2-Farbe2I.I2);
DeltaI.I3:=Abs(Farbe1I.I3-Farbe2I.I3);

Result:=Max(Max(DeltaI.I1,DeltaI.I2),DeltaI.I3); // Maximale Abweichung

{Result:=Max(Abs(GetRValue(Farbe1)-GetRValue(Farbe2)),  // (Das wäre Farbabweichung über RGB)
        Max(Abs(GetGValue(Farbe1)-GetGValue(Farbe2)),
        Abs(GetBValue(Farbe1)-GetBValue(Farbe2)))); }

end;
Anbei zwei Testprogramme, die mit dieser Funktion arbeiten:
Angehängte Grafiken
Dateityp: bmp farbabweichung_203.bmp (1,15 MB, 40x aufgerufen)
Angehängte Dateien
Dateityp: zip farbwerte_vergleichen_182.zip (444,2 KB, 13x aufgerufen)
Hanno Günther
  Mit Zitat antworten Zitat