Bitmaps als Maske in Skripten?

Kurtchen

Mitglied
Dabei seit
01.04.04
Beiträge
44
#1
Hallo,
an die Skript-Experten:
Die Bilder meiner Kamera weisen leider bei bestimmten Brennweiten und Blendeneinstellungen Vignettierung auf. Diese ist jedoch nicht exakt mittig, so dass die Vignettierungs-Funktion nicht ausreicht. Je nach Blende/Brennweite ist die Vignettierung unterschiedlich stark ausgeprägt.
Ich habe mir eine Bitmap erstellt, um die Vignettierung durch Änderung der Helligkeit mit dieser Bitmap-Maske auszugleichen.
Das funktioniert sehr gut, ist aber etwas aufwändig, wenn viele Bilder zu bearbeiten sind.
Gibt es eine Möglichkeit, das mit einem Skript zu automatisieren?
Ich denke da einen Helligkeitsausgleich abhängig von der Brennweite und der Blende.

Gruß

Kurtchen
 
Dabei seit
02.12.02
Beiträge
1.546
Standort
Lübeck
#2
Im Prinzip ja.

Das Problem liegt jedoch darin, daß bei von Blende und Brennweite abhängige ungleichmäßige und nicht zentrische Vignettierung erfordern würde, praktisch Bild für Bild eine regelbare Anpassung der Zentrumslage, Aufhellfaktor und Verlaufsanstieg zu ermöglichen. Von nichtsymmetrischer Vignettierung ganz zu schweigen.
Der dafür erforderliche Programmaufwand stünde in keinem Verhältnis zum Nutzen, meines Wissens ist eine Funktionalität dieser Art bisher auch nicht angefragt worden. Für eine Einzelproduktion dieses Umfangs wird sich aber wegen mangelnden Bedarfs wahrscheinlich kein Scripter finden.

Stell doch mal ein paar typische Bilder hier ins Forum, möglicherweise kann Dir anders geholfen werden, z.B über Maskierung, Helligkeitsverlauf usw., für die dann bei erkennbaren Regelmäßigkeiten ein paar hilfreiche Macros erstellt werden könnten.
Einen Versuch ist es wert, es gibt eine Menge Pfiffikusse hier, die nur darauf warten, sich an Härtefällen die Zähne zu wetzen.

Gruß Jochen
 

Kurtchen

Mitglied
Dabei seit
01.04.04
Beiträge
44
#3
Noch mal zur Veranschaulichung:
Ich habe eine weiße Fläche fotografiert und dadurch eine Bitmap, die die Vignettierungeffekte der Optik enthält. Negativ, Kontrast erhöhen -> Ausgleichsbild für vignettierte Bilder.
Um ein Bild zu korrigieren, brauche ich nur dieses Ausgleichsbild als Maske einlesen und die Helligkeit ändern. Der Wert der Änderung ist von Blende/Brennweite abhängig.
Bei einzelnen Bildern funktioniert das prima.
Jetzt bräuchte ich nur die Möglichkeit, im Skript das Ausgleichsbild als Maske zu verwenden. Der Rest des Skriptes ist kein Problem.

Gruß

Kurtchen
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.050
Standort
Anzing BY
#4
Hallo Kurtchen,

dauert zu lange, da Maske geladen, jedes Pixel ausgelesen und in Array gespeichert werden muss. Dann Originalbild laden. Maskierung pixelabhängig erstellen und Helligkeit manipulieren, ODER Pixel auslesen, Werte addieren, Pixel schreiben (zeitlich etwa gleich lang, Maskierung wahrscheinlich länger, meiner Erfahrungen nach).

Alternative:
Du ermittelst den Versatz der Vignettierung, erweiterst das Bild um den Versatz an den richtigen Stellen, führst mit FF_Vignette(VT_R8 radius, VT_R8 saturation) die Vignettierung durch und schneidest anschließend die angefügten Stellen wieder ab. Ergebnis sollte wesentlich schneller als die Pixelfuxerei sein. Die Werte kansst Du ja über Dialog ermitteln.


Schönen Gruß,

Werner.
 

Kurtchen

Mitglied
Dabei seit
01.04.04
Beiträge
44
#5
Danke für den Tipp, hört sich ganz gut an.
Werde ich mal bei Gelegenheit testen.

Kurtchen
 

JKS

FF-Team
Dabei seit
06.06.02
Beiträge
6.671
#6
Ich werde die Tage eine entsprechende Funktion einbauen, da diese Art der Korrektur nicht nur bei Vignettierung hilfreich sein kann.
 

JKS

FF-Team
Dabei seit
06.06.02
Beiträge
6.671
#8
V2.76 B50: VT_BOOL FF_LoadMaskImage(VT_BSTR maskfilename). Nur 8-Bit Graustufenbilder möglich.

Beispiel zur maskierten Helligkeitsänderung:
Code:
FF_LoadMaskImage("maske.bmp");
FF_WhiteBalance(-100,-100,-100);
FF_Reload();
 

Kurtchen

Mitglied
Dabei seit
01.04.04
Beiträge
44
#9
Das ist genau das, was ich gesucht habe. (soweit ich das bis jetzt erkennen kann)

Weiter so! Noch niemals habe ich solch einen guten Service bei Software erlebt. Danke :D

Andreas
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.050
Standort
Anzing BY
#10
Hallo,

das erinnert mich an einen alt gehegten Wunsch. Vielleicht wird er ja nun Wirklichkeit?

FF_InsertImage(variant File, signed long x, signed long y, signed long MaskColor, Byte Transparent)
FF_InsertImageEx(variant File, signed long x, signed long y, signed long width, signed long height, signed long MaskColor, Byte Transparent)


wobei File auch ein Bild auf dem Stack sein kann, nach bekannten Konventionen.

Was könnte man damit machen?
  • Logos einblenden
  • Bilder montieren
  • Schrifteffekte generieren und einfügen (keine Erwartungen bitte)
  • evtl. mit Skalierung?

Schönen Gruß,

Werner.
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.050
Standort
Anzing BY
#11
Dumme Frage vielleicht,

aber wie erstellt man mit FixFoto 8-Bit Bilder? Ob Graustufen oder nicht, es wird immer mit 24-Bit gespeichert.

Schönen Gruß,

Werner.
 

W.P.

Mitglied
Dabei seit
16.10.02
Beiträge
5.050
Standort
Anzing BY
#13
Hallo Andreas,

schön und gut, ich nehme Picture Publisher. Aber das ist nicht der Punkt.

Punkt ist, dass in FF Dateiformate für Funktionen eingelesen werden, z. B. BMP mit Maskenkanal, Graustufen-Bitmaps, diese aber nicht erzeugt werden können. Hier bedarf es Abhilfe. Jedes Programm sollte sich selbst versorgen können.

Schönen Gruß,

Werner.
 

Kurtchen

Mitglied
Dabei seit
01.04.04
Beiträge
44
#14
Hallo Werner,

es ist doch alles noch im Beta-Stadium. Bis zum nächsten Release ist das bestimmt entsprechend umgebaut ::)

Gruß Andreas
 

JKS

FF-Team
Dabei seit
06.06.02
Beiträge
6.671
#15
V2.76 B54: FF_LoadMaskImage konvertiert selbst nach 8-Bit.
 
Oben