mviereck / microscopy-tools

Tools for microscopic captures and focus stackshots (beta)
GNU General Public License v2.0
25 stars 1 forks source link

imfuse: foreground - background (ant) #14

Open holgerd001 opened 3 years ago

holgerd001 commented 3 years ago

Hello, in the last weeks I have taken some stacks of insects. One of the problems I got is that foreground and background objects are not precise separated. As you can see here at this ant. The feeler should be in front of the eye. xD4174364_aligned_C_c16_corr08_g11_order_grayl-star_25pc

This image is done by enfuse. Do you have a suggestion how to get a better result with imfuse?

Greetings Holger

mviereck commented 3 years ago

An impressive ant. :-)

imfuse provides option --less to prefer weak foreground objects. You can also try the more rude --prefertop. Try e.g. imfuse --dog=s0.75 --less Adding --cutblur or --close might help.

holgerd001 commented 3 years ago

I croped the images to get a faster result and tired some options. imfuse --dog=s0.75 --less shows a better result as imfuse --dog=s0.75 --prefertop. And imfuse --dog=s0.75 --less --finalblur makes it better, but not really good. --cutblur ist not as sharp as --finalblur. imfuse dog=s0 75-S1 2_less35_finalblur=p50-s3-S2 66850b_50

mviereck commented 3 years ago

The image above shows the result of imfuse --dog=s0.75 --less --finalblur?

The feeler seems to be basically ok, but still a bit shiny. The bokeh is not really nice, especially left of the feeler. Two attempts:

Three proposals:

imfuse --dog=s0.75 --less --cutsoft --maskblur --finalblur=p60
imfuse --dog=s0.75 --less --cutsoft --maskblur --finalblur=s5
imfuse --dog=s0.75 --less --cutsoft --maskblur --alpha --bg=enfuse
holgerd001 commented 3 years ago

The image above shows the result of imfuse --dog=s0.75 --less --finalblur?

Yes.

I tried your recommendation: imfuse --dog=s0.75 --less --cutsoft --maskblur --finalblur=p60 imfuse dog=s0 75-S1 2_less35_maskblur2_cutsoft4_finalblur=p60-s3-S2 d683a6_30

imfuse --dog=s0.75 --less --cutsoft --maskblur --finalblur=s5 imfuse dog=s0 75-S1 2_less35_maskblur2_cutsoft4_finalblur=p50-s5-S2 1d67ac_30

imfuse --dog=s0.75 --less --cutsoft --maskblur --alpha --bg=enfuse imfuse dog=s0 75-S1 2_less35_maskblur2_cutsoft4_alpha0x100_bg=enfuse 10fa72_30

No one is really good. Perhaps I have to improve the alignment too.

But now the garden is calling :-) I'll be back later.

holgerd001 commented 3 years ago

Now I'm back and have done some experiments with hugin. I used the mask option and set a "do not use area" mask over the feeler in 12 photos of the stack. croped_00_croped_59_new_maskFühler2__stack_ldr_0000_30

Using masks can help, but increase working time.

mviereck commented 3 years ago

Sorry for my late response. Uh, the results from my proposals look even worse. The feeler gets transparent again. I wonder why; maybe an issue with --cutsoft. If you provide me the source images of the crop, I could run some tests myself.

Using masks can help, but increase working time.

How did you create the masks? Painting them by hand is quite difficult, I assume. I even don't know the workflow with hugin; it somehow can use enfuse, but I don't know at all how to stack with hugin.

Recently I did some tests with "stack slabbing". That means, several substacks are created from only a subset of the source images (e.g. 10 substacks with each 10 images from overall 100 source images). The results from the substacks are stacked afterwards. I am not satisfied with the current results, but it is an interesting attempt to get different results.

Script slab Usage: slab IMAGES Change the mask parameters inside the script. (imfuse also has a new option --slab; but the slab script allows more control).

I could easily add a possibility in script slab to create masks from these substacks. One of them should match the feeler.

holgerd001 commented 3 years ago

If you provide me the source images of the crop, I could run some tests myself.

Yes gladly. Where shall I upload them.

How did you create the masks?

I used the build in function in hugin. It's quite simple. A short and not actual description using stacks with hugin you can find here.

Slabbing sounds interesting. As far as I understood it means to split a stack into some substacks and to use different methods (options) for each substack. And then put all single results together.

mviereck commented 3 years ago

Yes gladly. Where shall I upload them.

Over FTP, please. That worked well last time. I've send you a mail with the credentials.

A short and not actual description using stacks with hugin you can find here.

Thank you! Though, a step to manipulate masks is not in the description. Anyway, I'll try out.

Slabbing sounds interesting. As far as I understood it means to split a stack into some substacks and to use different methods (options) for each substack. And then put all single results together.

Currently it means, all substacks are stacked with the same parameters. But fusing the results of the substacks is done with other parameters. Though, in general it would be possible to use different parameters for each substack. Just not yet in the current implementations.

holgerd001 commented 3 years ago

Though, a step to manipulate masks is not in the description.

You can find it here and here. hugin uses vector masks. You don't need to manipulate the automatically generated pixel mask.

Currently it means, all substacks are stacked with the same parameters. But fusing the results of the substacks is done with other parameters.

That's what I tried manually in the past, but without success. I had problems to fit the results of the substacks together. Because the pictures had different sizes.

Perhaps an other way of slabbing can be interesting:

A lot of work =:-)

mviereck commented 3 years ago

I had problems to fit the results of the substacks together. Because the pictures had different sizes.

That sounds like each substack has been aligned on its own?

Perhaps an other way of slabbing can be interesting: create substacks of interesting parts (e.g. eyes, feeler, ...) crop the substacks process the cropped substacks putting the results together like a mosaic (e.g. using enblend/hugin)

The curent slab script is already close to this. :-) Have a look at this:

slab4_ov10_p75_dark85_t_imfuse dog=s2-S3 2_threshold0_bg=imagebcff65_mdbaac8f

There is some unsharp area at the border of the substacks, and an artefact in the eye, and some halo around the feeler. But the approach is interesting, I'll try further. You can also try to change some parameters in the script.

holgerd001 commented 3 years ago

That sounds like each substack has been aligned on its own?

Yes, that's what I've done.

Have a look at this:

Oh, that looks promising.

You can also try to change some parameters in the script.

I started it. Slab needs only the aligned images as input (e.g. slab aligned_C_c16_corr08_g11_m_order_00??.tif)?

I got an error: awk: Kommandozeile:1: BEGIN{printf "%0.0f",} awk: Kommandozeile:1: ^ syntax error awk: Kommandozeile:1: BEGIN{printf "%0.0f",} awk: Kommandozeile:1: ^ Unerwarteter Zeilenumbruch oder Ende der Zeichenkette imfuse note: No mask option specified, generating background only: enfuse

awk: Kommandozeile:1: BEGIN{printf "%0.0f",} awk: Kommandozeile:1: ^ syntax error awk: Kommandozeile:1: BEGIN{printf "%0.0f",} awk: Kommandozeile:1: ^ Unerwarteter Zeilenumbruch oder Ende der Zeichenkette imfuse note: Setting --output=/mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/cache.slab/imfuse.=w_bg=enfuse_md928a5e.tif

mviereck commented 3 years ago

I started it. Slab needs only the aligned images as input (e.g. slab aligned_C_c16_corr08_g11_m_order_00??.tif)?

Yes. Other adjustments can only be done in the script.

I got an error:

Ich suche gerade nach der genauen Ursache. (Just let us speak German ...).

holgerd001 commented 3 years ago

Ich suche gerade nach der genauen Ursache.

Das Ergebnis ist jetzt da, trotz Fehlermeldung. Ich werde mal mit den Parametern experimentieren.

mviereck commented 3 years ago

Ich habe eine Möglichkeit ergänzt, die Anzahl der Bilder pro Slab genau festzulegen. Hier ein Ergebnis mit nur 2 Slabs (commit):

slab_ov_p75_dark75_t_imfuse dog=s2-S3 2_threshold0_bg=imagedd1d8e_md979f25

Die Ergebnisse der einzelnen Slabs (im Original transparent statt schwarz). Den fehlenden Hintergrund füllt enfuse:

slab2 001_imfuse dog=s2-S3 2_close=r3,R3,p0_maskblur2_threshold75_bg=transparent_darkenmask_md6d34fe

slab2 002_imfuse dog=s2-S3 2_close=r3,R3,p0_maskblur2_threshold75_bg=transparent_darkenmask_md593f6c

Ich werde noch die Möglichkeit ergänzen, zu jedem Slab die imfuse-Parameter festzulegen.

mviereck commented 3 years ago

Ich habe gerade ein Update hochgeladen, das die Einstellung von imfuse-Parametern und Threshold pro slab erlaubt. Ich hoffe, die Kommentierung im Script ist verständlich genug.

slab_ov_p_dark_t_imfuse dog=s2-S3 2_threshold0_bg=imagedd1d8e_md5a1a75

Mit etwas Feingefühl in den Parametern wird das Ergebnis sicher noch etwas besser; in der Detailansicht zeigen sich noch ein paar Fehler in der Umgebung von Mund und Nase.

Ein weicher Übergang zwischen den Schnitten wird das nächste Projekt.

mviereck commented 3 years ago

Ein gutes Ergebnis, fast gleich mit dem vorherigen, aber mit weichen Schnittkanten: slab_faeea6 Diese Stellen stören mich noch: slab_faeea6_issues Hierfür fällt mir keine gute automatisierte Lösung ein. Wenn ich den Threshold vom 2. Slab verkleinere, wird der Kopf außenrum nicht sauber ausgeschnitten.

Eine Möglichkeit wäre, einen weiteren Slab gleich dem 2. Slab zu machen, aber mit sehr kleinem Threshold. Die Maske, die unerwünschte Teile wegschneidet, müßte von Hand angepaßt werden. slab_faeea6_darkenmask Alles außerhalb des Kopfes müßte von Hand schwarz gemalt werden, bevor das Skript weitermacht. Dann werden nur die fehlenden weißen Stellen im Inneren des Kopfes vom nächsten Slab ausgefüllt.

Im Augenblick werden alle weißen Bereiche mit dem Ergebnis von enfuse gefüllt. Das ist für den Hintergrund sehr schön, aber im Inneren des Kopfes an den markierten Stellen zu unscharf.

mviereck commented 3 years ago

Du hast mich mal gefragt, warum ich in bash programmiere. Es ist einfach die einzige aktuelle Programmiersprache, die ich gut beherrsche. Vor Jahrzehnten hatte ich mal einen kleinen Einblick in C.

An dieser Stelle wäre es gut, eine GUI für das slabbing zu haben. bash ist da nur bedingt nützlich. Meinem Eindruck nach dürfte Python am ehesten für mich geeignet sein. Für imagemagick gibt es Python-Bibliotheken, das ist auch entgegenkommend. Jedoch ist der Sprung in eine neue Sprache recht groß.

Ich denke an eine GUI, die eine Bilderauswahl für die Slabs ermöglicht, sowie insbesondere einen mit der Maus bedienbaren Maskeneditor. Natürlich auch Parametereingabe für imfuse, Hintergrund etc.

Ich gucke gerade, ob ich ein sehr einfaches Bildbearbeitungsprogramm finde, das ich hierfür anpassen könnte und als Lernhilfe zum Einarbeiten taugt.

holgerd001 commented 3 years ago

Ein gutes Ergenis,

Das finde ich auch. Sieht echt gut aus. Mit der Nutzung der Drehbank (Kreuzsupport) werden die Aufnahmen wesentlich genauer. Das merke ich auch beim alignment. Und anschließend beim fusing. Ich werde die Ameisenfotos noch mal mit dem Kreuzsupport machen.

holgerd001 commented 3 years ago

sowie insbesondere einen mit der Maus bedienbaren Maskeneditor.

Zumindest das kann hugin. Aber Slabs nicht. Z.Z. nutze ich hugin immer häufiger, da auch die CPs in den Bildern angezeigt werden und mit CPFind und align_image_stack zwei Tools vorhanden sind. Was das Eine nicht kann schafft das Andere (aber nicht immer).

holgerd001 commented 3 years ago

Ich hoffe, die Kommentierung im Script ist verständlich genug.

Ja. Mit welchen Parametern hast Du die Bilder hier erzeugt?

holgerd001 commented 3 years ago

Perhaps an other way of slabbing can be interesting: ...

Also was ich sagen wollte ist:

mviereck commented 3 years ago

Mit welchen Parametern hast Du die Bilder hier erzeugt?

Mit den Parametern, die zur Zeit gesetzt sind. Konkret:


    Setting="croped_ant_enfuse"
    case $Setting in
      croped_ant_enfuse)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3"
        Threshold[1]="60"
        Threshold[2]="50"
      ;;

Substacks von Bildausschnitten bilden. Z.B. Fühler über Auge oder Mund-Nase Bereich. diese Bildausschnitte mit geeigneten Parametern verarbeiten. Ergebnisse sind qualitativ gute Bilder von Teilen des gesamten Bildes Zum Schluss dann alle Einzelteile, ähnlich einem Panorama, zusammenfügen.

Ok, verstehe. Wenn ich eine interaktive GUI hinbekomme, könnte ich auch das als Option mit einbauen. Konzeptuell würde es genauso funktionieren wie mit den Threshold-Masken.

holgerd001 commented 3 years ago

Jetzt habe icg mal Setting="bw" ausprobiert und mehrere Fehlermeldungen bekommen:

imfuse: Montage /mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/_slab1/montage-dog-maskblur2-close=r2R2p0.c4a4dd.tif imfuse note: Applying --threshold=80

Ungültige oder ignorierte Fernsteueroption:--File:/mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/_slab1/imfuse.dog=s1-S1.6_close=r2,R2,p0_maskblur=s2_threshold=p80,s2_bg=transparent_darkenmask_md586c81.tif Benutze --remote-help für die gültigen Fernsteueroptionen. imfuse: Saving mask to /mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/mask1.tif Ungültige oder ignorierte Fernsteueroption:--File:/mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/mask1.tif Benutze --remote-help für die gültigen Fernsteueroptionen. imfuse note: Applying --background=transparent

Ungültige oder ignorierte Fernsteueroption:--File:/mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/slab2.001_imfuse.dog=s1-S1.6_close=r2,R2,p0_maskblur=s2_threshold=p80,s2_bg=transparent_darkenmask_md586c81.tif Benutze --remote-help für die gültigen Fernsteueroptionen. imfuse note: Ready after 00:12:38

/mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/slab2.001_imfuse.dog=s1-S1.6_close=r2,R2,p0_maskblur=s2_threshold=p80,s2_bg=transparent_darkenmask_md586c81.tif imfuse note: --slabs: Creating slab 2 / 2

imfuse ERROR: No images specified

Eine Ergebnisdatei wurde aber erstellt.

mviereck commented 3 years ago

Jetzt habe icg mal Setting="bw" ausprobiert und mehrere Fehlermeldungen bekommen:

Das Setting war gar nicht für die Ameise gedacht, sondern für einen ganz anderen Stack (mit mehr Bildern).

Ungültige oder ignorierte Fernsteueroption:--File:/mnt/Daten/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/byrawtherapee/slab/cache.slab/slab2.001_imfuse.dog=s1-S1.6_close=r2,R2,p0_maskblur=s2_threshold=p80,s2_bg=transparent_darkenmask_md586c81.tif Benutze --remote-help für die gültigen Fernsteueroptionen.

Die Fehlermeldung kommt von geeqie, mit dem die Zwischenergebnisse angezeigt werden. Bei mir kommt diese Meldung nicht. Welche Version hast Du?

$ geeqie --version
Geeqie 1.6+git20210227-100bd6ae GTK3
holgerd001 commented 3 years ago

Welche Version hast Du?

Ich habe die 1.3. Für OpenSUSE gibt es auch keine Neuere (laut Link von http://www.geeqie.org/) Solange es nur an Geeqie liegt, kann ich die Meldung ja ignorieren.

holgerd001 commented 3 years ago

Bis auf croped_ant_finalblur sehen die Ergebnisse alle gleich aus. Hätte ich den cache.slab löschen müssen?

mviereck commented 3 years ago

Hätte ich den cache.slab löschen müssen?

Eigentlich nicht

Bis auf croped_ant_finalblur sehen die Ergebnisse alle gleich aus.

Der Hintergrund bei croped_ant_min und croped_ant_mean sollte aber deutlich anders sein!? croped_ant_enfuse_close6 verringert etwas die kleinen Fehler im Mund/Nase-Bereich, ist sonst aber gleich.

Die Ergebnisse mit *_finalblur müßte ich erst nochmal neu berechnen lassen, das waren Experimente, um diue Schnittkanten zu verbessern. Die weichen Schnittkanten erzeugt jetzt Globalthresholdblur=2. (Kann mit Thresholdblur[n]=sigma pro Slab angepaßt werden).

holgerd001 commented 3 years ago

Der Hintergrund bei croped_ant_min und croped_ant_mean sollte aber deutlich anders sein!?

Diese Voreinstellungen habe ich hier nicht. Slab ist vom 08.05.21 06:31 Mit Setting= kann zwischen folgenden Optionen ausgewählt werden: croped_ant_enfuse croped_ant_finalblur croped_ant_enfuse_finalblur bw

mviereck commented 3 years ago

Diese Voreinstellungen habe ich hier nicht.

Oh, ok. Diese experimentellen Einstellungen habe ich zur Zeit:


      croped_ant_enfuse)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3"
        Threshold[1]="60"
        Threshold[2]="50"
      ;;
      croped_ant_min)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3"
        Threshold[1]="60"
        Threshold[2]="50"
        Background="min"
      ;;
      croped_ant_mean)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3"
        Threshold[1]="60"
        Threshold[2]="50"
        Background="mean"
      ;;
      croped_ant_enfuse_close6)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substack[3]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3"
        Substackargs[3]="--dog=s1 --maskblur --close=r6,R6"
        Threshold[1]="60"
        Threshold[2]="50"
        Threshold[3]="50"
      ;;
      croped_ant_enfuse_close10)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substack[3]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3"
        Substackargs[3]="--dog=s1 --maskblur --close=r10,R10"
        Threshold[1]="60"
        Threshold[2]="50"
        Threshold[3]="50"
      ;;
      croped_ant_finalblur)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3 --finalblur=s5"
        Threshold[1]="60"
        Threshold[2]="0"
      ;;
      croped_ant_enfuse_finalblur)
        Substack[1]="1,25"
        Substack[2]="26,*"
        Substackargs[1]="--dog=s1 --maskblur --close=r5,R5"
        Substackargs[2]="--dog=s1 --maskblur --close=r3,R3 --finalblur=s5,p55"
        Threshold[1]="60"
        Threshold[2]="50"
      ;;

croped_ant_enfuse gefällt mir am Besten, gefolgt von croped_ant_min. Die Fehler im Gesicht werden durch croped_ant_enfuse_close10 verbessert, ist aber grottenlangsam.

holgerd001 commented 3 years ago

Diese experimentellen Einstellungen ...

Die habe ich jetzt übernommen. Und werde slab starten, wenn der PC wieder etwas Zeit hat.

mviereck commented 1 year ago

Hier die neueste Ameise, bestehend aus 10 Ebenen/Slabs, gespeichert mit --layered: imfuse wavelet=p10_maskstat=r6,median_maskblur=s2_close=r2,R2,p0_less=p60_slabs10_threshold=p30,s2_bg=enfuse_layered_md6a4aee

Parameter:

--wave --maskstat=r6 --maskblur --close --less --slabs --bg --threshold=p30 --layered

Fehler im Bild:

Jetzt Bearbeitung der Ebenen in gimp. Vorgehensweise:

Das Ergebnis nach der Bearbeitung mit transparentem Hintergrund:

imfuse wavelet=p10_maskstat=r6,median_maskblur=s2_close=r2,R2,p0_less=p60_slabs10_threshold=p30,s2_bg=enfuse_layered_md6a4aee gimp

Das Ergebnis nach der Bearbeitung mit enfuse Hintergrund: imfuse wavelet=p10_maskstat=r6,median_maskblur=s2_close=r2,R2,p0_less=p60_slabs10_threshold=p30,s2_bg=enfuse_layered_md6a4aee gimp-enfuse

mviereck commented 1 year ago

Das im vorherigen Post beschriebene Vorgehen hat sich etwas geändert, die Beschreibung muß ich noch anpassen.

mviereck commented 1 year ago

Mit diesen Parametern ist mir ein schönes Bild der Ameise gelungen, ohne slabs und ohne weitere Bearbeitung:

--wavelet=p5 --denoise=50 --less=p10 --maskblur --maskstat --close=r4,R4 --threshold=10% --bg=enfuse

imfuse _wavelet=p5_maskstat=mean,r6_maskblur=s2_denoise=p50_close=r4R4p0_less=p10_threshold=p10,s2_bg=enfuse_mdd63d3c Dasselbe ohne --bg=enfuse: imfuse _wavelet=p5_maskstat=mean,r6_maskblur=s2_denoise=p50_close=r4R4p0_less=p10_threshold=p10,s2_bg=transparent_md17e845

mviereck commented 1 year ago

Hier die Ameise mit Hilfe von slabs und Nachbearbeitung der Ebenen in gimp, am Ende noch den Rand etwas weichgezeichnet:

--morphology=edgeout,r1 --threshold=t30 --maskblur --maskwave=p25 --less=p20 --layered --slabs

imfuse--morphology=r1,R1,edgeout--maskblur=s2--maskwave=p25--less=p20--slabs=r3,n8--threshold=s0,t30--layered_md657f8c

Der Saum um den Fühler ist fast verschwunden. --mophology=edgeout hat hier sehr geholfen. Ähnlich saumlose Ergebnisse habe ich mit --morphology=tophat.

holgerd001 commented 1 year ago

Mit diesen Parametern ist mir ein schönes Bild der Ameise gelungen, ohne slabs und ohne weitere Bearbeitung:

Das sieht ja hervorrangend aus. So ein Ergebnis habe ich mit Zerene nicht hinbekommen.

Ich versuche mal das hier nachzuvollziehen.

...

Hat nicht geklappt: Unbekannte Option »--denoise=50

Ohne denoise dann das: imfuse ERROR: threshold does not take argument percent

Ich habe die Version 0.8.1-beta.

mviereck commented 1 year ago

Das sieht ja hervorrangend aus.

Danke für die Blumen. :-)

Ich versuche mal das hier nachzuvollziehen.

Ich habe in den letzten Tagen viel an imfuse verändert, ich empfehle ein Update. Die Option --denoise heißt jetzt --maskwave. Die Reihenfolge einiger Optionen macht jetzt auch einen Unterschied,

--maskwave=50% --maskblur --maskstat --close=r4,R4 

ergibt ein anderes Ergebnis als

--maskstat --maskblur --maskwave=50% --close=r4,R4 

Für das gleiche Ergebnis wie oben ändern sich die Optionen zu:

--grayscale=RMS --wavelet=5% --maskstat --maskblur --maskwave=50% --close=r4,R4 --less=10% --threshold=t10,s2 --bg=enfuse

Zu den Veränderungen von imfuse insgesamt:

holgerd001 commented 1 year ago

So, jetzt habe ich es hier auch hinbekommen (imfuse 0.8.2-beta). Wirklich beeindruckend. Hat aber auch fast eine Stunde gedauert (imfuse: Ready after 00:53:14).

Es wir aber zur Zeit wohl nur ein Prozessorkern beansprucht. Ich konnte also ganz normal weiterarbeiten.

mviereck commented 1 year ago

So, jetzt habe ich es hier auch hinbekommen (imfuse 0.8.2-beta). Wirklich beeindruckend.

Sehr schön!

Hat aber auch fast eine Stunde gedauert (imfuse: Ready after 00:53:14). Es wir aber zur Zeit wohl nur ein Prozessorkern beansprucht. Ich konnte also ganz normal weiterarbeiten.

Eigentlich sollte ImageMagick die meiste Zeit alle Kerne nutzen. Bei mir tut es das bei den meisten Operationen. Hast Du die selbe Version wie ich? Also den "static build", das magick, die Nummer 1 in der Liste von https://imagemagick.org/script/download.php ?

$ magick -version
Version: ImageMagick 7.1.0-51 Q16-HDRI x86_64 1cf41df5d:20221013 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5) 
Delegates (built-in): bzlib djvu fontconfig freetype jbig jng jpeg lcms lqr lzma openexr png raqm tiff webp x xml zlib
Compiler: gcc (7.5)

Ein wichtiges Detail in der Versionsausgabe ist OpenMP, das ImageMagick erlaubt, mehrere Kerne zu nutzen. Bei mir dauert die Berechnung nur noch ca. 15 Minuten. Die Festplatte macht auch einen Unterschied, SSD ist klar im Vorteil.

holgerd001 commented 1 year ago

Das hatten wir ja schon mal. Bei mir (Opensuse) werkelt eine andere Version:

Version: ImageMagick 7.1.0-9 Q16-HDRI x86_64 2021-10-03 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules 
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png raw rsvg tiff webp wmf x xml zlib
Compiler: gcc (7.5)

Jetzt habe ich mal das AppImage heruntergeladen und verwendet.

holger@localhost:~/bin> imfuse_0.8.2-beta_HD.sh --grayscale=RMS --wavelet=5% --maskstat --maskblur --maskwave=50% --close=r4,R4 --less=10% --threshold=t10,s2 --bg=enfuse /home/holger/Fotos/stacks/20210417_Ameise3_4_Mikroskopobjektiv_nonplan/D4174*.JPG
...
imfuse: Ready after 00:38:22
...

Schon deutlich schneller.

mviereck commented 1 year ago

Schon deutlich schneller.

Ich habe eigentlich noch mehr Geschwindigkeitsgewinn durch OpenMP erwartet. Wie viele Kerne hast Du? Bei mir sind es 4, virtuell 8. Schreibt imfuse bzw. ImageMagick viel auf die Festplatte? Wenn es keine SSD ist, macht das einen großen Unterschied. Falls im Ordner ./cache.imfuse.* Dateien mit magick und einer langen Nummer auftauchen, schreibt ImageMagick einen Teil seiner Daten in den Cache. Das kann passieren, wenn der Arbeitsspeicher knapp wird oder ein Arbeitsspeicher-Limit für ImageMagick in einer Konfigurationsdatei festgelegt ist.

mviereck commented 1 year ago

Es könnte auch sein, daß enfuse für das Hintergrundbild sehr lange dauert, insbesondere, wenn der RAM knapp wird und imfuse die Bilder erst in Teile aufsplitten muß. Ich habe eben ein Update 0.8.3 hochgeladen, daß den Speicherbedarf der Bilder geringer einschätzt. Außerdem wird die benötigte Zeit für enfuse angezeigt. Die Option --close hat einen neuen Namen --maskmorph und erlaubt jetzt noch ein paar Operationen mehr. Für die Ameise ändern sich die Optionen also zu:

--grayscale=RMS --wavelet=5% --maskstat --maskblur --maskwave=50% --maskmorph=r4,R4 --less=10% --threshold=t10,s2 --bg=enfuse

Ohne --grayscale=RMS wird das Ergebnis ein klein wenig besser, die Berechnung dauert aber auch länger.

holgerd001 commented 1 year ago

Es könnte auch sein, daß enfuse für das Hintergrundbild sehr lange dauert, insbesondere, wenn der RAM knapp wird und imfuse die Bilder erst in Teile aufsplitten muß.

Ne, das wird's nicht sein. Ich habe jetzt 32GB Speicher und einen i5-11600 mit 12 Kernen (ich glaube, es sind aber nur 6 echte Kerne) und einer SSD.

Wenn VirtualBox (Windows) hier fertig ist, werde ich noch mal einen Versuch starten.

mviereck commented 1 year ago

Ok, dann bist noch ein Stück weit besser ausgestattet als ich. Hier auch 32 GB RAM, und ein i7 mit 4 Kernen und weniger MHz. Oder hast Du die ganze Ameise berechnen lassen, nicht nur den hier gezeigten Ausschnitt? Dann könnte das mit der Zeit wieder passen.

Neues Update zu imfuse 0.8.5. Wesentliche Neuigkeiten:

Ich präsentiere stolz eine Ameise mit --cutwave:

--wavelet=p5 --darkness=w25  --maskwave=p20 --maskblur=s2 --cutless=p12 --cutwave=100%

imfuse--wavelet=w75,p5--darkness=w25,level=no,HSL,2--maskwave=p20--maskblur=s2--level=all--cutless=p12--cutwave=p100_mde11e93

Wenn ich jetzt noch den Saum um den Fühler weiter reduzieren kann, ist das Bild nahezu perfekt. Der Saum wird im Moment vor allem durch --cutless ins Bild geholt; aber ohne --cutless ist der Fühler durchsichtig.

holgerd001 commented 1 year ago

Ich präsentiere stolz eine Ameise mit --cutwave:

Sieht echt super aus.

--wavelet=p5 --darkness=w25 --maskwave=p20 --maskblur=s2 --cutless=p12 --cutwave=100%

Das habe ich hier auch mal versucht. Aber eine Fehlermeldung bekommen:

imfuse: Evaluating 60 / 60: mpr:mergemask-wavelet-darkness-maskwavep20-maskblurs2.59950b.0060
/home/holger/bin/imfuse_0.8.5-beta.sh: Zeile 516: bc: Kommando nicht gefunden.

imfuse ERROR: traperror(): Command at Line 516 returned with error code 127:
  bc -l
  1640 - ::compare::level_masks::focus_merge_masks::focus_main::main::main

imfuse: Received SIGINT

Was ist bc?

Oder hast Du die ganze Ameise berechnen lassen,

Ja, die ganze.

mviereck commented 1 year ago

Was ist bc?

bc ist ein Taschenrechner für die Kommandozeile, und auf den meisten Systemen vorinstalliert. imfuse benutzt es nur vereinzelt, ich muß wohl eher auf awk als Rechner ausweichen, um nicht von bc abhängig zu sein. Für's erste könntest Du bc einfach aus der Paketverwaltung installieren.

Ein bißchen konnte ich den Saum noch reduzieren, --cutmorph=erode schneidet Säume ab:

--wavelet=p5 --darkness=w25  --maskwave=p20 --maskblur=s2 --cutless=p10 --cutwave=100% --cutmorph=erode,r2,r2 --finalblur=t30,s5

imfuse--wavelet=w75,p5--cmd=w25,C=HSL,c2,neg,level=no--maskwave=p20--maskblur=s2--level=all--cutless=p10--cutwave=p100--cutmorph=r2,R2,erode,Octagon--finalblur=s5,S2,t30_md244816

holgerd001 commented 1 year ago

Jetzt hat's geklappt (mit bc).

imfuse: Ready after 01:05:45

Tolles Ergebnis!

mviereck commented 1 year ago

Tolles Ergebnis!

:-)

Ich habe mir auch mal die Fliege vorgenommen. Mit denselben Parametern wie für die Ameise gab es bereits ein gutes Ergebnis. Mit ein wenig Herumprobieren an den Parametern konnte ich das noch ein bißchen steigern:

--wavelet=p5 --darkness=w40  --maskwave=p2 --maskblur=s2 --cutless=p14 --cutwave=100% --cutmorph=r1 --finalblur=t38,s9

imfuse--wavelet=w60,p5--cmd=w40,C=HSL,c2,neg,level=no--maskwave=p2--maskblur=s2--level=all--cutless=p14--cutwave=p100--cutmorph=r1,R1,Erode,Octagon--finalblur=s9,S2,t38_md3c00f2

Rechenzeit ca. 30 Minuten.

P.S: bc wird jetzt nicht mehr gebraucht. Die Option --cache gibt es inzwischen wieder, und mit einer SSD Festplatte ist sie fast genauso schnell wie Berechnung nur im RAM. Bei zukünftigen Fehlern, oder falls Du Parameter ändern willst, ist --cache sehr nützlich, um spätere Arbeitszeiten abzukürzen. Der Cache wird nur schnell unglaublich groß, weil imagemagick direkt unkomprimierte Speicherkopien auf die Platte schreibt, die es ohne Rechenaufwand direkt wieder laden kann. Vorhin habe ich einen Cache der Größe 210GB gelöscht.

holgerd001 commented 1 year ago

Wg der Fliege ziehe ich mal um zu Finding good parameters: fly on yellow background

BTW: Ich habe mich mal mit Helicon an die Ameise gemacht. Auch hier wird der kritische Bereich (Fühler vor Auge) nicht korrekt dargestellt. Imfuse ist hier das einizge Tool, dass das kann.

mviereck commented 1 year ago

Wg der Fliege ziehe ich mal um

Dieser Thread ist ja auch schon zu einer ziemlich langen Ameisenstraße geworden.

BTW: Ich habe mich mal mit Helicon an die Ameise gemacht. Auch hier wird der kritische Bereich (Fühler vor Auge) nicht korrekt dargestellt. Imfuse ist hier das einizge Tool, dass das kann.

:-D Ich habe eben Zerene noch mal ausprobiert, das kann das nur mit Slabbing/Substacks und viieel manueller Nacharbeit. Neu ist stacky, das kann das aber auch nicht, soweit ich bisher sehe: https://www.bewie.de/stacky.php

mviereck commented 1 year ago

Noch eine Ameise: --wave=p100 --cutwave=p100 Das Ergebnis sieht dem von enfuse sehr ähnlich. Schön ist, daß der Aufruf aus nur zwei einfachen Optionen besteht. imfuse_wave=p100_cwave=p100_md217e5f

--cutless, um den Fühler zu verstärken, ist etwas tricky, da bin ich noch am probieren, wie sich ein gutes Ergebnis erreichen läßt. Ohne zusätzliche Optionen wird das leider nichts.