Page 1 sur 1

Script de focus stacking v2 pour vidéos

MessagePosté: 30 Juil 2020 17:42
de Eddy
Bonsoir le forum,

Le focus stacking en 5 min, de l'acquisition au post-traitement compris, ça vous tente ?

Je profite de mon retour pour partager une nouvelle version du script Linux de focus stacking créé il a quelques années, mais cette fois-ci pour une acquisition au format vidéo.

Nous avions longuement parlé des problèmes causés par les vibrations (si besoin, voir cette page de Charles Krebs), de la possibilité de relever le miroir d'un Reflex avant la prise de vue, etc. Par ailleurs, j'ai beaucoup appris sur le forum grâce à vous tous concernant les gammes d'optiques et leurs qualités respectives.

J'ai coutume de réaliser mes tests avec des basidiospores de Russula montées dans le réactif de Melzer pour mettre en évidence l'ornementation sporale. J'ai déjà eu l'occasion de présenter des résultats similaires à partir de clichés individuels. Cependant, à partir d'une vidéo, l'acquisition ne prend plus que quelques secondes pour une qualité comparable... j'ajoute que c'est une façon commode de remettre en service un Canon 500D qui capture en full HD. Côté optique c'est un Olympus SPanApo 100 ON 1.4 à immersion à l'huile et un projectif Olympus NFK 1.67x. Le condenseur est l'universel d'Olympus, à lentille frontale ON 0.9.

Un lien box.net vers la vidéo de cet exemple (trop volumineuse pour être hébergée ici) et l'image finale ci-dessous (après un léger crop manuel).

Basidiospores_Russula_Melzer.jpg
Exif et Meta MicroCartouche Basidiospores_Russula_Melzer.jpg (129.99 Kio) Vu 6298 fois

Le script est ci-dessous. Il se déroule en trois étapes principales : (1) extraction des images (frames) à partir de la vidéo, (2) alignement des images et (3) focus stacking proprement dit. J'utilise ffmpeg pour la première étape, mais on peut aussi utiliser vlc ou d'autres outils. La troisième étape implique enfuse, mais certains logiciels de focus stacking ont une version en ligne de commande (notamment Zerene Stacker).

Code: Tout sélectionner
#! /bin/bash

LOG="log"
BASE="$(basename "$1" .MOV)"
FRAMES="8"
FORMAT="frame%03d.tif"

function ensure_exists() {
  which $1 > /dev/null || (echo "Error: $1 not found."; exit 2)
}

mkdir -p "$BASE" # Dossier contenant les images.
mkdir -p "$LOG"  # Dossier contenant les fichiers log.

echo "Script de focus stacking version 2.0 (mode vidéo)"

echo -n "* Extraction d'une image sur $FRAMES à partir de $(basename $1)... "
ensure_exists "ffmpeg"
# Des vibrations se produisent souvent pendant la première seconde, lorsqu'on
# enclenche la vidéo. Pour cette raison, les images correspondantes ne sont pas
# extraites. On extrait également une image sur 10.
# Référence : https://superuser.com/a/391749
ffmpeg -ss 00:00:01 -i "$1" \
  -vf "select=not(mod(n\,$FRAMES))" \
  -vsync vfr \
  -compression_algo raw \
  -pix_fmt rgb24 \
  "$BASE/$FORMAT" &> "$LOG/ffmpeg.log"
echo "OK ($(ls "$BASE/$tif" | wc -l) images)"

cd $BASE
ensure_exists "rename"
rename 'y/A-Z/a-z/' *

echo -n "* Correction de l'alignement et création des masques... "
ensure_exists "align_image_stack"
align_image_stack -v --gpu -C -i -a mask *.tif > "../$LOG/align_image_stack.log"
echo "OK"

echo -n "* Calcul de l'image finale... "
ensure_exists "enfuse"
enfuse -o "../$BASE.tif" \
  --exposure-weight=0 \
  --saturation-weight=0 \
  --contrast-weight=1 \
  --hard-mask \
  --contrast-window-size=5 \
  --compression=lzw \
  mask*.tif &> "../$LOG/enfuse.log"
echo "OK"

cd ..

echo -n "* Post-traitement et conversion JPEG... "
ensure_exists "convert"
convert "$BASE.tif" \
  -colorspace Gray \
  -normalize \
  -unsharp 2 \
  -quality 100 \
  "$BASE.jpg"
echo "OK"

echo -n "* Effacement des fichiers intermédiaires... "
rm -rf "$BASE" "$BASE.tif"
echo "OK"

Pour toute question n'hésitez pas ! Bonnes observations :-)

Cordialement,
Eddy

Re: Script de focus stacking v2 pour vidéos

MessagePosté: 31 Juil 2020 16:33
de JMP76
Bonjour,

sujet comme toujours intéressant...
J'avais créé il y a 7 ans un programme complet pour faire ce travail. On peut voir la discussion ici http://www.lenaturaliste.net/forum/viewtopic.php?f=56&t=12521 et svt
Cela donnait de bons résultats, et m'a permis de faire des photos en pseudo-relief. C'est en effet une méthode très rapide. Et qui permet d'obtenir de bons résultats même à main levée. J'avais aussi utilisé une fonction d'accumulation des images pour améliorer le rapport S/B des images.
Je viens de recevoir une caméra 4K et si j'ai le temps, je regarderai la possibilité de faire du relief en 8MPx. A la rentrée...

Cordialement

Re: Script de focus stacking v2 pour vidéos

MessagePosté: 31 Juil 2020 22:17
de Eddy
Bonjour Jean-Marie, le forum,

Merci pour le lien, la discussion est très intéressante. Effectivement la limite reste la résolution vidéo. Je joins quelques images de diatomées (de la lame test de D. Prades) obtenues à partir de vidéos en gardant un frame sur cinq (et Zerene Stacker, car align_image_map est hélas rapidement lent...) et sans autre retouche ultérieure que crop et désaturation. Je parle sous contrôle des diatomistes du forum, il me semble que les résultats sont encourageants. On attend avec impatience les essais en 4k !

planche_diatomees.jpg
Exif et Meta MicroCartouche planche_diatomees.jpg (187.69 Kio) Vu 6210 fois


Cordialement,
Eddy

Re: Script de focus stacking v2 pour vidéos

MessagePosté: 01 Aoû 2020 11:50
de DanielCrabbé
Bonjour Eddy,

Je ne suis pas diatomiste, mais cela me paraît parfaitement résolu.
Moi qui trouve le stacking manuel pénible, il faudrait que j'explore cette piste.
Je ne travaille pas sous Linux mais je suppose que je devrais pouvoir trouver une solution équivalente en Windows 10.
Je possède la même configuration que toi pour la microscopie. Pour la photo, comme le projectif 1.67 était hors de prix, je suis resté avec mon 2.5 mais j'ai acquis un Canon 6D (full frame) en fin de commercialisation et qui au moins peut me servir également à autre chose.
Penses-tu qu'une solution équivalente serait possible pour le stiching ?
Encore bravo pour tes clichés.

Amicalement.

Daniel

Re: Script de focus stacking v2 pour vidéos

MessagePosté: 01 Aoû 2020 21:31
de André
Bonjour à tous, Eddy

"Résultats encourageants" je trouve que l'adjectif encourageant est un peu faible car je qualifierais ces résultats de plus que parfaits !

Je suppose que c'est du DIC avec des objectifs planapo ?

Re: Script de focus stacking v2 pour vidéos

MessagePosté: 02 Aoû 2020 15:02
de JMP76
Bonjour,

Je trouve tes résultats excellents sur des diatomées. Caméra N&B ou couleur?

Concernant la 4k, j'ai laissé filer un boitier à 65€ +port en Corée... et je le regrette! Car la petite caméra 4K que j'ai reçue ne fait que 1/2.5" et ne va pas me permettre simplement de la connecter au BHS (à cause de la compensation) or mes mesures au SlantEdge m'ont bien démontré l'utilité de la compensation. Cette caméra sera surtout utilisée pour lever un doute sur mes mesures SlantEdge.
Il faut que je recherche un boitier aps-c avec la 4k pour environ 100€ et c'est donc un défi.

Il me faut relire mon lien ... car c'était il y a 7 ans!
Et réactiver les essais, car à l'époque je faisais cela avec du vieux matos. Depuis je suis passé au BHS avec des objectifs Splan ou MSplan (mais impose compensation). Je reste persuadé que le 1920x1080 donne de bons résultats (je ne publie pas comme Fred ou Daniel)

Cordialement

Re: Script de focus stacking v2 pour vidéos

MessagePosté: 02 Aoû 2020 19:49
de Eddy
Bonjour Daniel, André, Jean-Marie, le forum,

Merci pour vos retours positifs. L'objectif est effectivement apochromatique (c'est un 60x de marque Nikon) et l'illumination est bien du DIC (celui d'Olympus). Pour répondre à Jean-Marie : les vidéos sont obtenues avec un Canon 500D et les images ont été désaturées en post-traitement.

Composer un panorama à partir d'une vidéo est une idée séduisante. Sur le principe ça ne devrait pas poser de problème. En pratique, les capteurs CMOS utilisent un mode de lecture ligne à ligne (le rolling shutter) qui entraîne des déformations lors des mouvements rapides (très marqué sur le 500D). Le 6D est certainement meilleur sur ce point.

Dernièrement, j'ai essayé les vidéos RAW avec l'outil Magic Lantern (une addition au firmware de Canon, qui offre des fonctionnalités supplémentaires). Jusqu'à présent je n'ai pas observé de grosse différence de qualité avec le mode HD standard, mais le 500D n'est clairement pas le meilleur boîtier pour ce genre de test. À suivre.

Cordialement,
Eddy