Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi "Verfärbte" Bilder vergleichen. (https://www.delphipraxis.net/81402-verfaerbte-bilder-vergleichen.html)

Relicted 26. Nov 2006 16:20


"Verfärbte" Bilder vergleichen.
 
Liste der Anhänge anzeigen (Anzahl: 3)
Mahlzeit!

Ich suche momentan nach ner kleinen hilfestellung. ich habe n bilder die ansich alle gleich sind. sie unterscheiden sich nur in der farbgebung. das objekt ansich ist 100% gleich.
mich würde interessieren ob es möglich ist, und wenn möglich auch wie, diese bilder zu vergleichen.

ich habe hier ein bildchen mal so manipuliert wie es auch in realität auftreten könnte - vielleicht hat hier ja wer ne idee.

zum vergleichen habe ich schon hier geschaut - müsste sie aber erstmal auf ein format bekommen um sie vergleichen zu können.
( http://www.delphipraxis.net/internal...ct.php?t=96369 )

gruß
reli

Sascha L 26. Nov 2006 16:46

Re: "Verfärbte" Bilder vergleichen.
 
Ich weiß nicht, ob es klappt, aber müssten die Bilder in Schwarz/weiß, also Graustufen nicht identisch aussehen? Also wenn sie sich nur in der Farbe unterscheiden, würde ich halt einfach alle Farben runtersetzen, sodass man nur noch den Kontrast hat. Da die Form ja identisch ist, müssten alle Bilder dann gleich sein.

Relicted 26. Nov 2006 16:55

Re: "Verfärbte" Bilder vergleichen.
 
hm ja die idee ist mir auch schon gekommen... die frage ist how to do :o)

Flare 26. Nov 2006 17:03

Re: "Verfärbte" Bilder vergleichen.
 
Man könnte ein grobes Schwarz-Weis-Muster von den beiden Bildern anlegen und diese dann vergleichen. Sobald eine der 3 Farben über 127 ist (oder eben eine andere Zahl von 0 bis 255), dann wird der Pixel weiß, ansonsten schwarz.


Flare

Khabarakh 26. Nov 2006 17:14

Re: "Verfärbte" Bilder vergleichen.
 
Ich würde eher die Werte in den HSV-Farbraum (vielleicht auch HSL/HSB/HSI) umrechnen und dann die V- und S-Werte vergleichen. Du solltest uns aber schon ein bisschen mehr Informationen geben, ob die Bilder beispielsweise künstlich erzeugt werden oder wirklich verschiedenfarbige Fotos sind.

Phantom1 26. Nov 2006 17:26

Re: "Verfärbte" Bilder vergleichen.
 
Hier mein Vorschlag:

Delphi-Quellcode:
function CompareBitmaps(Bitmap1, Bitmap2: TBitmap): Double;
var
  xy: integer;
  P1, P2: PRGBTriple;
  g1, g2: Byte;
  PixelWeight: Double;
begin
  Result:=100.0;
  PixelWeight:=100/(Bitmap1.Width*Bitmap1.Height)/255;
  Bitmap1.PixelFormat:=pf24bit;
  Bitmap2.PixelFormat:=pf24bit;
  P1:=Bitmap1.ScanLine[Bitmap1.Height-1];
  P2:=Bitmap2.ScanLine[Bitmap2.Height-1];
  for xy:=1 to Bitmap1.Height*Bitmap1.Width do begin
    g1:=(P1^.rgbtRed+P1^.rgbtGreen+P1^.rgbtBlue) div 3;
    g2:=(P2^.rgbtRed+P2^.rgbtGreen+P2^.rgbtBlue) div 3;
    Result:=Result-ABS(g1-g2)*PixelWeight;
    Inc(P1);
    Inc(P2);
  end;
end;
Verglichen wird hier nur die Helligkeit und gibt als Ergebnis die Ähnlichkeit in Prozent an. Man müsste dann nur noch entscheiden ab wieviel Prozent die Bilder als gleich gelten...

mfg

Relicted 26. Nov 2006 17:31

Re: "Verfärbte" Bilder vergleichen.
 
hört sich gut an...

mehr infos kann ich gar nicht geben. ich denke es ist immer ein bild welches via script ( php or what ever ) die farbe ändert

danke schonmal für die nützlichen hinweise!

gruß
reli

alzaimar 26. Nov 2006 18:03

Re: "Verfärbte" Bilder vergleichen.
 
Wie sieht eigentlich die Differenz der beiden Bilder aus? Wären sie absolut gleich, würde das Diffenz schwarz sein. Und hier?

Relicted 26. Nov 2006 18:14

Re: "Verfärbte" Bilder vergleichen.
 
*mit den schultern zuck*
keine ahnung muss ich passen

alzaimar 26. Nov 2006 18:21

Re: "Verfärbte" Bilder vergleichen.
 
Ich habe mal die Differenz der beiden in Graustufen konvertierten Bilder gemacht: Voilá, schwarz wie die Nacht (bis auf ein paar klitzekleine grauen Linien).

Delphi-Quellcode:
Var
  c1,c2,x,p,q,i,j : Integer;
  b1,b2 : TBitmap;
  r : TRect;

begin
  b1 := TBitmap.create;
  b2 := TBitmap.create;
  r := rect (0,0,image1.width, image1.height);
  b1.width := image1.width;
  b1.Height := image1.Height;
  b2.width := image1.width;
  b2.Height := image1.Height;

  b1.Canvas.Draw(0,0,image1.Picture.Graphic);
  b2.Canvas.Draw(0,0,image2.Picture.Graphic);

  Image3.Width := image1.Width;
  image3.Height := Image1.Height;
  For i:=0 to image1.Height - 1 do
    for j:=0 to image1.Width - 1 do begin
      p := b1.Canvas.Pixels[j,i];
      q := b2.Canvas.Pixels[j,i];
      c1 := (GetRValue(p) + GetGValue(p) + GetBValue(p)) div 3;
      c2 := (GetRValue(q) + GetGValue(q) + GetBValue(q)) div 3;
      c1 := abs(c1 - c2);
      x := rgb ( c1,c1,c1);
      image3.Canvas.Pixels[j,i] := X;
      End;
  b1.free;
  b2.free;
end;
Bitte nicht steinigen, weil ich alle Grundsätze guten Codes über Bord geworfen habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Seite 1 von 2  1 2      

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