Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

imfuse: foreground - background (ant) #14

Open
holgerd001 opened this issue Apr 26, 2021 · 54 comments
Open

imfuse: foreground - background (ant) #14

holgerd001 opened this issue Apr 26, 2021 · 54 comments

Comments

@holgerd001
Copy link

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
Copy link
Owner

mviereck commented Apr 26, 2021

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
Copy link
Author

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
Copy link
Owner

mviereck commented Apr 27, 2021

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:

  • Greater percent for --finalblur for better bokeh: imfuse --dog=s0.75 --less --finalblur=p60. Or maybe you need a stronger sigma with --finalblur=s5.
    • If you run with --threshold=60 you see the areas affected by --finalblur=p60
  • Add --cutsoft instead of --cutblur to make feeler less shiny: imfuse --dog=s0.75 --less --finalblur=p60 --cutsoft
  • Maybe also add --maskblur to increase contrast.
  • Try --alpha --bg=enfuse instead of --finalblur.

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
Copy link
Author

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
Copy link
Author

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
Copy link
Owner

mviereck commented May 2, 2021

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
Copy link
Author

holgerd001 commented May 2, 2021

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
Copy link
Owner

mviereck commented May 2, 2021

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
Copy link
Author

holgerd001 commented May 3, 2021

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:

  • 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)

A lot of work =:-)

@mviereck
Copy link
Owner

mviereck commented May 7, 2021

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
Copy link
Author

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
Copy link
Owner

mviereck commented May 7, 2021

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
Copy link
Author

Ich suche gerade nach der genauen Ursache.

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

@mviereck
Copy link
Owner

mviereck commented May 7, 2021

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
Copy link
Owner

mviereck commented May 7, 2021

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
Copy link
Owner

mviereck commented May 8, 2021

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
Copy link
Owner

mviereck commented May 8, 2021

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
Copy link
Author

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
Copy link
Author

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
Copy link
Author

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

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

@holgerd001
Copy link
Author

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

Also was ich sagen wollte ist:

  • 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.

@mviereck
Copy link
Owner

mviereck commented May 9, 2021

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
Copy link
Author

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
Copy link
Owner

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
Copy link
Author

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
Copy link
Author

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

@mviereck
Copy link
Owner

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
Copy link
Author

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
Copy link
Owner

mviereck commented May 11, 2021

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
Copy link
Author

Diese experimentellen Einstellungen ...

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

@mviereck
Copy link
Owner

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:

  • Löcher im Fühler
  • Unscharfe "Streifen" auf dem Kopf

Jetzt Bearbeitung der Ebenen in gimp.
Vorgehensweise:

  • Bild öffnen. Ein Dialog öffnet sich: "Aus TIFF importieren".

    • "Alles auswählen"
    • "Seiten öffnen als Ebenen"
    • "Importieren"
  • Rechts unten sind die Ebenen zu sehen.

    • Unten in der Liste sind das enfuse Hintergrundbild und ein paar einfarbige Bilder. Das enfuse Hintergrundbild mit Klick aufs Auge ausblenden.
    • Jetzt ist das imfuse Ergebnis aus den übrigen Ebenen zu sehen. Es hat noch einige Löcher und Fehler.
      imfuse wavelet=p10_maskstat=r6,median_maskblur=s2_close=r2,R2,p0_less=p60_slabs10_threshold=p30,s2_bg=enfuse_layered_md6a4aee greenbg
  • Jetzt die obersten Ebenen eine nach der anderen abschalten. Es zeigt sich, daß die oberste Ebene ganz nutzlos ist. Hier ein Schnappschuß ohne die obersten 3 Ebenen:
    imfuse wavelet=p10_maskstat=r6,median_maskblur=s2_close=r2,R2,p0_less=p60_slabs10_threshold=p30,s2_bg=enfuse_layered_md6a4aee greenbg-removetoplayers

  • Jetzt beginnt die Bearbeitung der 3. Ebene, um Löcher zu schließen:

    • In der Ebenenliste Rechtsklick auf die 3. Ebene.
      • Menü: "Ebenenmaske hinzufügen"
      • Dialog: "Alphakanal der Ebene übernehmen". Die richtige Auswahl ist entscheidend!
      • "Hinzufügen".
    • In der Ebenenliste erscheint rechts neben dem Vorschaubild ein zweites Vorschaubild. Dieses auswählen.
    • Jetzt kann im Bild die Maske der dritten Ebene berbeitet werden.
      • Leider zeigt gimp die Maske selbst nicht in groß an. Keine Ahnung, ob das geht.
      • Die wichtigsten Werkzeuge sind jetzt "Pinsel" und "Radiergummi".
        • Mit dem Radiergummi wird Transparenz entfernt
        • Mit dem Pinsel wird Transparenz hinzugefügt.
      • Die Löcher im Fühler mit dem Radiergummi verschließen.
      • Die Ebene ein paarmal ein- und ausblenden, um den Unterschied zu sehen.
      • Wo die Ebene Unschärfe zum Bild hinzufügt (also die tieferen Ebenen besser aussehen): Die unscharfen Bereiche mit dem Pinsel entfernen.
    • So weitermachen mit allen anderen Ebenen.
      • Ein- und Ausblenden von mehreren Ebenen kann je nach Situation nützlich sein.
      • Ein- und Ausblenden der farbigen Hintergründe hilft, Löcher zu finden.
      • Darauf achten, immer die richtige Maske der richtigen Ebene auszuwählen, bevor man drauflospinselt.

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
Copy link
Owner

mviereck commented Nov 13, 2022

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

@mviereck mviereck changed the title imfuse: foreground - background imfuse: foreground - background (ant) Nov 15, 2022
@mviereck
Copy link
Owner

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
Copy link
Owner

mviereck commented Nov 20, 2022

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
Copy link
Author

holgerd001 commented Nov 21, 2022

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
Copy link
Owner

mviereck commented Nov 21, 2022

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:

  • Viele Optionen können jetzt mehrfach angewendet werden. Nicht immer sinnvoll, aber möglich.
  • Die Syntax für Parameter der Optionen ist jetzt strenger und einheitlicher.
  • Innerhalb einen Verarbeitungsschrittes macht die Reihenfolge der Optionen einen Unterschied Sie werden nacheinander abgearbeitet, wie sie auf der Kommandozeile stehen. In der Ausgabe von imfuse --help sind die Verarbeitungsschritte die Kapitel zu merge und postprocessing.
    • Beispiel:
      • --less --maskwave und --maskwave --less macht keinen Unterschied, die passieren in verschiedenen Verarbeitungsschritten.
      • --maskwave --maskblur und --maskblur --maskwave macht einen Unterschied, beide passieren im Schritt "merge".
  • Anstatt die Bilder vor der Maskenerzeugung in grau umwandeln zu lassen, nutzt imfuse jetzt alle Farbkanäle. Das gibt ein etwas akkurateres Ergebnis, kostet aber wieder Rechenzeit. Das ursprüngliche Umwandeln in grau läßt sich erreichen mit --grayscale=RMS.

@holgerd001
Copy link
Author

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
Copy link
Owner

mviereck commented Nov 21, 2022

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
Copy link
Author

holgerd001 commented Nov 21, 2022

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
Copy link
Owner

mviereck commented Nov 22, 2022

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
Copy link
Owner

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
Copy link
Author

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
Copy link
Owner

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:

  • Neue Optionen --cutwave, --cutmorph und --cutcmd
  • --less heißt jetzt --cutless
  • Die --cut* Optionen können jetzt mehrfach angegeben und in der Reihenfolge geändert werden.

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
Copy link
Author

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
Copy link
Owner

mviereck commented Nov 25, 2022

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
Copy link
Author

Jetzt hat's geklappt (mit bc).

imfuse: Ready after 01:05:45

Tolles Ergebnis!

@mviereck
Copy link
Owner

mviereck commented Nov 26, 2022

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
Copy link
Author

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
Copy link
Owner

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
Copy link
Owner

mviereck commented Nov 28, 2022

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.

@mviereck
Copy link
Owner

Ich schreibe gerade an ein paar Seiten im wiki: https://github.com/mviereck/microscopy-tools/wiki

Dabei auch Beispiele für die Ameise: https://github.com/mviereck/microscopy-tools/wiki/Example:-ant

Dabei ist auch ein Download für einen Ausschnitt aus dem Stack. ist das ok, daß ich da ein Stück Deiner Bilder zum Download anbiete?

@holgerd001
Copy link
Author

Sorry, ich war die letzte Zeit nicht so Makroaktiv. Ich habe zwar ein paar Ideen, aber das "Labor" ist nicht beheizt, daher ...

Ich schreibe gerade an ein paar Seiten im wiki: https://github.com/mviereck/microscopy-tools/wiki

Dabei auch Beispiele für die Ameise: https://github.com/mviereck/microscopy-tools/wiki/Example:-ant

Dabei ist auch ein Download für einen Ausschnitt aus dem Stack. ist das ok, daß ich da ein Stück Deiner Bilder zum Download anbiete?

Ja, das ist ok.
Es ist aber auch an der Zeit, dass ich, mit jetzt verbesserter Technik, mal was nachlege. Aber noch ist mir das zu kalt.

@mviereck
Copy link
Owner

Es ist aber auch an der Zeit, dass ich, mit jetzt verbesserter Technik, mal was nachlege. Aber noch ist mir das zu kalt.

Bei Kälte zappeln die Insekten weniger! ;-)

@holgerd001
Copy link
Author

Bei Kälte zappeln die Insekten weniger! ;-)

Aber ich umso mehr. Da verwackelt alles.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants