![]() |
"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. ( ![]() gruß reli |
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.
|
Re: "Verfärbte" Bilder vergleichen.
hm ja die idee ist mir auch schon gekommen... die frage ist how to do :o)
|
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 |
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.
|
Re: "Verfärbte" Bilder vergleichen.
Hier mein Vorschlag:
Delphi-Quellcode:
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...
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; mfg |
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 |
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?
|
Re: "Verfärbte" Bilder vergleichen.
*mit den schultern zuck*
keine ahnung muss ich passen |
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:
Bitte nicht steinigen, weil ich alle Grundsätze guten Codes über Bord geworfen habe.
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; |
Re: "Verfärbte" Bilder vergleichen.
gesteinigt wird hier eh keiner :)
höchstens erhängt, geköpft, gemartert oder sonst was :)) ich hab gerade mal phantom's algo getestet... funktioniert sehr gut. bekomme eine übereinstimmung von 95% bei beiden fakes. works fine :-) alza deinen algo könnte man vllt noch vereinfachen wenn man einfach nen TImage nimmt und ihm ne 1bit farbrange gibt oder versteh ich grad bissl was falsch? :-) gruß reli |
Re: "Verfärbte" Bilder vergleichen.
Wenn der Algorithmus von Phantom gut ist, nimm den doch: Ich hab mich eh nur für einen visuellen Vergleich interessiert. Bei einer Konvertierung auf 1bit Farbtiefe könnte es aber sein, das das nicht mehr funktioniert.
Zitat:
|
Re: "Verfärbte" Bilder vergleichen.
Hi,
nur weil ich über die identische Grauwert-Berechnung in den beiden Codes von Phantom und alzaimar gestolpert bin: Der Grauwert ist nicht der Mittelwert aus den Farbanteilen im RGB-Farbraum. Um den Grauwert zu erhalten bildet man RGB in den NTSC Farbraum ab (wegen der Trennung von Farbe und Helligkeit in YUV) und schmeißt die Farbe weg, bevor man wieder in den RGB-Farbraum zurück übersetzt. Diese Funktion könnte dabei helfen:
Delphi-Quellcode:
Ansonsten ist ein einfaches gray scale Differenzbild bei ungleichmäßiger Verfärbung (gealterte Fotos) nicht sehr aussagefähig, aber wenn hier künstlich verfärbte Bilder (sepia operator) vorliegen, dann reicht das aus. Informationsgleichheit ist dann gegeben, wenn ein Bild mit annähernd konstantem Grauwert als Differenzbild heraus kommt. Oder man berechnet das Schwarz-Weiß-Bild mit einem statischen Schwellwert und erhält ein annähernd schwarzes Differenzbild. Was da vorteilhafter ist hängt wohl davon ab, wie man die Auswertung des Differenzbildes implementiert.
function GrayValue(rgb: PRGBTriple): Integer;
begin Result := Round(rgb.rgbtRed * 0.299 + rgb.rgbtgreen * 0.587 + rgb.rgbtblue * 0.114); end; Gute Nacht |
Re: "Verfärbte" Bilder vergleichen.
Zitat:
mfg |
Re: "Verfärbte" Bilder vergleichen.
Hallo marabu,
Die von Dir genannte 'korrekte' Grauwerttransformation findet bei meinem ästhetischen Empfinden keine Zustimmung. Hier hat die Mittelwertbildung für mich die besten Resultate gebracht. Kann aber auch an meiner Brille liegen :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz