AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Theorie: Transparenz errechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Theorie: Transparenz errechnen

Ein Thema von Prototypjack · begonnen am 23. Apr 2008 · letzter Beitrag vom 27. Apr 2008
Antwort Antwort
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#1

Theorie: Transparenz errechnen

  Alt 23. Apr 2008, 14:06
Moin,

Ich hatte letztens eine Diskussion über Grafik, mit dem Thema Transparenz im speziellen.
Es ging darum, ob man aus einem bzw. mehrerer Bilder die Transparenz rück-errechnen kann. Ich bin überzeugt davon, dass das möglich ist und will mir einen Beweis basteln. Jedoch habe ich nur eine vage Vorstellung von dem, was ich tun will:

Die Theorie:
Ich habe ein halbtransparentes Logo auf einer Fläche in einer Bitmap. Dieses Logo habe ich in 2 (oder auch 3, falls man es in grau auch braucht) Ausführungen, jeweils mit schwarzem und weißem Hintergrund.
Mit dieser Vorgabe müsste ich doch theoretisch die Transparenz der einzelnen Bildpunkte errechnen können, um sie dann in einem Format, welches Transparenz unterstützt, auszugeben (wahlweise PNG).

Bitte sagt mir, falls ich hier komplett auf den Holzweg bin. Ansonsten: Wie geht man an so ein Problem heran? Ich stehe irgendwie auf dem Schlauch was das "zu Papier bringen" des Codes angeht.

Danke & Grüße,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Theorie: Transparenz errechnen

  Alt 23. Apr 2008, 14:13
Interessante Sache, diese Idee habe ich auch schons eit längerem. Es gibt ein Gimp-Plugin, das das kann, da müsste sich der Source ja eigentlich finden lassen. Allerdings ist mir leider der Name entfallen. Ich bin auch wirklich kein passionierter Gimp-Nutzer.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Theorie: Transparenz errechnen

  Alt 23. Apr 2008, 18:03
Das funktioniert mit deinem Ausgangsmaterial höchstens näherungsweise, und auch nur mit größerem Aufwand. Schau, du errechnest Transparenz folgendermaßen:

c* = a*c1 + (1-a)*c2

a = Alpha
c1 = Farbe des Logos an einem Pixel
c2 = Farbe des Hintergrunde an einem Pixel
c* = Neue Farbe

Du bildest also aus 3 definierten Informationen eine 4. Nun möchtest du diese Formel aber quasi nach a umstellen, kennst aber selber nur c1 und c*, wodurch c2 als zweite Unbekannte zusätzlich zum a verbleibt. Du willst quasi aus 2 Informationen 2 weitere Berechnen, wobei zu deren Entstehung aus 3 eine Information erstellt wurde.
Auch die Tatsache, dass es um 3 Farbanteile (RGB) geht hilft dir nicht weiter. Man kommt mit vieeel Umformerei zwar so weit, dass man 2 der c2-Anteile durch die jeweils dritte ausdrücken kann, aber da diese weiterhin unbekannt bleibt ist das maximal ein Weg, mit dem du bestimmen kannst, in welchem Intervall die Anteile von c2 vorkommen können, da du die Grenzen (0..255) kennst.
Und das ist auch so weit wie man kommt, wenn der Hintergrund beliebig ist. Wenn der Hintergrund garantiert einfarbig, am besten noch grau ist, wird es möglich, da man aus einer nicht bedeckten Stelle den gesamten Hintergrund bestimmen kann.

Evtl. zur Verdeutlichung: Du kannst einen 50% roten Pixel im Zielbild (c*) auf unterschiedliche Weise erhalten. Angenommen dein Logo ist an der Stelle komplett Schwarz:
1) Hintergrund ist 100% Rot und Alpha 0,5
2) Hintergrund ist 50% Rot und Alpha 0,0
3) Alles dazwischen
Du weisst also nur, dass sich Alpha irgendwo zwischen 0 und 0,5 befinden muss, und das Hintergrundbild an diesem Pixel Mittel- bis Vollrot ist, und dass diese antiproportional zueinander sind. Ohne nun den Originalhintergrund exakt zu kennen, kannst du Alpha niemals genau bestimmen. Was allerdings geht ist, dass man die selbe Intervallbildung für Grün und Blau auch noch macht, und der Schnitt der 3 Intervalle eine engere Näherung ergibt, welche dann auch die best mögliche ist. (Das geht aber auch nur, wenn die Transparenz einfarbig ist (Alpha fur r, g und b das selbe). Sobald man auch noch farbige Transparenzen zulässt, ist selbst diese Eingrenzug dahin.)

Ein Extremfall: Dein Logo ist an einer stelle 100% Blau, das Zielbild (c*) auch. Jetzt kann Alpha 0-1 sein, und der Hintergrund 0%-100% Blau (zwar antiproportional, aber das hilft uns allein leider nicht aufs Pferd).


Wenn man den Mensch noch als verarbeitendes Element dazu nimmt, kann man noch ein wenig weiter spinnen:
Aus den berechneten Intervallen nimmst du für die Werte des Originalhintergrundes und für die Alphas je X Prozent, und machst für diese 2 Werte je einen Slider, und zeigst das Bild mit den sich ergebenen Werten für den Originalhintergrund an. Der Mensch kann nun die 2 Slider so einstellen, dass nach seinem Ermessen, der Originalhintergrund am besten wiederhergestellt ist. Wie gut das geht hängt ganz vom Hintergrund ab, und eine exakte Lösung gibt das auch nicht her, aber zumindest weisst du dann noch genauer, wie viel Prozent du von den ermittelten Intervallen nehmen musst um von einer mathematisch best möglichen, zu einer subjektiv optimierten Lösung zu kommen.

Dass du das Logo mit wahlweise schwarzem und weissem Rand vorliegen hast, hilft maximal so viel weiter, als dass du aus der Differenz der beiden zumindest schon mal die Stellen mit Alpha=0 ermitteln kannst. Mehr allerdings nicht.


Fazit: Mit viel Aufand kommt man zu einer guten Näherung, aber exakt und dann auch sehr einfach geht es nur, wenn du auch den Hintergrund im Original vorliegen hast.

Edit: Achso! Damit ist allerdings auch noch eine Sache gänzlich ungeklärt: Wo auf dem Bild liegt das Logo eigentlich? Die Positionierung müsste also zuvor auch noch ein Mensch machen, und zwar pixelgenau!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

Re: Theorie: Transparenz errechnen

  Alt 23. Apr 2008, 18:52
Zitat von Medium:
sehr einfach geht es nur, wenn du auch den Hintergrund im Original vorliegen hast.
Also, ich hab das so verstanden, das der Hintergrund des Logo entweder komplett schwarz oder komplett weiß ist.
Wenn beide Versionen vorliegen kann man sogar die von dir genannten Unsicherheiten (0-100% Durchsichtig) bei schwarz und weiß ausschalten.

MfG,
LivingUndead
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Theorie: Transparenz errechnen

  Alt 23. Apr 2008, 19:16
Wenn das wirklich so gemeint war, dass das Logo halbtransparent auf einem homogenen weissen und schwarzen Hintergrund vorliegt, dann wirds ja fast schon langweilig. Da dann jeder Pixel um den gleichen Betrag aufegellt bzw. abgedunkelt wurde, führt das jeweilige arithmetische Mittel zum nicht-transparenten Logo, und dann kann man einfach per Subtraktion von einem der Bilder die Maske herausfinden. Als einzige Unsicherheit bleiben hier die Grenzen 0..255. Eine weisse Fläche im Logo wird auf dem weissen Bild nicht weisser, auf dem schwarzen aber dunkler. Somit ergibt sich durch dieses Clipping ein zu kleiner Alphawert. Bzw. ist das schlimme daran, dass ein bereits sehr helles Weiss ganz weiss würde, und somit nicht mehr von ähnlichen Helligkeiten unterscheidbar wird, da alle bei 255 abgeschnitten werden. Analog dazu Schwarz im dunklen Bild.
Voraussetzung ist zudem noch, dass bei beiden Varianten die selbe Alphamaske benutzt wurde, sonst erhält man einen 50% Mix der 2 Ursprungsmasken.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Theorie: Transparenz errechnen

  Alt 27. Apr 2008, 11:57
Zitat von Medium:
Wenn das wirklich so gemeint war, dass das Logo halbtransparent auf einem homogenen weissen und schwarzen Hintergrund vorliegt, dann wirds ja fast schon langweilig.
Ja, genau so war das gemeint. Doch ich komme trotzdem nicht dahinter wie ich das (in der Theorie) anstelle, irgendwie stehe ich da auf dem Schlauch.

Grüße,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Theorie: Transparenz errechnen

  Alt 27. Apr 2008, 12:28
ist doch eigentlich ganz einfach. Schwarz ist der Wert 0, Weiß ist pro Farbwert (rgb) der Wert 255.

wenn du jetzt auf dem schwarzen Hintergrund ein Pixel mit einem Farbwert von 25 hast und die Transparenzt ist 50/50 (also 50%) dann ist das original 50.

Denn; (50 + 0) / 2 = 25
Demzufolge: 25 * 2 = 50
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:16 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