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: Finding good parameters: fly on yellow background #10

Open
mviereck opened this issue Feb 17, 2021 · 71 comments
Open

imfuse: Finding good parameters: fly on yellow background #10

mviereck opened this issue Feb 17, 2021 · 71 comments

Comments

@mviereck
Copy link
Owner

mviereck commented Feb 17, 2021

Here I show the progress of finding a good parameter set for a stack provided by @holgerd001. Much thanks for the stack!

quick result with enfuse

First try: Generating an enfuse result

imfuse --background=enfuse

imfuse bg=enfuse 6e8354

I've marked and numerated some points of interest:
POI

  • (1) A hair behind the eye appears in front of it
  • (2) Dark areas of the eyes appear a bit too bright
  • (3) The leg in background looks well
  • (4) Between leg and eye the bokeh is somewhat wrong: yellow instead of leg
  • (5) Yet another blurry bokeh area

Try a mask: --dog, --log or --wavelet

Good mask options for macro stacks in general are --log, --dog and --wavelet. Now I use --dog.

imfuse --dog

imfuse dog=s0 3-s0 48 b8a0e0
Visible artefacts:

  • (1) hair in front of eye
  • (2) eyes darker than with enfuse, but with some noise
  • (3) noise in the leg / bad bokeh

fix hair in front of eye: --less --close

Fix the hair in the eye (1) with --less --close

imfuse --dog --less --close

imfuse dog=s0 3-s0 48-close2x2_less60 341de2

  • (1) hair is behind eye, well done
  • (2) less noise in darke area of eyes
  • (3) bad noisy bokeh at the leg

low contrast area detection: --threshold=50

Now its up to look for the bokeh.
Low contrast areas that might cause artefacts are below 50% contrast.
To get an idea of the location of low contrast areas I use --threshold=50

imfuse --dog --threshold=50 --background=red

imfuse dog=s0 3-s0 48_threshold50_bg=red ae1be7

blur bokeh with --finalblur

Option --finalblur, currently with default --finalblur=w50,s2, blurs the bokeh.

imfuse --dog --less --close --finalblur

imfuse dog=s0 3-s0 48-close2x2_less60_finalblur=w50-s2 11f708
Overall a good result, but the leg (3) looks somewhat incomplete

A high blur sigma improves the leg (3) / bokeh appearance, but causes light artefacts in the eyes (2):

imfuse --dog --less --close --finalblur=w50,s5

imfuse dog=s0 3-s0 48-close2x2_less60_finalblur=w50-s5 1963c2

Reducing the percent value of finalblur helps, we have luck that the black area in the eyes (2) has a bit more contrast than the leg (3):

imfuse --dog --less --close --finalblur=w47,s5

imfuse dog=s0 3-s0 48-close2x2_less60_finalblur=w47-s5 c0be55

I'd say this is a good result.

light balance with --fakehdr

As a final tweak some light balance with --fakehdr:

imfuse --dog --less --close --finalblur=w47,s5 --fakehdr=40

imfuse dog=s0 3-s0 48-close2x2_hdr40_less60_finalblur=w47-s5 5d39f4

@holgerd001
Copy link

holgerd001 commented Feb 17, 2021

With --finalblur=w50,s5 there seams to be a yellow glue between the hairs.

Now I have used imfuse --dog --less --close --finalblur=w47,s5 --fakehdr=40 with the non resized images. It looks very different to the 20% images.

imfuse dog=s0 3-s0 48-close2x2_hdr40_less60_finalblur=w47-s5 6d57dd_80

@mviereck
Copy link
Owner Author

With --finalblur=w50,s5 there seams to be a yellow glue between the hairs.

Indeed. I didn't noticed it before.
Maybe it is better to use --soft instead of increasing the sigma of --finalblur

imfuse --dog --less --close --finalblur=w47,s2 --soft

imfuse dog=s0 3-s0 48-close2x2_soft0x100_less60_finalblur=w47-s2_bg=enfuse 73c32e

The bokeh of the leg is still not great. Increasing the softness in lowcontrast with:

imfuse --dog --less --close --finalblur=w47,s2 --soft=-75x100

imfuse dog=s0 3-s0 48-close2x2_soft-75x100_less60_finalblur=w47-s2_bg=enfuse 720a4f

The bokeh of the leg is still not really great.

@holgerd001
Copy link

The bokeh of the leg is still not really great.

Yes, just like in the full size image.

imfuse dog=s0 3-s0 48-close2x2_soft-75x100_less60_finalblur=w47-s2_bg=enfuse 7f8c53_90

Perhaps you should use the full size images. I can send you. But it takes much more time 14-39 minutes by my experience.

And what I don't understand are the differences between 20% and full size input.

@mviereck
Copy link
Owner Author

Perhaps you should use the full size images. I can send you. But it takes much more time 14-39 minutes by my experience.

Yes, that would be appreciated. I'll test them, too.

And what I don't understand are the differences between 20% and full size input.

I am a bit surprised, too.
The --close option might make the difference. It takes an absolute pixel value and a multiplication factor.
Default is --close=2x2, respective a 4 pixel radius (multiplied 2x2=4).
You could try a greater value, maybe --close=10x10; that would outweight the 20%. But be warned: --close with a high radius takes a lot of time. --close=2x50 or --close=4x25 will be faster.

@mviereck
Copy link
Owner Author

Here a rude attempt to fix the bokeh:
Running with --threshold=50 and using a background.

imfuse --dog --less --close --finalblur=w47,s2 --soft --threshold=50 --bg=transparent

imfuse dog=s0 3-s0 48-close2x2_soft0x100_less60_finalblur=w47-s2_threshold50_bg=transparent 9d6d15

imfuse --dog --less --close --finalblur=w47,s2 --soft --threshold=50 --bg=min

imfuse dog=s0 3-s0 48-close2x2_soft0x100_less60_finalblur=w47-s2_threshold50_bg=min 6c0db7

I've used --background=min instead of --background=enfuse because the eyes in the enfuse result have a white flare that would not fit here.

@mviereck
Copy link
Owner Author

mviereck commented Feb 17, 2021

Looking closer at your full-sized image I could image that --close=5x5 might be enough to fill the hairs.
The other ugly areas, especially in the eyes, might be fixed with --background=min, with or without --threshold.
I assume it is the enfuse background that just does not fit for this case.
Edit: Maybe omit --soft, too, if using --threshold.

@holgerd001
Copy link

Yes, that would be appreciated. I'll test them, too.

The same way as last time. Your email address is still alive?

@mviereck
Copy link
Owner Author

The same way as last time. Your email address is still alive?

Yes, it is a permanent address.

@holgerd001
Copy link

holgerd001 commented Feb 18, 2021

Looking closer at your full-sized image I could image that --close=5x5 might be enough to fill the hairs.

I tried imfuse --verbose --dog --less --close --finalblur=w47,s2 --soft --threshold=50 --bg=enfuse aligned_C_c60_m_order_00??.tif and got this:


imfuse note: Setting --output=/mnt/Daten/holger/Fotos/stacks/20210207_Fliege_Kopf_gelb_Mikroskopobj/imfuse.dog=s0.3-s0.48-close2x2_soft0x100_less60_finalblur=w47-s2_threshold50_bg=enfuse.a6ec4f.tif

imfuse: Mask options:
NUM=1,METHOD=dog,s=0.3,S=0.48,CLOSE1=2,CLOSE2=2,LEVEL,TYPE=mask

imfuse note:
Image number: 64
Image width: 3897 px
Image height: 2595 px
Image memory size: 202253 kb
Image list memory size: 12944192 kb
Free Memory: 12899835 kb

imfuse: Generating transparent image:
nice magick -quiet -size 3897x2595 canvas:transparent -type TrueColorAlpha /mnt/Daten/holger/Fotos/stacks/20210207_Fliege_Kopf_gelb_Mikroskopobj/cache.imfuse/imfuse.dog=s0.3-s0.48-close2x2_soft0x100_less60_finalblur=w47-s2_threshold50_bg=enfuse.a6ec4f.tif
imfuse: Mask generator kernels:
Kernel "DoG" of size 5x5+2+2 with values from -0.2219 to 2
Forming a output range from -1 to 2 (Normalized)
0: -6.14023e-08 -4.12689e-05 -0.000361493 -4.12689e-05 -6.14023e-08
1: -4.12689e-05 -0.0276556 -0.2219 -0.0276556 -4.12689e-05
2: -0.000361493 -0.2219 2 -0.2219 -0.000361493
3: -4.12689e-05 -0.0276556 -0.2219 -0.0276556 -4.12689e-05
4: -6.14023e-08 -4.12689e-05 -0.000361493 -4.12689e-05 -6.14023e-08
magick: image sequence is required `-composite' @ error/operation.c/CLIListOperatorImages/4021.

imfuse note: Generating enfuse base image


It's still running.
Version="0.6.6.5-beta"

@mviereck
Copy link
Owner Author

magick: image sequence is required `-composite' @ error/operation.c/CLIListOperatorImages/4021.

The error message is harmless at this point, only part of the verbose kernel output. I'll fix that.

Are you running with the default --close [=2x2]? For the full size image rather use --close=5x5, otherwise the hairs will be transparent.

@holgerd001
Copy link

Are you running with the default --close [=2x2]? For the full size image rather use --close=5x5, otherwise the hairs will be transparent.

I use --close=5x5 for the full size image.

@mviereck
Copy link
Owner Author

mviereck commented Feb 18, 2021

The download for full-sized stack is running, thank you!

I found a setup that gives a reasonable good result combining --dog --log --wavelet:

imfuse --dog --log --wavelet --less --close --alpha --finalblur --background=min

None of --dog --log --wavelet was satisfying on its own, but together they give a nice bokeh.

Works also well without --alpha --background=min, but some light flare appears in the eye (2) and the leg bokeh is a bit less well.

Note that I use --alpha instead of formerly --soft according to #9 (comment)

imfuse dog=s0 3-s0 48_log=s0 2_wavelet=p10_alpha0x100_less60_close2x2_finalblur=w50-s2_bg=min 18c34d

Remaining artefacts:

  • The yellow area between eye and leg (4)
  • The hairs left of the left eye have a gap between hair and eye.

@holgerd001
Copy link

imfuse --dog --log --wavelet --less --close --alpha --finalblur --background=min

That's what I did too.

imfuse dog=s0 3-s0 48_log=s0 2_wavelet=p10_alpha0x100_less60_close2x2_finalblur=w50-s2_bg=min 92654c

I found noisy areas

  • at the leg (3)
  • in the right eye (at the view of the fly)
  • in the both legs in the foreground
    It looks like paint splatters.

But in normal magnification only the noise on the leg (3) is visible.

It's a real high art to find good parameters.
And a question of patience. The image above took nearly 23 minutes.

@mviereck
Copy link
Owner Author

mviereck commented Feb 18, 2021

Adding --threshold=50 might fix some of the issues, especially in the eye.
--finalblur might take a higher sigma for big sized images, e.g. --finalblur=s5

@mviereck
Copy link
Owner Author

It's a real high art to find good parameters.
And a question of patience. The image above took nearly 23 minutes.

Yes. It is hard to find defaults that fit for most images.
And I still search for and develop solutions for upcoming issues.

Just a note which options can be changed at low cost after a build with --cache:

--alpha
--background
--finalblur
--threshold

@mviereck
Copy link
Owner Author

With --finalblur=w50,s5 there seams to be a yellow glue between the hairs.

Fixed, heureka!

imfuse --dog --close --less --finalblur=s5

imfuse dog=s0 3-s0 48-close2x2_less60_finalblur=w50-s5 1963c2

@mviereck
Copy link
Owner Author

mviereck commented Feb 19, 2021

I've made two further changes to --finalblur:

  • A percent value has to be given with p instead of w, e.g. --finalblur=p40.
  • A second sigma value is allowed. This causes a blur from bokeh to front. This allows a soft transition.
 --finalblur [=p%,sSIGMA1,Ssigma2]   Soft blur of bokeh.
                      Blurs low contrast areas with a contrast strenght 
                      up to % with SIGMA1 and/or sigma2. 
                      Default %: 50, default SIGMA1: 2, default sigma2: 1
                      If sigma2 is given, the bokeh blurs out into sharp
                      areas for a soft transition.

Examples:

imfuse --dog --close --less --finalblur=s0,S5

imfuse dog=s0 3-s0 48-close2x2_less60_finalblur=p50-s0-S5 41390b

imfuse --dog --close --less --finalblur=s3,S2

imfuse dog=s0 3-s0 48-close2x2_less60_finalblur=p50-s3-S2 dd9ab7

Have a look at the top right corner. In the previous post with --finalblur=s5 there is some noise that disappears in the examples of this post.

@mviereck
Copy link
Owner Author

mviereck commented Feb 20, 2021

Thank you for sending the large scale images again! Now the download has succeeded.

I am running some tests and can reproduce the issues.
A first improvement: Use a higher sigma than default --dog=s0.3. I get better results with --dog=s0.75.

@mviereck
Copy link
Owner Author

mviereck commented Feb 21, 2021

And what I don't understand are the differences between 20% and full size input.

The core reason for the difference:
In the large scale image there are larger regions with low contrast within the fly.

Currently the default mask parameters (radius or sigma) rather fit small images with small distances between contrast rich areas. With low sigma or radius only a small region around each pixel is taken into acount.

Using a higher sigma, e.g. --dog=s1 instead of --dog=s0.3 or a higer radius, e.g. --stat=r5 instead of --stat=r2 causes the mask option to look at a larger region around each pixel.

I get a mostly good result with:

imfuse --dog=s1 --alpha=-50x200 --background=min --less --cutblur --prefertop --finalblur
  • Remaining artefacts:
    • Some hairs still appear in front of the eye.
    • Some hairs are not filled entirely
  • Option notes:
    • sigma 1 for --dog. sigma 2 is too hard and eats up fine details.
    • --cutblur instead of --close. I found that even --close=2x2 caused some artefacts in the nose.
    • new/reintroduced option --prefertop. Helps to prefer layers on top, a bit similar to --less.

imfuse dog=s1-s1 6_alpha-50x200_less60_cutblur1_finalblur=p50-s2-S1_prefertop40_bg=min 238c1d

@holgerd001
Copy link

In the large scale image there are larger regions with low contrast within the fly.

Thanks, I should conceive of it by my own. :-)
I understand what a radius is, but what means sigma here? If I look at wikipedia I find a lot of sigmas.

@holgerd001
Copy link

imfuse --dog=s1 --alpha=-50x200 --background=min --less --cutblur --prefertop --finalblur

I used this parameters here too and compared the result with the image made by enfuse. The imfuse image looks a little bit sharpener / contrasty. But in many areas "sprayed" pixels are visible. Especially in dark areas they are visible.
imfuse dog=s1-s1 6_alpha-50x200_less60_cutblur1_finalblur=p50-s2-S1_prefertop40_bg=min 982fbb_Bein

@mviereck
Copy link
Owner Author

mviereck commented Feb 23, 2021

But in many areas "sprayed" pixels are visible. Especially in dark areas they are visible.

I can confirm that. --dog tends to create noise pixels in low contrast areas. Your example might be fixed with adjusted --finalblur arguments, a higher percent value might help, e.g. --finalblur=p60.
EDIT: Wrong, see post below

I am still looking for a good setup, did several tests already. Your image helps me to explore the possibilities, improve the script and hopefully find easy ways to find a good setup. But I still found no overall satisfying setup.

Currently a mostly good result:

imfuse --sobel --less --alpha  --close=r2,R2,p0 --bg=min --finalblur

Note the changed syntax for --close. It is a useful option that connects empty space between contrast lines, so hairs become opaque instead of transparent. But it causes some artefacts on its own. Yet I test some possible improvements.

I understand what a radius is, but what means sigma here? If I look at wikipedia I find a lot of sigmas.

I only partially understand sigma myself. To simplify, it is sort of a radius, too. It affects the size of the kernel that imagemagick uses to look at a pixel and give it a contrast weight. A high sigma value generates a kernel with a big radius.
In practice, radius is a real radius in pixel (integer values only), where sigma takes float point values.
sigma values greater than 1 are barely usable. The defaults of imfuse set the lowest possible value that still gives useful results. A sigma of 0.75 is somewhere in the middle. Maybe I should set that as default to fit small and big images at a time.

This site describes several imagmagick contrast mask kernel operators: https://legacy.imagemagick.org/Usage/convolve/
The kernel names like DoG, LoG, Sobel etc. are the ones used with --dog, --log, --sobel etc.

@mviereck
Copy link
Owner Author

But in many areas "sprayed" pixels are visible. Especially in dark areas they are visible.

I can confirm that. --dog tends to create noise pixels in low contrast areas. Your example might be fixed with adjusted --finalblur arguments, a higher percent value might help, e.g. --finalblur=p60.

I have to correct my answer: it looks like --cutblur hasn't been applied by imfuse. There was a bug where imfuse sometimes used the wrong cache files with option --cache. Please update and try again, you should get the same result as I've shown.

@holgerd001
Copy link

There was a bug where imfuse sometimes used the wrong cache files with option --cache. Please update and try again, you should get the same result as I've shown.

I have updated to v0.6.7.4-beta and started imfuse --dog=s1 --alpha=-50x200 --background=min --less --cutblur --prefertop --finalblur again. But there are no differences to the images done with the previous version. It seams, the sprayed pixels are exactly at the same position.

@holgerd001
Copy link

This site describes several imagmagick contrast mask kernel operators

Thanks. There I found a link to this page: https://legacy.imagemagick.org/Usage/blur/#blur
The important setting in the above is the second sigma value. It can be thought of as an approximation of just how much your want the image to 'spread' or blur, in pixels. Think of it as the size of the brush used to blur the image.
Now I have an idea of sigma.

@mviereck
Copy link
Owner Author

mviereck commented Mar 3, 2021

But there are no differences to the images done with the previous version. It seams, the sprayed pixels are exactly at the same position.

Sorry for my late response. I've generated the image with same parameters again, and it was a bit darker / less pixeled than before. I have no idea why I got two different results and you a third different (but reproducible) result.
Imho I did no change in the code that would explain that.
Afaik we use the exactly same source images and the same imagemagick version (static magick from the imagemagick download page.)
I'll look at this and generate the image with same parameters again.

Think of it as the size of the brush used to blur the image.

That's a nice metapher. I'll remember it

@holgerd001
Copy link

and the same imagemagick version

Nearly. On imagemagick.org is ImageMagick-7.0.11-2 available. I use ImageMagick 7.0.10-53 from my repository.

@mviereck
Copy link
Owner Author

mviereck commented Mar 6, 2021

Finally I found the reason for the different results. It was a cache bug with option --prefertop. Your noisy result is the right one. Just drop option --prefertop, it is barely useful.

I am still trying to find a good setup. Currently the best setup I found so far:

imfuse --dog=s2 --less --maskblur=2 --cutblur=5 --finalblur=p10,s10

imfuse dog=s2-s3 2_less60_maskblur2_cutblur5_finalblur=p10-s10-S1 650fd1

@holgerd001
Copy link

Currently the best setup I found so far:
imfuse --dog=s2 --less --maskblur=2 --cutblur=5 --finalblur=p10,s10

To have a look at a high resolution image, I used this parameters here too. With a magnification of 100% (and more) I can see some "sprayed" pixels. But much less than in all other images. Probably they are not visible on a print.
In some areas there is some "glue" between the hairs.
Screenshot_20210307_164056
But it becomes harder to find deficits :-)

@mviereck
Copy link
Owner Author

Mit slab habe ich gute neue Ergebnisse erzielt:


      fg_20)
        Substack[1]="1,13"
        Substackargs[1]="--dog=s0.75"
        Threshold[1]="85"
        Thresholdblur[1]=0.1
        Substack[2]="5,26"
        Substackargs[2]="--dog=s0.25"
        Threshold[2]="65"
        Thresholdblur[2]=0.1
        Substack[3]="22,*"
        Substackargs[3]="--dog=s0.25 --finalblur"
        Threshold[3]="25"
        Thresholdblur[3]=0.1
      ;;
      fg_100)
        Substack[1]="1,15"
        Substackargs[1]="--dog=s1"
        Threshold[1]="70"
        Thresholdblur[1]="0.5"
        Substack[2]="5,25"
        Substackargs[2]="--dog=s1 --close"
        Threshold[2]="65"
        Thresholdblur[2]="2"
        Substack[3]="21,28"
        Substackargs[3]="--dog=s1 --close=r4,R4"
        Threshold[3]="85"
        Thresholdblur[3]="1"
      ;;

Die Einstellung fg_20 für die auf 20% verkleinerte Fliege, fg_100 für die Originalgröße.
Immer noch nicht perfekt; die Ecken der Augen haben zu helle Bereiche (enfuse Hintergund), und der gelbe Außenrand des linken Auges ist mir zu stark. Aber dafür gucken endlich keine Haare mehr durchs Auge!
Eine GUI zur manuellen Auswahl von Bereichen und Korrektur von Masken wäre hilfreich.
slab_30b0fa

@holgerd001
Copy link

holgerd001 commented May 13, 2021

Also das sieht schon beeindruckend aus. Der PC läuft gerade mit fg_100. Dann sehe ich hier mehr.
...
So, jetzt ist er fertig. Aber das Ergebnis passt nicht zu dem, was Du erreicht hast.
Ich habe eben noch mal ins slab-script geschaut: fg_100 entspricht genau dem, was Du hier geschrieben hast.
Hier mein fg_100 Ergebnis (verkleinert):
slab_b171d9_fg_100_30_70

@mviereck
Copy link
Owner Author

mviereck commented May 13, 2021

So, jetzt ist er fertig. Aber das Ergebnis passt nicht zu dem, was Du erreicht hast.

Seltsam. Ich habe den Cache gelöscht und das Bild nochmal berechnen lassen, mein Ergebnis ist immer noch gut.
Ich habe imfuse und slab nochmal hochgeladen, vielleicht ist irgendeine Änderung nicht bei Dir angekommen.

Bitte aktualisiere beides, lösche den Cache und probier nochmal.

Edit: ups, ich habe jetzt mit fg_100_dark rechnen lassen. Das ist aber fast identisch mit fg_100 und zeigt nicht die Fehler von Deinem Ergebnis.

@holgerd001
Copy link

Ich habe den Code runtergeladen, cache gelöscht und slab noch mal laufen lassen (fg_100). Aber keine Besserung.
Folgende Versionen sind hier installiert:
ImageMagick 7.0.10-53 Q16 x86_64 20201224
enfuse 4.2
imfuse v0.6.13-beta

@mviereck
Copy link
Owner Author

Es ist mir ein Rätsel.
Ich habe das Bild nochmal mit fg_100 und gelöschtem Cache erzeugen lassen und kann die Fehler nicht reproduzieren.
Du hast auch das slab script neu heruntergeladen (enthält fg_100_dark)?
Meine ImageMagick Version ist etwas älter:
ImageMagick 7.0.10-13 Q16 x86_64 2020-05-17

@holgerd001
Copy link

holgerd001 commented May 14, 2021

Du hast auch das slab script neu heruntergeladen (enthält fg_100_dark)?

Ja, ich hatte den Code komplett heruntergeladen und installiert. slab enthält fg_100_dark. Jetzt habe ich einen separaten Ordner angelegt, der nur aligned_C_c60_m_order_00??.tif enthält. Aber immer noch die schlechten Ergebnisse. Lasse gerade imfuse --dog=s1 --close=r4,R4 --cache=imcache aligned_C_c60_m_order_00??.tif laufen.
Das Ergebnis ist nicht perfekt, aber auf den ersten Blick würde ich sagen, dass imfuse normal funktioniert.
imfuse dog=s1-S1 6_close=r4,R4,p0_md6c9f0a_30_70

@mviereck
Copy link
Owner Author

Ja, das Ergebnis sieht aus, wie man es für die Optionen erwarten kann.

Wir sollten die gleichen Ausgangsbilder haben. Zur Überprüfung eine gemeinsame Prüfsumme aller Dateien:

$ cat aligned_C_c60_m_order_00??.tif | md5sum
6532abf17d975d8d3d97e3e88b057c12  -

Sonst fällt mir nur noch die abweichende imagemagick Version als Möglichkeit ein.
Ich verwende diesen static build, der auch bei Dir auf OpenSuse laufen sollte: https://download.imagemagick.org/ImageMagick/download/binaries/magick

@holgerd001
Copy link

holgerd001 commented May 15, 2021

$ cat aligned_C_c60_m_order_00??.tif | md5sum
6532abf17d975d8d3d97e3e88b057c12 -

cat aligned_C_c60_m_order_00??.tif|md5sum
6532abf17d975d8d3d97e3e88b057c12 -
Die Fotos sind also die selben.

Ich verwende diesen static build,

Leider kann ich magick nicht deinstallieren, da es diverse andere Programme benötigen (Digicam, showFoto). Daher traue ich mich auch nicht einfach die Redhat Version einzuspielen. Aber vielleicht kann ich ja den static build lokal verwenden. Dazu müssten die Shell-scripte angepasst werden.

@mviereck
Copy link
Owner Author

Die Fotos sind also die selben.

gut.

Leider kann ich magick nicht deinstallieren, da es diverse andere Programme benötigen (Digicam, showFoto).

Ok, verstehe.
Was aber dennoch gehen sollte (so habe ich es hier auch):
Wenn Du magick (static) nach /usr/local/bin kopierst, sollte es anstelle von /usr/bin/magick gestartet werden. Prüfen kannst Du das mit which magick.
Dafür brauchst Du das Originalpaket nicht zu deinstallieren.

Dazu müssten die Shell-scripte angepasst werden.

Für alle Fälle habe ich am Anfang von imfuse und slab eine Zeile eingefügt, die Du anpassen kannst, falls Du obige Lösung nicht willst:

Magickbin="$(which magick)"

Stattdessen z.B. Magickbin=$HOME/bin/magick eintragen.

Ein weiterer möglicher Test:
Du könntest fg_100_dark laufen lassen. Das Ergebnis sollte, falls nicht besser, aber doch anders aussehen.
Beachte, daß slab noch keine gleichbleibende Prüfsumme in den Dateinamen schreibt. Falls Du ein Bild mit gleichen Parametern neu erzeugst, kann die Nummer im Dateinamen trotzdem anders sein.

@holgerd001
Copy link

holgerd001 commented May 15, 2021

Wenn Du magick (static) nach /usr/local/bin kopierst,

Habe es nach /home/holger/bin/ kopiert. Dort hat es auch Vorrang. Z.Z. läuft slab mit fg_100_dark. Mal sehen was passiert.
Das sieht eindeutig besser aus. Also liegt es an meiner veralteten magick-version.

slab_8bc7b5_magick7011_fg_100_dark_30_70

Ich werde die static-version einfach hier liegen lassen, bis ein offizielles Update kommt. In Tumbleweed (release candidate) ist es schon drin.

@mviereck
Copy link
Owner Author

mviereck commented May 15, 2021

Das sieht eindeutig besser aus.

Super! Ja, das paßt zu meinem fg_100_dark Ergebnis.

Also liegt es an meiner veralteten magick-version.

Eigentlich ist Deine OpenSuse Version etwas neuer als die static-Version. Ob es ein neuer Bug in der OpenSuse-Version ist, wird sich vielleicht noch zeigen. Ein zukünftiges Update geht vielleicht wieder.

@mviereck
Copy link
Owner Author

mviereck commented Nov 9, 2022

Recently I've reimplemented the --slabs option and got nice results for the yellow fly with these parameters:

--wavelet --saturation=w10 --maskstat --maskblur --close --less --slabs --alpha --bg=enfuse

imfuse wavelet=w90-p10_saturation=w10_maskstat=r6,median_maskblur=s2_close=r2,R2,p0_less=p60_slabs10_bg=enfuse_alpha=0x100_md4f3804

@holgerd001
Copy link

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.

Noch habe ich reichlich Platz auf der SSD. Z.Z. liegt hier nur einen Ordner cache.imfuse mit ca. 40MB. Das ist ja noch harmlos.

@mviereck
Copy link
Owner Author

mviereck commented Jan 1, 2023

A nice result, minor issues only:

--wavelet=p5 \
--maskwave=p100 --masklevel=t5 \
--cutless=p15 --cutwave=p100 --cutbg --cutalpha=p-25 \
--finalblur=s10,S2,t5

7ce6bc_539921--wavelet=p5--maskwave=p100--masklevel=t5--cutless=p15--cutwave=p100--cutbg--cutalpha=p-25--finalblur=s10,S2,t5 result

The according mask:
7ce6bc_539921--wavelet=p5--maskwave=p100--masklevel=t5--cutless=p15--cutwave=p100--cutbg--cutalpha=p-25--finalblur=s10,S2,t5 mask

I've added a crop of the stack as an example to the wiki: Example: yellow fly

@holgerd001
Copy link

--wavelet=p5
--maskwave=p100 --masklevel=t5
--cutless=p15 --cutwave=p100 --cutbg --cutalpha=p-25
--finalblur=s10,S2,t5

Merkwürdig, mit den selben Parametern habe ich ein etwas anderes Ergebnis bekommen.
Ich habe imfuse 0.9.8-beta verwendet.

01ba2e_403c68 result

@mviereck
Copy link
Owner Author

mviereck commented Jan 3, 2023

Merkwürdig, mit den selben Parametern habe ich ein etwas anderes Ergebnis bekommen.
Ich habe imfuse 0.9.8-beta verwendet.

Seltsam. Ich kann mein Ergebnis reproduzieren.
Ich habe jetzt mein aktuelles imfuse 0.9.9-beta hochgeladen. Aber eigentlich sollte das keinen Unterschied machen. Oder ob ich in der Zwischenzeit etwas an --cutalpha geändert habe? Bin ich mir gerade unsicher.

Was mir auffällt: Deine Fliege scheint etwas größer zu sein als meine, oder das Ergebnis vom align ist einfach nur sehr unterschiedlich. Das erklärt aber nicht so große Unterschiede, wie etwa die Flecken auf dem Bein.
Ich benutze das beiliegende stackalign (nutzt focus-stack) zum Ausrichten. Deutlich besser und schneller als align_image_stack.
Die focus-stack Webseite bietet kein rpm Paket an, aber vielleicht funktioniert das Appimage bei Dir.

Du könntest es mit imfuse 0.9.9 nochmal probieren, und vielleicht auch die Ausrichtung mit stackalign verbessern.

@holgerd001
Copy link

Sorry, mein Fehler. Ich hatte versehentlich den falschen Stack erwischt. Die Fotos waren noch nicht aligned.
Jetzt sieht's gut aus.

Ich habe aber eine Warning erhalten (imfuse 0.9.9-beta):

Warning: [minor] Text/EXIF chunk(s) found after PNG IDAT (fixed) - ./832e03_403c68.result.png 1 image files updated imfuse: Ready after 01:02:29 ./832e03_403c68.result.png

@mviereck
Copy link
Owner Author

mviereck commented Jan 4, 2023

Jetzt sieht's gut aus.

Prima!

Ich habe aber eine Warning erhalten (imfuse 0.9.9-beta):

Die Warnung ist harmlos und stammt von exiftool, mit dem imfuse ein paar Metadaten schreibt.
ImageMagick scheint etwas in die PNG Metadaten zu schreiben, das exiftool nicht so recht versteht.

@holgerd001
Copy link

Habe mal imfuse mit --bg=enfuse aufgerufen und einen Error bekommen:

holger@localhost:~/Fotos/stacks/20210207_Fliege_Kopf_gelb_Mikroskopobj> imfuse_0.9.9-beta.sh -C -L --bg=enfuse aligned_C_c60_m_order_00*.tif
imfuse: Parsed image processing options:
--bg=enfuse
imfuse: Step 1: Generating background images
imfuse: Generating image mpr:black
imfuse: Generating image mpr:white
imfuse: Generating image mpr:transparent
imfuse: Generating image mpr:gray50
imfuse: Processing --bg=WORD1=enfuse
imfuse: Generating image /home/holger/.cache/imfuse/832e03.enfuse.1..63.tif
imfuse: Generating image with external tool enfuse

imfuse ERROR: Failed to generate enfuse image

imfuse: Received SIGINT

/home/holger/bin/imfuse_0.9.9-beta.sh: Zeile 4848: 12014 Beendet                 readmagickmessage
imfuse: Current cache size: 29M /home/holger/.cache/imfuse
  You can clean the cache folder with option --rmcache.`

@mviereck
Copy link
Owner Author

mviereck commented Jan 4, 2023

Habe mal imfuse mit --bg=enfuse aufgerufen und einen Error bekommen:

Hm, hier funktioniert es. Ist enfuse bei Dir installiert? Vielleicht sollte imfuse das prüfen.

@holgerd001
Copy link

Ist enfuse bei Dir installiert?

Ja, ich lasse es gerade mal laufen.

@holgerd001
Copy link

enfuse läuft ohne Fehler durch.

@mviereck
Copy link
Owner Author

mviereck commented Jan 4, 2023

Komisch.
Du könntest etwas Debug-Output erzeugen, indem Du den imfuse Code veränderst.
Kurz mit sed:

sed -i 's/Enfuseoptions=/set -x ; which enfuse; Enfuseoptions=/' imfuse_0.9.9-beta.sh

Danach imfuse mit --bg=enfuse nochmal laufen lassen und mir die Ausgabe zeigen. Vielleicht kann ich da einen Fehler erkennen.

Wirf auch mal einen Blick auf den Speicherverbrauch. Vielleicht läuft der RAM voll.

@holgerd001
Copy link

Der Speicher wurde etwas zu Hälfte genutzt.

holger@localhost:~/Fotos/stacks/20210207_Fliege_Kopf_gelb_Mikroskopobj> imfuse_0.9.9-beta_mod.sh -C -L --bg=enfuse aligned_C_c60_m_order_00*.tif
imfuse: Parsed image processing options:
--bg=enfuse
imfuse: Step 1: Generating background images
imfuse: Generating image mpr:black
imfuse: Generating image mpr:white
imfuse: Generating image mpr:transparent
imfuse: Generating image mpr:gray50
imfuse: Processing --bg=WORD1=enfuse
imfuse: Generating image /home/holger/.cache/imfuse/832e03.enfuse.1..63.tif
+ which enfuse
/usr/bin/enfuse
+ Enfuseoptions='--contrast-weight=1 --saturation-weight=0 --exposure-weight=0 --hard-mask'
+ sendmagickmessage 'NOTE:Generating image with external tool enfuse'
+ local Command=
+ case "$(cut -d: -f1 <<< "${1:-}")" in
++ cut -d: -f1
++ cut -d: -f2-
+ Command='
#### Generating image with external tool enfuse ####
#'
+ Command='
#### Generating image with external tool enfuse ####
#
  rose:
    -format '\''NOTE:Generating image with external tool enfuse\n'\''
    -write info:
    -delete -1'
+ cmd '
#### Generating image with external tool enfuse ####
#
  rose:
    -format '\''NOTE:Generating image with external tool enfuse\n'\''
    -write info:
    -delete -1'
+ local Command
+ Command='
#### Generating image with external tool enfuse ####
#
  rose:
    -format '\''NOTE:Generating image with external tool enfuse\n'\''
    -write info:
    -delete -1'
+ '[' -n /home/holger/.cache/imfuse/magickfifo.18255 ']'
+ echo '
#### Generating image with external tool enfuse ####
#
  rose:
    -format '\''NOTE:Generating image with external tool enfuse\n'\''
    -write info:
    -delete -1'
+ echo '
#### Generating image with external tool enfuse ####
#
  rose:
    -format '\''NOTE:Generating image with external tool enfuse\n'\''
    -write info:
    -delete -1'
+ echo '
#### Generating image with external tool enfuse ####
#
  rose:
    -format '\''NOTE:Generating image with external tool enfuse\n'\''
    -write info:
    -delete -1'
+ return
+ return 0
++ date +%s
+ Startzeit=1672846662
+ Splits=1
+ case "$Splits" in
+ grep -v -E 'loading next image|assuming all pixels should contribute|does not have an alpha channel|TIFFDecoder'
+ nice enfuse --contrast-weight=1 --saturation-weight=0 --exposure-weight=0 --hard-mask -o /home/holger/.cache/imfuse/832e03.enfuse.1..63.tif aligned_C_c60_m_order_0001.tif aligned_C_c60_m_order_0002.tif aligned_C_c60_m_order_0003.tif aligned_C_c60_m_order_0004.tif aligned_C_c60_m_order_0005.tif aligned_C_c60_m_order_0006.tif aligned_C_c60_m_order_0007.tif aligned_C_c60_m_order_0008.tif aligned_C_c60_m_order_0009.tif aligned_C_c60_m_order_0010.tif aligned_C_c60_m_order_0011.tif aligned_C_c60_m_order_0012.tif aligned_C_c60_m_order_0013.tif aligned_C_c60_m_order_0014.tif aligned_C_c60_m_order_0015.tif aligned_C_c60_m_order_0016.tif aligned_C_c60_m_order_0017.tif aligned_C_c60_m_order_0018.tif aligned_C_c60_m_order_0019.tif aligned_C_c60_m_order_0020.tif aligned_C_c60_m_order_0021.tif aligned_C_c60_m_order_0022.tif aligned_C_c60_m_order_0023.tif aligned_C_c60_m_order_0024.tif aligned_C_c60_m_order_0025.tif aligned_C_c60_m_order_0026.tif aligned_C_c60_m_order_0027.tif aligned_C_c60_m_order_0028.tif aligned_C_c60_m_order_0029.tif aligned_C_c60_m_order_0030.tif aligned_C_c60_m_order_0031.tif aligned_C_c60_m_order_0032.tif aligned_C_c60_m_order_0033.tif aligned_C_c60_m_order_0034.tif aligned_C_c60_m_order_0035.tif aligned_C_c60_m_order_0036.tif aligned_C_c60_m_order_0037.tif aligned_C_c60_m_order_0038.tif aligned_C_c60_m_order_0039.tif aligned_C_c60_m_order_0040.tif aligned_C_c60_m_order_0041.tif aligned_C_c60_m_order_0042.tif aligned_C_c60_m_order_0043.tif aligned_C_c60_m_order_0044.tif aligned_C_c60_m_order_0045.tif aligned_C_c60_m_order_0046.tif aligned_C_c60_m_order_0047.tif aligned_C_c60_m_order_0048.tif aligned_C_c60_m_order_0049.tif aligned_C_c60_m_order_0050.tif aligned_C_c60_m_order_0051.tif aligned_C_c60_m_order_0052.tif aligned_C_c60_m_order_0053.tif aligned_C_c60_m_order_0054.tif aligned_C_c60_m_order_0055.tif aligned_C_c60_m_order_0056.tif aligned_C_c60_m_order_0057.tif aligned_C_c60_m_order_0058.tif aligned_C_c60_m_order_0059.tif aligned_C_c60_m_order_0060.tif aligned_C_c60_m_order_0061.tif aligned_C_c60_m_order_0062.tif aligned_C_c60_m_order_0063.tif
imfuse: Generating image with external tool enfuse
+ error 'Failed to generate enfuse image'
+ echo '
imfuse ERROR: Failed to generate enfuse image
'

imfuse ERROR: Failed to generate enfuse image

+ kill -s SIGINT 18255
++ trap_sigint
++ local Count=0
++ trap - ERR
++ set +x
imfuse: Received SIGINT

/home/holger/bin/imfuse_0.9.9-beta_mod.sh: Zeile 4848: 18606 Beendet                 readmagickmessage
imfuse: Current cache size: 29M /home/holger/.cache/imfuse
  You can clean the cache folder with option --rmcache.


@mviereck
Copy link
Owner Author

mviereck commented Jan 4, 2023

Mal noch ein Versuch:

sed -i 's/2>&1 | grep -v -E "loading/#grep "/' imfuse_0.9.9-beta.sh

Vielleicht verhält sich bash oder grep bei Dir anders als bei mir.

Dieses sed verändert diesen Befehl in Funktion enfuse_split():

        nice enfuse $Enfuseoptions -o "${Splitresult[$Split]}" "${Splitimagelist[$Split]}" 2>&1 | grep -v -E "loading next image|assuming all pixels should contribute|does not have an alpha channel|TIFFDecoder" || error "Failed to generate enfuse image"

Vielleicht läuft ab | grep irgendwas falsch. Da will ich nervige Meldungen ausblenden und echte Fehler erkennen. sed soll hier alles ab | grep deaktivieren.

@holgerd001
Copy link

holgerd001 commented Jan 4, 2023

Jetzt redet imfuse wie ein WQasserfall:
mod2_log.zip

Ein schönes Ergebnis ist auch dabei rausgekommen

832e03_eec695--bg=enfuse result

@mviereck
Copy link
Owner Author

mviereck commented Jan 4, 2023

Sehr gut!
Ich habe eine angepaßte Version von imfuse hochgeladen, ohne den grep Befehl. Dann schreibt enfuse zwar das Terminal voll, aber der Fehler sollte nicht mehr auftreten.

@holgerd001
Copy link

Stimmt. Die Fehlermeldung kommt jetzt nicht mehr.

@mviereck
Copy link
Owner Author

mviereck commented Jan 9, 2023

Ich arbeite zur Zeit an einer neuen Option --fft zur Maskenerzeugung, die vom Konzept deutlich von der Masse anderer Optionen abweicht. Sie basiert auf der Fourier Transformation, die Bilder in Sinuswellen umrechnet. Ich verstehe nicht wirklich, wie das vor sich geht, aber allmählich verstehe ich, wie ich das nutzen kann.
Erklärungen hier: http://www.fmwconcepts.com/imagemagick/fourier_transforms/fourier.html

Hier ein Beispiel, das mit wenig Optionen und sogar ohne --cutless und ohne --darkness ein passables Ergebnis liefert:

--fft=r100,s10,p10,log1000 --maskblur=s1 --cutwave=p100

(Da die Option noch in Arbeit ist, können sich die Parameter wieder ändern.)
7ce6bc_11a300--fft=r100,s10,p10,log1000--maskblur=s1--masklevel=t5--cutwave=p100 result

imfuse: Ready after 00:18:14

Das Appimage von Imagemagick unterstützt fft leider nicht. Ich mußte mir ImageMagick mit fft support selbst kompilieren.
magick -version muß Delegates (built-in): [...] fftw [...] anzeigen.

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