Masques d'image
Depuis Siril 1.5.0, les masques d'image sont pris en charge, permettant de masquer les opérations sur les images. Cela peut être utilisé par exemple pour appliquer un masque d'étoiles aux opérations de déconvolution afin de minimiser les artefacts d'anneau, ou pour cibler un renforcement de saturation sur des couleurs spécifiques.
Astuce
Les masques d'image ne s'appliquent qu'aux opérations sur une seule image - ils sont complètement ignorés pour toutes les opérations de séquence.
Les masques peuvent être en 8, 16 ou 32 bits. Il existe une préférence pour la profondeur de bits de masque par défaut à utiliser, bien que la plupart des opérations de création de masque permettent de spécifier une profondeur de bits.
Astuce
Dans la documentation, la convention adoptée est que VRAI signifie la valeur maximale du masque pour la profondeur de bits du masque (255 pour les masques 8 bits, 65535 pour les masques 16 bits et 1,0 pour les masques flottants 32 bits). FAUX désigne une valeur de masque nulle. Lorsque la valeur du masque d'un pixel est VRAIE, une opération d'image appliquée sera pleinement appliquée au pixel ; lorsqu'elle est FAUSSE, l'opération d'image laissera le pixel totalement inchangé. Les valeurs intermédiaires mélangeront le résultat de l'opération d'image avec l'image originale, de sorte que l'opération d'image sera partiellement appliquée.
Dans le GUI, le masque peut être activé ou désactivé à l'aide d'une case à cocher intégrée à l'onglet de la fenêtre du masque. Les masques d'image s'appliquent également aux commandes d'opération d'image, mais afin de conserver l'approche « sans état » des commandes Siril, l'option -mask doit être fournie pour indiquer à la commande de respecter le masque (la case à cocher du GUI est ignorée).
Création de masque
Les masques d'image peuvent être créés des manières suivantes, à la fois via le GUI et les commandes Siril :
À partir de la luminance ou d'un canal de l'image actuelle. La pondération de luminance peut être basée sur la perception humaine, pondérée de façon uniforme, ou des poids personnalisés peuvent être fournis.
À partir d'un fichier séparé, par ex. un masque d'étoiles. Le masque peut être créé à partir de la luminance de l'image ou d'un canal, comme pour la création d'un masque à partir de l'image actuelle. Notez que la largeur et la hauteur de l'image utilisée comme masque doivent correspondre à celles de l'image masquée.
À partir de la chromaticité de l'image actuelle.
À partir d'un polygone à main levée dessiné sur l'image (des polygones à main levée peuvent être ajoutés au masque de l'image ou en être retirés).
À partir des étoiles détectées dans l'image actuelle.
À partir de scripts Python (via l'interface sirilpy). Python peut spécifier à la fois des masques matriciels à l'aide de
set_image_mask()et des masques vectoriels à l'aide demask_add_polygon()etmask_subtract_polygon().
Dans le GUI, la création / suppression de masque d'image s'effectue via un nouveau sous-menu du menu du clic droit. Les opérations sur les masques d'image existants s'effectuent via un nouveau menu du clic droit spécifique aux masques, qui apparaît lorsque l'on se trouve dans l'onglet Masques de la zone de dessin principale.
Manipulation des masques
Les masques d'image peuvent être manipulés des manières suivantes, à la fois via le GUI et les commandes Siril :
Auto ajustement du masque.
Appliquer des seuils d'intensité au masque : le masque devient VRAI entre les valeurs lo et hi et FAUX partout ailleurs. Cela permet de définir le masque VRAI jusqu'à une certaine valeur, VRAI au-dessus d'une certaine valeur ou VRAI entre certaines valeurs (et en conjonction avec l'inversion du masque, VRAI en dessous d'une valeur lo et au-dessus d'une valeur hi, et FAUX entre les deux). Une plage d'adoucissement peut également être spécifiée. Celle-ci adoucit le masque sur une plage de valeurs de pixels au-dessus de hi et en dessous de lo pour donner un masque basé sur l'intensité plus progressif : si un adoucissement spatial est nécessaire, cela peut être obtenu à l'aide de la fonctionnalité d'adoucissement de masque séparée.
Flouter le masque avec un flou Gaussien.
Changer la profondeur de bits du masque.
Effacer le masque (le retirer de l'image).
Adoucir le masque spatialement (un adoucissement linéaire est appliqué. Si le masque contient des valeurs intermédiaires plutôt que uniquement VRAI et FAUX, le masque sera d'abord binarisé de sorte qu'il soit VRAI pour les valeurs au-dessus de la moitié du maximum et FAUX ailleurs.
Inverser le masque.
Gradient du masque. Ceci calcule la magnitude du gradient, normalisée de sorte que le gradient maximal soit mis à l'échelle de VRAI.
Les opérations sur les masques d'image créent un état d'annulation et peuvent donc être annulées et rétablies de la même manière que les opérations d'image.
Avertissement
Comme pour les commandes de traitement d'image, les commandes de traitement de masque ne créent pas d'état d'annulation.
Opération sur le masque d'image
Lorsqu'un masque d'image existe et doit être appliqué, cela fonctionne comme suit :
Une copie de l'image initiale est créée en mémoire.
L'opération d'image est calculée.
Le résultat est fusionné avec l'original selon la valeur du masque.
Astuce
Notez que cela signifie que le masque n'est pas utilisé aux étapes intermédiaires d'une opération d'image (par exemple, chaque itération de la déconvolution de Richardson-Lucy n'a pas le masque appliqué, seul le résultat final est masqué dans l'image originale).
Visualisation du masque d'image
Le masque de l'image est visualisé de deux façons :
Si une image possède un masque d'image, celui-ci est affiché dans un onglet supplémentaire de la zone de visualisation principale. Cela dispose également d'un interrupteur dans le menu contextuel attaché à l'onglet de la fenêtre du masque, utilisé pour activer / désactiver le masque pour les opérations du GUI.
En option, le masque de l'image peut teinter la vue dans les fenêtres de visualisation principales avec des degrés de rouge, les valeurs de masque FAUSSES apparaissant entièrement en rouge, les valeurs de masque VRAIES montrant l'image non teintée et les zones partiellement masquées apparaissant avec une teinte rouge partielle. Ce comportement peut être activé ou désactivé dans les préférences ainsi que depuis le menu contextuel attaché à l'onglet de la fenêtre du masque.
Image masks are compatible with the Region of Interest processing system, although this is only noticeable if the tint vport option is disabled. When performing a ROI preview, the section of the mask corresponding to the ROI will be applied to the pixels within the ROI.
Les masques d'image ne sont pas actuellement enregistrés lorsqu'un fichier est enregistré. Il est prévu de revoir ce point à l'avenir.
Applicabilité des masques d'image
Les opérations suivantes prennent en charge les masques d'image :
Aberration Inspector - this doesn't update the image but if the mask tints image option is enabled, then the same tint will show in the aberration inspector.
Étirement Asinh
CLAHE
Étirement par courbes
DDP (la commande
ddp- au cas où quelqu'un l'utiliserait encore...)Déconvolution (Richardson-Lucy, Split Bregman et Wiener)
Débruitage
Edge preserving filters
Generalized Hyperbolic Transform stretches
Flou gaussien
Étirements d'histogramme, y compris l'auto ajustement
Filtre médian
Negative (
negcommand) (Note: this does not apply to the GUI Negative view button as that is just a preview mode, it doesn't affect the image data)Gradient rotationnel (filtre L-S) - le cas d'usage est peut-être limité, mais il est possible que quelqu'un souhaite une comète « structurelle » avec des étoiles et un fond normaux
Saturation
Commandes simples d'opération d'image (
iadd,idiv,imul,isub,fmul,fdiv,addmax,fill,ffilletoffset)Starnet
Réduction soustractive du bruit chromatique (SCNR)
Seuillage (commandes threshlo, threshhi, thresh)
Filtrage Unpurple (remarque : cette commande dispose actuellement d'une fonctionnalité optionnelle de masque d'étoiles intégré, mais les masques d'image sont également pris en charge en plus, et les deux peuvent être utilisés ensemble)
Masque flou (unsharp mask) (la commande
unsharp)
Les opérations de géométrie ne mettent pas à jour les valeurs de pixels en fonction du masque, mais elles appliquent bien exactement la même transformation géométrique au masque qu'à l'image, garantissant que la zone masquée corresponde après la transformation et que le masque conserve la même taille que l'image transformée.
Les opérations suivantes ne prennent pas en charge les masques d'image :
Toutes les commandes de séquence.
Fonctions d'analyse (
cdg,entropy,bg,bgnoise,stat,find_cosme,find_cosme_hot,psf,histo, profilage d'intensité) - celles-ci ne mettent pas du tout à jour l'image, elles affichent simplement des statistiques ou mettent à jour la superposition.Fonctions d'analyse astrométrique et de catalogue (PSF dynamique,
findstar, résolution astrométrique, recherche d'étoile compagne) - celles-ci ne mettent pas du tout à jour l'image, elles se contentent de l'analyser.Réduction du banding (cela concerne un problème du capteur, il n'est donc pas pertinent de l'appliquer à seulement une partie de l'image).
Extraction de canal (y compris Ha, Ha/Oiii, extraction du vert et séparation par canal / CFA) - celles-ci créent de nouvelles images, les masques n'ont donc pas de sens ici.
Matrice de correction des couleurs (cela s'applique à toutes les données issues du capteur, il ne serait donc pas pertinent de l'appliquer à seulement une partie de l'image).
Correction cosmétique, fix_xtrans, grey_flat, calibrate_single (comme ci-dessus, celles-ci s'appliquent à l'image complète issue du capteur).
Création de PSF pour la déconvolution (cela ne met pas à jour l'image, le masquage n'aurait donc aucun effet).
Transformée de Fourier, Pixelmath, composition RVB, ondelettes à trous - comme ci-dessus, celles-ci créent de nouvelles images et les masques n'ont pas de sens.
mirrorx_single - aucune opération de géométrie n'applique le masque aux valeurs de pixels, mais les autres mettent bien à jour la géométrie du masque pour correspondre à celle de l'image. Dans ce cas, la commande
mirrorx_singles'applique à une image sur fichier, qui ne peut pas contenir de masque.commande
nozero(la suppression des valeurs purement nulles est quelque chose qui, si nécessaire, devrait s'appliquer à l'image entière).Python : la commande
pyscriptet les scripts Python en général ne respectent pas le masque de l'image, mais ils peuvent effectuer leur propre masquage et ont accès au masque de l'image Siril via les méthodes SirilInterfaceget_image_mask(),set_image_mask(),get_image_mask_state(),set_image_mask_state(),mask_add_polygon()etmask_subtract_polygon().L'étalonnage des couleurs (spectro)photométrique - celui-ci s'applique à des images entières plutôt qu'à des parties d'image.
Fonctions d'étoiles synthétiques (resynthèse d'étoiles, désaturation d'étoiles) - celles-ci s'appliquent à une image entière. Je pense qu'elles n'ont pas besoin d'être compatibles avec les masques, mais je serais ouvert à envisager le cas si un cas d'usage raisonnable pour les masquer peut être avancé.
Commandes utilitaires, par exemple
boxselect- comme celles-ci n'affectent pas les données de pixels, les masques ne sont pas pertinents.