Digitale Bildbearbeitung - Flatfield-Korrektur und Kontrastierung

Begonnen von Michael Müller, Mai 13, 2025, 16:02:59 NACHMITTAGS

Vorheriges Thema - Nächstes Thema

Michael Müller

Hallo,

ich habe das ImageJ-Macro zur Flatfield-Korrektur nochmals etwas überarbeitet. Abgesehen von einigen kosmetischen Verbesserungen wird jetzt sowohl bei der "Divisions-" als auch bei der "Subtraktion-Methode" die mittlere Helligkeit des Ausgangsbildes berücksichtigt. Damit entfallen die etwas willkürlich gewählten "128-Werte" und das Endbild sollte dann (annähernd) dieselbe Helligkeit wie das Ausgangsbild besitzen. Das geänderte Macro kann jetzt direkt heruntergeladen und in dem "plugins"-Verzeichnis von ImageJ gespeichert werden:

https://gastrotricha.science/technik/digitalenachbearbeitung/Flatfield_Correction.ijm

#@ ImagePlus ImageName (label="Raw Image", description="The image to correct")
#@ ImagePlus Flatfield (label="Flatfield Image", description="The flatfield image")
#@ Boolean Subtract  (description="Use subtract-methode; false-> use divide methode")
#@ Boolean EnhanceContrast (label="Enhance Contrast", description="Enhance contrast by stretching the histogram")

//Flatfieldkorrektur mit Einheitsbild
run("Set Measurements...", "  mean redirect=None decimal=3");
run("Select None");
run("Measure");
dMean = getResult("Mean");
selectWindow("Results");
run("Close");

selectImage(ImageName);
ImName=getTitle();
selectImage(Flatfield);
FlatName=getTitle();

if (Subtract)
run("Calculator Plus", "i1=" + ImName + " i2=" + FlatName + " operation=[Subtract: i2 = (i1-i2) x k1 + k2] k1=1 k2=" + dMean +" create");
else
run("Calculator Plus", "i1=" + ImName + " i2=" + FlatName + " operation=[Divide: i2 = (i1/i2) x k1 + k2] k1=" + dMean +" k2=0 create");
if (EnhanceContrast) run("Enhance Contrast");
run("Rename...", "title=" + ImName + "_FF");

Viel Erfolg damit.

Michael
Gerne per Du

Peter V.

#76
Hallo Michael,

Du benutzt offenbar ein anderes BS als Windows. Ich bin mit Fiji und I.J unerfahren, würde aber auch gerne einmal hier die FF-Korrektur ausprobieren.
Kann mir ein Win-User sagen, wie ich das Makro in Windows installiere?
Bei mir liegen Fiji oder ImageJ jeweils komplett in einem Ordner auf dem Desktop.  In den jeweiligen Ordnern gibt es die Unterordner "macros" und "plugins", wobei der Plugin-Ordner wiederum einen Unterordner "Macros" enthält. (siehe Bild)
Ich habe das Makro in eine Textdatei übernommen (mit Wodpad) und so benannt wie von Dir vorgegeben. Diese Datei habe ich sowowhl in "plugins" als auch später bei weiteren Versuchen jeweils nur in die Ordner "Macros oder "macros" gelegt, aber beim Neustrat erscheint das Makro für die FF- Korrektur nicht.
Was mache ich falsch?

Herzliche Grüße
Peter

Dieses Posting ist frei von kultureller Aneigung, vegan und wurde CO2-frei erstellt. Für 100 Posts lasse ich ein Gänseblümchen in Ecuador pflanzen.

Michael Müller

Hallo Peter,

der Ordner "plugins" ist der richtige. Wenn das Makro nach einem Neustart von ImageJ nicht im Menü "Plugins" erscheint, ist die Endung des Dateinamens falsch. Windows hängt gerne "heimlich" ein ".txt" an Textdateien ran. Dann erkennt ImageJ die Datei nicht als Makro. Dazu muss die Dateiendung ".ijm" sein (= Image J Makro).

Am einfachsten klickst Du auf den Link in meinem vorherigen Beitrag und wählst als Speicherort den "plugins"-Order.

Viel Erfolg

Michael
Gerne per Du


Peter V.

Hallo Rudolf,

habs schon - und es funktioniert.

Herzliche Grüße
Peter
Dieses Posting ist frei von kultureller Aneigung, vegan und wurde CO2-frei erstellt. Für 100 Posts lasse ich ein Gänseblümchen in Ecuador pflanzen.

M59

Hallo Michael,

bie den 16 Bit Tiffs bin ich etwas weiter gekommen.
Der imagecalculatorplus funktioniert nur im RGB Farbraum. Deshalb muss man mit Shift-f die Datei erst in ein RGB überführen. Im Makroslang heisst das dann: run("Flatten");.

Dennoch je nach Bild ist das Ergebnis (bei mir) unbefriedigend. Zu hell, zu dunkel, farbiger Hintergrund. Ich werde mir das noch genauer ansehen, da ich Interesse habe die Korrektur in ImageJ zu machen. Aber ich nehme an, dass ein einziger (Mittel)-wert zur Korrektur nicht immer ausreicht.

(ganz am Rande sei bemerkt, dass ChatGPT zum Code schreiben sehr hilfreich ist...)

Grüße, Michael/M59

M59

Hallo,
Ich habe  ausgehend von 16 bit Tiffs nach längerem probieren keine Lösung in ImageJ finden können, die mir einen gleichmäßigen Hintergrund erzeugt. Wenn es nur um die Vignettierung geht, die man oft im fotografierten Bild stärker sieht als man sie am Mikroskop wahrnimmt dann habe ich  noch einen O.T. Tipp. Vielleicht gibt es diese einfache Funktion ja in der Software anderer Hersteller auch?

O.T.: Für Nikon user habe ich ja schon mehrmals auf das recht einfach zu bedienende kostenlose Programm Nikon NX Studio hingewiesen. Dort gibt es eine Option 'Vignettierungskorrektur'. Damit kann man die dunklen Bereich in den Rawfiles die 'dunklen' Ecken aufhellen. Mit sogenannten Farbkontrollpunkten kann man noch für ausgewählte Bildbereiche nachhelfen (Helligkeit, Kontrast, Farbton). Man sieht die Änderungen direkt im Bild. Sofern man einen Stapel an 'gleichen' Aufnahmen hat kann man die gewählten Einstellungen von einem Bild einfach auf eine große Anzahl anderer Bilder übertragen.

Grüße,

Michael/M59

derDunkle

Hallo Michael,

ich habe Dein Macro in Fiji ausprobiert und bin leider über den Fehler <Statement cannot begin with '#' in line...> gestolpert. Scheinbar wurde hier die Syntax geändert. Mit ein wenig Hilfe von Tante Google und dem Macro-Editor hat es nach folgender Änderung geklappt.

// #@ ImagePlus ImageName = getString(label="Raw Image", description="The image to correct")
// #@ ImagePlus Flatfield (label="Flatfield Image", description="The flatfield image")
// #@ Boolean Subtract  (description="Use subtract-methode; false-> use divide methode")
// #@ Boolean EnhanceContrast (label="Enhance Contrast", description="Enhance contrast by stretching the histogram")

Es kommt hier auf die // an.

Danke  :)  und
einen schönen Sonntag,
andreas

viel Grüße aus Berlin,
Andreas

Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.
Antoine de Saint-Exupéry

Michael Müller

Hallo Andreas,

die von Dir gezeigte Syntax wird - soviel ich weiß - nur aus historischen Gründen unterstützt. Meinen Informationen nach ist die #@-Schreibweise die aktuelle. Verwendest Du da eine ältere Version?

Aber ist ja egal - schön, dass Du da eine Lösung für Dich gefunden hast.

Noch ein schönes Wochenende

Michael
Gerne per Du

derDunkle

Hallo Michael,

ich hatte extra noch aktualisiert. Fiji sagt, dass es die Version ImageJ 1.54p verwendet, die laut release notes vom 17. Februar 2025 und wohl auch die letzte Version ist.

Aber es läuft :)

einen schönen verregneten Sonntag,
andreas
viel Grüße aus Berlin,
Andreas

Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.
Antoine de Saint-Exupéry

Michael Müller

Hallo Andreas,

mein ImageJ hat die Version 1.53t - ist also einen Tick älter...

... bin ich froh, dass ich mein Geld nicht mehr mit meinen Programmierkünsten verdienen muss ...

Danke für den Workaround

Michael
Gerne per Du

derDunkle

Hallo Michael,

gern geschehen, ich verdiene mein Geld nun schon seit gut einem viertel Jahrhundert damit 8),

wau, wie die Zeit vergeht . . .

 
viel Grüße aus Berlin,
Andreas

Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.
Antoine de Saint-Exupéry