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)