Exemples ImageMagick -- Traitement des photos numériques
- Préface et index des exemples ImageMagick
- Métadonnées de l'appareil photo numérique, le profil EXIF
- Orientation des photos numériques
- Améliorations des couleurs
- Éclaircir les photos sous-exposées
-
Binning - Réduction du bruit numérique (En construction)
-
Correction d'une légère rotation - redresser une photo qui n'est pas tout à fait de niveau
- Effet tilt-shift - donner à un paysage l'aspect d'une maquette artificielle
- Images superposées PNG-JPEG - compresser des pages tout en gardant le texte net
- Photos superposées - chevauchements flous de photos accolées
- Doubles expositions - mélanger plusieurs photos d'une même scène
- Protéger l'anonymat d'une personne - brouiller une partie d'une photo
- Ajouter une texture à une image
- Masquage par incrustation couleur (chroma key) - Modifier par zones d'une couleur précise
- Images à colorier pour enfants
- Croquis au crayon
- Suppression du vignettage
L'un des usages principaux d'ImageMagick est le traitement et la modification de photographies prises avec les appareils photo numériques modernes. Ces appareils prennent en général des photos assez grandes et de haute résolution, et y intègrent des métadonnées sur l'heure, l'échelle, le zoom, l'appareil, l'orientation, etc. Il existe même des projets pour relier les appareils photo aux téléphones mobiles, afin qu'ils puissent deviner où vous étiez au moment de la prise de vue et qui pourrait figurer sur la photo (d'après les téléphones mobiles présents devant l'objectif). Nous voyons ici les bases du traitement des photos numériques, et même leur conversion à d'autres fins, comme des rendus artistiques. Un merci tout particulier à Walter Dnes, utilisateur d'appareil photo numérique, pour son aide dans l'amélioration des photos numériques.
Métadonnées de l'appareil photo numérique, le profil EXIF
Lorsqu'un appareil photo numérique prend une photo, il inclut aussi beaucoup d'informations supplémentaires dans le fichier JPEG enregistré. Ces métadonnées sont connues sous le nom de profil EXIF, et sont prévues spécifiquement pour les laboratoires photo et le développement. La commande « magick identify » d'ImageMagick, avec le réglage « [-verbose](https://imagemagick.org/command-line-options/#verbose) », affiche ces informations Exif. Voici les données EXIF d'une photo que j'ai prise d'une pagode, au zoo de Kunming, dans le sud de la Chine.
magick identify -format "%[EXIF:*]" pagoda_sm.jpg |\
sed 's/\(.\{46\}\).*/\1/' | column -c 110
| Les données EXIF, ou n'importe quelle sortie d'identify, devraient être traitées sans tenir compte de la casse. Beaucoup d'anciennes versions d'IM, par exemple, affichent « EXIF: » (en majuscules) plutôt que « exif: » (en minuscules).
---|---
Voici un exemple similaire, mais qui utilise une expression de type « globbing » (à la manière du shell) pour limiter la sortie aux champs EXIF concernant l'heure (Time)...
magick identify -format "%[exif:*time*]" pagoda_sm.jpg
Le profil EXIF contient beaucoup d'informations sur cette photo. Par exemple
- Mon appareil est un Panasonic ('
Make'), DMC-LZ1 ('Model'). - L'appareil était pivoté ('
Orientation'). Mais j'ai dû corriger cette rotation sans ajuster les données EXIF. L'appareil était aussi légèrement incliné vers le haut, mais cette information n'est pas enregistrée. - La '
FocalLength' de '37mm' montre que je n'ai pas utilisé la fonction « zoom optique » de mon appareil. Mon appareil pouvait aller jusqu'à un zoom optique 6X, pour une 'FocalLength' de '366/10', soit '222mm'. - Et le '
DigitalZoomRatio' montre que je n'ai pas non plus zoomé numériquement. - L'appareil a aussi utilisé un '
ExposureTime' rapide de 1/8 de seconde, une ouverture 'MaxApertureValue' de 3mm, soit un 'FNumber' de '5.6', et un 'ISOSpeedRating' de '64'. - Le flash ('
LightSource') n'a pas été utilisé. - L'image d'origine faisait 1728 sur 2304 pixels ('
ExifImageLength' et 'ExifImageWidth'). Bien que l'image réelle, si vous voulez vérifier, soit plus petite ; j'ai donc dû la rogner et/ou la redimensionner. - Et, sans doute le plus important, elle a été prise vers 14h05 le 9 juillet 2005, d'après la chaîne '
DateTime'. Cela suppose que j'avais réglé l'heure de l'appareil correctement (ce que j'avais fait). - Les appareils plus récents peuvent même disposer d'une position GPS, et éventuellement d'une direction à la boussole pour la prise de vue !
Est aussi incluse, mais non listée ci-dessus, une petite image d'aperçu « miniature » que l'appareil utilisait sur son propre écran. Il existe également des fonctions pour marquer les photos que l'on veut faire « développer » ou imprimer par des tireuses photo, et pour ajuster d'autres paramètres d'impression. Cependant, cela est rarement utilisé par la plupart des gens. Beaucoup de ces réglages peuvent être très utiles aux utilisateurs, mais le plus utile est généralement la date et l'heure de la photo. Cela suppose bien sûr que la date et l'heure aient été correctement réglées sur l'appareil avant la prise de vue. Beaucoup de gens s'intéressent aussi à l'orientation de l'image, afin qu'elle puisse être pivotée correctement à l'affichage ; c'est justement ce que nous allons voir ensuite. Toutes ces données, et en particulier l'image d'aperçu, peuvent occuper pas mal de place dans l'image. Et il se peut que je ne veuille pas vraiment que le monde entier sache que j'étais à Kunming, en Chine, en juillet 2005. Vous pourriez donc vouloir retirer les données EXIF de vos images avant de les publier sur le World Wide Web. De plus, la taille d'une image issue d'un appareil photo numérique est en général très grande (et de plus en plus), ce qui permet de l'imprimer en qualité photo, mais reste bien trop grande pour un usage sur le WWW, et surtout pour des miniatures. Ainsi, à moins de vouloir que les utilisateurs puissent réellement imprimer des images de qualité photo, je ne publierais pas l'image d'origine directement. L'image ci-dessus, par exemple, a été rognée et redimensionnée pour les exemples IM, mais j'ai volontairement laissé les données EXIF intactes pour l'exemple. Normalement, je supprimerais cette information.
Orientation des photos numériques
On m'a dit que Photoshop pivote automatiquement les images numériques d'après le réglage EXIF 'Orientation' ; IM le fait également en incluant un opérateur « [-auto-orient](https://imagemagick.org/command-line-options/#auto-orient) », après la lecture de l'image. Cependant, et c'est important
Le format JPEG est avec perte (lossy)
Cela signifie que chaque fois que vous décodez et enregistrez au format de fichier JPEG, vous dégradez légèrement l'image. En tant que processeur d'images généraliste, IM décode et réencode toujours entièrement le format ; il dégrade donc toujours les images JPEG lorsqu'il les réenregistre. Pour plus d'informations sur la nature du format JPEG, voir Format de fichier image JPEG. L'idée est de n'utiliser IM pour corriger l'orientation d'une photo numérique (avec « [-auto-orient](https://imagemagick.org/command-line-options/#auto-orient) ») que lorsque vous effectuez aussi d'autres opérations de modification de l'image, comme la Création de miniatures, l'Annotation d'images, le Filigrane, ou même les Ajustements d'exposition. IM peut extraire l'orientation courante (sous forme de nombre) de la photo à l'aide d'une échappée de propriété d'image... | |
magick identify -format '%[exif:orientation]' pagoda_sm.jpg
![[IM Text]](../static/img/photos/orient_show.txt.gif)
IM fournit un opérateur spécial « [-orient](https://imagemagick.org/command-line-options/#orient) » (utilisez « [-list](https://imagemagick.org/command-line-options/#list) orientation » pour voir les valeurs possibles). | |
magick pagoda_sm.jpg -orient bottom-right \
-format '%[exif:orientation]' info:
![[IM Text]](../static/img/photos/orient_setting.txt.gif)
Ces méthodes de réglage des métadonnées vous permettent d'ajuster l'orientation des photos que vous avez modifiées, en particulier celles que vous avez pivotées. Notez qu'une photo correctement orientée a une orientation de 'Top-Left', soit 1. Bien sûr, vous ne devriez pas retirer les métadonnées EXIF (avec « [-strip](https://imagemagick.org/command-line-options/#strip) » ou « [-thumbnail](https://imagemagick.org/command-line-options/#thumbnail) ») si vous prévoyez d'utiliser « [-auto-orient](https://imagemagick.org/command-line-options/#auto-orient) » plus tard dans le traitement de l'image. Utilisez-le avant de supprimer les métadonnées de l'image. Si vous voulez vraiment corriger l'orientation de votre photo sans la dégrader ni la modifier autrement, je vous suggère d'utiliser le programme JHead. Par exemple, ici je corrige l'orientation d'une photo et je supprime la miniature d'aperçu intégrée de toutes les photos numériques d'un répertoire.
jhead -autorot *.jpg
| _La rotation JPEG sans perte ne fonctionne correctement que pour les images dont la taille est divisible par 8 ou 16. C'est le cas de la plupart (mais pas de toutes) des photos d'appareils numériques. Si vous essayez avec une image de taille impaire, les blocs du bord droit ou du bord bas (contenant la taille partielle) ne seront pas positionnés correctement dans l'image finale, car ces blocs ne peuvent exister que sur le bord droit ou le bord bas.
Pour un exemple, voir cette discussion précise_
---|---
Le programme JHead vous permet aussi d'ajuster la date des photos (si l'heure de votre appareil était mal réglée, ou si vous avez voyagé dans d'autres fuseaux horaires), d'extraire/supprimer/remplacer la miniature d'aperçu, de définir le champ de commentaire de l'image, de supprimer les profils photoshop, et d'effectuer un rognage de base de l'image (pour retirer cet inconnu qui s'exhibe ;-), etc., sans dégrader les données de l'image JPEG. Je recommande ce programme, ou d'autres du même genre (voir Autres programmes de traitement JPEG), pour corriger cette information. Assurez-vous simplement qu'il ne décode/réencode pas réellement les données de l'image JPEG. Un dernier point à propos de l'orientation. Si vous avez pointé votre appareil presque droit vers le haut ou vers le bas, le réglage d'orientation EXIF peut ne pas se résoudre correctement. Il en va de même pour les prises de vue en biais ou inclinées. L'orientation (et les appareils) n'ont tout simplement aucun repère pour ces situations. Votre seul choix pour de telles photos est d'effectuer les rotations vous-même à l'aide du « jpegtrans » de plus bas niveau et sans perte, ou du « [-rotate](https://imagemagick.org/command-line-options/#rotate) » d'IM, puis soit de réinitialiser le réglage d'orientation EXIF (avec JHead ou l'opérateur « [-orient](https://imagemagick.org/command-line-options/#orient) » d'IM), soit simplement de supprimer le profil EXIF.
Autres modifications avec perte d'IM...
Si vous redimensionnez ou modifiez aussi l'image, par exemple en réduisant
sa qualité et sa taille pour un usage web, la perte de données est déjà un
fait acquis. Lors de ces opérations, IM peut alors faire des choses similaires,
vous permettant de tout réaliser en un seul cycle « chargement-enregistrement ».
Pivoter TOUTES les images en paysage -rotate 90\<
en portrait -rotate -90\>
Améliorations des couleurs
Avant de continuer, il est recommandé de consulter d'abord les Modifications des couleurs pour une introduction aux techniques générales de modification des couleurs qui seront utilisées. La Normalisation (avec « [-normalize](https://imagemagick.org/command-line-options/#normalize) ») des dessins au trait et des graphiques à fort contraste peut donner d'excellents résultats. Mais les photos normalisées peuvent paraître irréelles et, comme on l'a dit plus haut, peuvent aussi mal s'imprimer. L'opérateur « [-contrast-stretch](https://imagemagick.org/command-line-options/#contrast-stretch) » peut limiter les « bornes » de la normalisation, mais les opérateurs « [-levels](https://imagemagick.org/command-line-options/#levels) » et/ou « [-sigmoidal-contrast](https://imagemagick.org/command-line-options/#sigmoidal-contrast) » permettent des ajustements plus « doux » (voir Ajustements d'histogramme pour une discussion de plus bas niveau sur ce que font ces opérateurs). L'image d'entrée ci-dessus est une gracieuseté de « Tong », de la liste de diffusion IM.
Éclaircir les photos sous-exposées Contribution de Walter Dnes
Parfois, il n'y a tout simplement pas assez de lumière disponible pour permettre une exposition correcte. À d'autres moments, il faut utiliser des temps d'exposition plus courts que l'optimal, afin d'éliminer le flou de mouvement. Les zones sombres des photos numériques sous-exposées peuvent être éclaircies de manière préférentielle, sans cramer les hautes lumières, à l'aide de l'opérateur « [-sigmoidal-contrast](https://imagemagick.org/command-line-options/#sigmoidal-contrast) », avec un seuil de '0%'. Voir Contraste sigmoïdal non linéaire pour plus de détails. Voici un exemple de légère sous-exposition, pris lors d'un concert gratuit après le coucher du soleil. Il comporte beaucoup de zones bien éclairées, qui sont nettes, mais aussi des zones sombres que j'aimerais rendre plus visibles.
magick night_club_orig.jpg -sigmoidal-contrast 4,0% night_club_fixed.jpg
| _Comme toujours, vous devriez utiliser un format sans perte comme TIFF ou PNG pour le travail intermédiaire. Le format JPEG n'est employé ici que pour réduire l'espace disque et la bande passante de téléchargement en vue d'une publication web.
Sélectionnez l'image pour voir la version agrandie réellement utilisée par les exemples, plutôt que la petite miniature affichée._
---|---
Et voici un exemple de forte sous-exposition, une prise de vue nocturne depuis mon balcon, regardant vers le sud en direction de la ville de Toronto.
magick night_scape_orig.jpg -sigmoidal-contrast 10,0% night_scape_fixed.jpg
Le paramètre principal contrôle l'ampleur de l'éclaircissement. Plus l'éclaircissement requis est important, plus la valeur utilisée est élevée. Et plus l'image de sortie paraîtra granuleuse. Cela vient du fait que les petites erreurs de pixels sont elles aussi amplifiées. L'éclaircissement par contraste sigmoïdal tend à atténuer l'extrémité rouge du spectre. Vous pourriez finir par devoir choisir un paramètre qui donne les tons chair les plus naturels, plutôt que le niveau de luminosité que vous vouliez vraiment. En cas de forte sous-exposition, vous obtiendrez, après éclaircissement, une image en noir et blanc granuleuse quelque peu enjolivée. C'est une limite physique de l'amélioration d'image numérique. S'il n'y a aucune donnée de couleur présente, IM ne la générera pas pour vous. Dans la réalité, les briques du côté droit de mon balcon sont rougeâtres, et les arbres en contrebas sont verts.
Binning -- Réduction du bruit numérique Contribution de Walter Dnes
Beaucoup de photographes sérieux sont mécontents des effets secondaires de la « course aux mégapixels » menée par les fabricants d'appareils photo numériques. Les fabricants font tenir plus de mégapixels dans le capteur d'un appareil en les rendant plus petits. Des pixels plus petits donnent une image plus bruitée à réglage ISO égal, ce qui contraint les gens à utiliser des réglages ISO plus bas. Employer des sensibilités ISO plus basses pour éviter le bruit exige des temps d'exposition plus longs. Cela signifie à son tour que la plupart des appareils numériques grand public sont en pratique inutilisables en intérieur au-delà de la portée d'environ 3 mètres (10 pieds) de leur flash intégré, sauf pour une nature morte prise avec l'appareil sur trépied. Beaucoup d'utilisateurs échangeraient volontiers quelques pixels contre des images moins bruitées à des réglages ISO plus élevés, mais les commerciaux qui dirigent les entreprises refusent d'y voir une option. Heureusement, ce compromis peut être réalisé après coup sur les photos numériques. Le terme technique est le « binning ». La théorie simplifiée est la suivante...
- Prendre une grille de pixels n sur n, et faire la moyenne de leurs composantes pour obtenir un « super-pixel ».
- Le signal est proportionnel à l'aire de pixels combinée, ce qui signifie que la quantité de signal a augmenté d'un facteur n^2.
- Le bruit est aléatoire. Il est donc proportionnel à la racine carrée de l'aire de pixels combinée, soit un facteur n. Le résultat net est que le RSB (rapport signal/bruit) a augmenté d'un facteur n. Voir Glossaire photo, Binning pour plus de détails.
| Lorsqu'une photo numérique 1600x1200 est réduite par binning à 800x600 (c.-à-d. une grille 2x2), le rapport signal/bruit est doublé. De même, une image 2560x1920 réduite par binning 3x3 à 853x640 pixels bénéficiera d'une amélioration d'un facteur 3 du rapport signal/bruit. | Pour tirer parti du binning, l'image doit être un multiple entier de la taille finale souhaitée. |
|---|---|
Dans ImageMagick, le réglage spécial « [-filter](https://imagemagick.org/command-line-options/#filter) » à 'box' fait la moyenne de groupes de pixels vers un pixel unique lorsque vous « [-resize](https://imagemagick.org/command-line-options/#resize) » une image (voir Filtres de rééchantillonnage pour les détails). Cela veut dire que, pour faire un « binning », il suffit de redimensionner l'image correctement. |
En construction
Walter Dnes a aussi fourni le script d'origine binn pour effectuer les calculs, rogner l'image au minimum et réaliser le « binning ». Exemples de binning 3Exemples de binning 4
Recettes de conversion de photos
Correction d'une légère rotation -- Rendre une photo plus de niveau
Situation typique. Vous avez pris une photo, mais l'image n'est pas de niveau, et vous voulez la corriger.
Par exemple, voici une photo que j'ai prise avec un appareil tenu à la main à Pékin, en 2008, depuis la colline du parc Jingshan, juste derrière la Cité interdite. Non, ce n'est pas la Cité interdite elle-même, mais un temple de l'autre côté de la colline. Cliquez sur la miniature pour voir une image plus grande. Oui, l'image est petite, et vous devriez appliquer la solution à l'image d'origine plutôt qu'à une petite miniature, mais la technique est la même pour n'importe quelle image. Dans ce cas, l'image doit être pivotée de -1,8 degré pour être corrigée. Or, si vous vous contentez de pivoter l'image, vous obtiendrez une image légèrement plus grande contenant des zones de couleur dans les coins, rendant la correction évidente et disgracieuse. |
magick beijing_tn.png -rotate -1.95 beijing_rotate.png
Même si vous rogniez l'image pour la ramener à sa taille d'origine, comme montré dans Rotations d'image simples, vous obtiendriez encore des coins colorés. ![[IM Output]](../static/img/photos/beijing_rotate.png)
La solution la plus simple serait maintenant de rogner ce résultat pour retirer ces bords, mais votre image prend alors une taille plutôt bizarre, ce qui, là encore, révèle assez clairement qu'on y a touché. La formule pour effectuer ce rognage n'est pas simple, mais elle est présentée dans Méthodes de rotation par distorsion. La meilleure solution est non seulement de pivoter l'image, mais aussi de la mettre légèrement à l'échelle afin de produire une image pivotée de la même taille que l'originale. |
angle=-1.95
magick beijing_tn.png -distort SRT \
"%[fx:aa=$angle*pi/180;(w*abs(sin(aa))+h*abs(cos(aa)))/min(w,h)], $angle" \
beijing_rot_correction.png
![[IM Output]](../static/img/photos/beijing_rot_correction.png)
Et l'image est nette, avec un mur parfaitement de niveau. Le calcul de l'angle relève d'une trigonométrie assez simple, à partir des positions des pixels aux extrémités d'une longue ligne droite de l'image. Cependant, j'ai constaté qu'en pivotant simplement l'image selon divers petits angles par essais et erreurs, on trouve un bon angle de rotation assez rapidement. Pour juger de la qualité d'un angle donné, examinez de très près, en zoomant, les pixels le long de la ligne ou du bord que vous utilisez. Le haut du mur, sur cette photo. Et rappelez-vous que, dans les rotations d'image, une rotation vers la gauche (sens antihoraire) est négative (car l'axe Y pointe vers le bas). Rappelez-vous aussi que, dans la mesure du possible, il faut toujours appliquer les opérations à l'image d'origine, en évitant le recours à des images intermédiaires (et surtout à des images JPEG intermédiaires). Il vaut toujours mieux appliquer une modification de photo à partir de la source d'origine plutôt qu'à partir d'une copie intermédiaire enregistrée.
Effet tilt-shift -- donner à un paysage l'aspect d'une maquette artificielle
Le « tilt-shift » est une technique qui rend une image floue en haut et en bas, tout en laissant le centre de l'image net. À l'origine, on l'obtenait avec de très vieux appareils à soufflet, où l'objectif était incliné pour rendre le haut et le bas de l'image hors foyer. Grâce à l'introduction du Mappage de flou variable, ajouté à ImageMagick en v6.5.4-0, cela est désormais facile à faire. Si vous ajoutez à cela un contraste très élevé pour accentuer les ombres, et que vous saturez les couleurs, le résultat typique est qu'une image ordinaire peut être rendue artificielle. Presque comme si vous photographiiez une petite maquette très détaillée et vivement éclairée.
La première chose à faire est d'accentuer les couleurs de l'image pour lui donner un très fort contraste, et peut-être de l'éclaircir un peu pour qu'elle semble très bien éclairée par de puissants projecteurs de studio. |
magick beijing_md.jpg -sigmoidal-contrast 15x30% beijing_contrast.jpg
![[IM Output]](../static/img/photos/beijing_contrast_tn.gif)
Remarquez comment j'ai utilisé une forte opération de contraste sigmoïdal pour obtenir ces effets de couleur. Je n'ai pas simplement utilisé un contraste linéaire, car je ne voulais pas « écrêter » les couleurs les plus claires et les plus sombres de l'image. La valeur de contraste de '15' est un contraste très très fort. J'ai aussi un peu éclairci l'image en décalant le centre du seuil de contraste vers une valeur de gris de '30%'. Si les couleurs de l'image à contraste accentué ne ressortent pas assez « cartoon », vous pouvez essayer d'augmenter la saturation des couleurs de l'image à l'aide de l'opérateur Modulate. Cette image n'en a pas eu besoin, car le toit de tuiles et les arbres d'un vert vif fournissaient déjà assez d'effets de couleur. Si vous regardez un agrandissement de l'image (Cliquez sur la miniature), vous verrez que le simple fait d'accentuer les couleurs donne à l'image une impression d'éclairage artificiel ; elle ne ressemble toutefois pas à une maquette, avec trop de détails sur les voitures à l'arrière-plan et les gens au premier plan. Passons maintenant au tilt-shift. Pour cela, nous préparons une image en dégradé, blanche en haut et en bas, et noire au milieu. Certains utiliseraient un dégradé linéaire pour cela, mais je trouve un dégradé parabolique meilleur. |
magick beijing_contrast.jpg \
-sparse-color Barycentric '0,0 black 0,%h white' \
-function polynomial 4,-4,1 beijing_blurmap.jpg
![[IM Output]](../static/img/photos/beijing_blurmap_tn.gif)
Remarquez que j'ai utilisé l'image d'origine elle-même avec une coloration parcimonieuse barycentrique à deux points pour générer un dégradé linéaire sur toute l'image. Ce dégradé linéaire est ensuite modifié à l'aide d'une fonction polynomiale basique pour en faire un dégradé parabolique avec du noir au milieu. Il ne reste plus qu'à flouter l'image selon la carte de flou pour créer un effet « tilt-shift ». Le résultat est que l'image d'origine ressemble davantage à une maquette à l'échelle qu'à un instantané pris sur le vif de la scène réelle.
magick beijing_contrast.jpg beijing_blurmap.jpg \
-compose Blur -set option:compose:args 10 -composite \
beijing_model.jpg
Comme vous pouvez le voir dans l'image finale, les arbres et les bâtiments paraissent très artificiels, en raison des couleurs fortes, tandis que le flou des parties proches et lointaines donne à l'image une impression de « petite » maquette. Il faut croire que c'était une maquette très détaillée ! On aurait pu améliorer encore le résultat en effectuant une correction de rotation (voir précédemment) dans le cadre du traitement tilt-shift. Une orientation d'appareil parfaite n'aurait fait qu'ajouter à l'impression artificielle. Bien sûr, vous pouvez enchaîner toutes ces opérations pour tout faire en une seule commande, et éviter les fichiers temporaires ou la perte de qualité.
magick beijing_md.jpg -sigmoidal-contrast 15x30% \
\( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \
-solarize 50% -level 50%,0 \) \
-compose Blur -set option:compose:args 10 -composite \
beijing_model.jpg
Ci-dessus, j'ai remplacé le dégradé parabolique par un dégradé linéaire noir-blanc-gris plus classique (avec la même pente) pour la carte de flou « tilt-shift ». La technique Solariser & Niveaux a été utilisée pour faire culminer le dégradé linéaire horizontalement à environ 1/3 depuis le bas de l'image. Cependant, je trouve que la zone nette d'un dégradé linéaire est trop réduite et pas très pratique. Il existe bien d'autres façons de générer un dégradé adapté à un effet tilt-shift. Par exemple, en utilisant des dégradés redimensionnés. Ou en mettant à l'échelle horizontalement une couleur parcimonieuse de Shepard formée d'une seule colonne de pixels. Des dégradés en courbe sinusoïdale peuvent aussi être utiles.
Optimisation de la vitesse
L'opération de Mappage de flou variable utilise essentiellement une méthode de flou bidimensionnel en une seule passe (équivalente à un flou gaussien uniforme). Cependant, vous pouvez obtenir un gain de vitesse général en réalisant l'opération de flou en deux opérations de flou variable unidimensionnelles. Par exemple, ici je floute d'abord horizontalement, puis verticalement...
magick beijing_md.jpg -sigmoidal-contrast 15x30% \
\( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \
-solarize 50% -level 50%,0 -write mpr:blur_map \) \
-compose Blur -set option:compose:args 10x0 -composite \
mpr:blur_map \
-compose Blur -set option:compose:args 0x10 -composite \
beijing_model_2pass.jpg
Le résultat est pratiquement identique (bien qu'il diffère un peu), mais beaucoup plus rapide à traiter. À NOTER : je pense qu'inverser les opérations (flouter d'abord verticalement, puis horizontalement) produira un résultat plus précis pour ce type de mappage de flou. En gros, comme le flou horizontal est constant dans la direction de cette passe de flou, il devrait être effectué en dernier.
Problèmes de l'effet tilt-shift par rapport à une vraie maquette
Si vous examinez attentivement la photo obtenue, vous pourrez déceler qu'il s'agit d'un faux tilt-shift, et non de la photo d'une vraie maquette. On le voit au fait que le toit du plus grand bâtiment est trop flou par rapport à la base du bâtiment. Alors même qu'il se trouve à peu près à la même distance que la base. De même, la base du « mur » est plus floue que son sommet. Autrement dit, on voit que c'est un trucage. Le problème est que les grands objets verticaux devraient être floutés de la même quantité sur toute leur surface, et non floutés de manière variable selon la hauteur. Rappelez-vous que le dégradé de flou est censé représenter la profondeur de champ, c'est-à-dire la distance des divers objets dans l'image ; ainsi, la surface d'un objet vertical devrait être toute à la même « distance » et donc floutée de la même quantité. Pour corriger cela, il me faudrait ajuster le dégradé de flou afin que ces zones aient une couleur constante (ou presque constante) correspondant à la « base » de cet objet, relativement au reste de l'image. Autrement dit, les surfaces verticales ont une quantité de flou constante tandis que toutes les surfaces horizontales ont un dégradé de flou. Fondamentalement, le dégradé flouté devrait représenter la « profondeur » réelle de chaque point de l'image, ce qui, pour la plupart des images, est un dégradé très complexe. Cet ajustement peut être difficile à réaliser, car il exige très probablement une part d'interprétation humaine sur ce qu'est un mur horizontal et sur l'éloignement de l'objet dans l'image. Il est aussi peu probable qu'il soit facilement automatisable. Que pouvez-vous faire de cet effet ? Envoyez-moi vos images tilt-shift par courriel ! Je les mentionnerai ici. Ou peut-être pouvez-vous corriger les défauts de tilt-shift de l'exemple ci-dessus.
Images superposées PNG-JPEG
En séparant une grande page de journal ou de magazine en une couche de texte enregistrée en PNG, et une couche d'image enregistrée en JPG, toutes deux n'utilisant qu'un fond blanc, il est possible d'occuper bien moins d'espace disque que les deux images combinées ! Plus important encore, les images peuvent utiliser une compression avec perte (JPEG), tandis que les composants de texte restent nets et clairs (PNG). Cela paraît idiot et étrange, mais c'est bel et bien vrai. Les images séparées peuvent économiser 3 à 4 fois l'espace disque utilisé par une seule image combinée. Habituellement, les deux images sont générées lors du processus de publication sous forme de couches distinctes. Mais vous pouvez aussi séparer des images après coup. Les images sont simplement superposées l'une sur l'autre...
magick ny_family.jpg ny_family.png -composite ny_family_merged.jpg
![[IM Output]](../static/img/photos/ny_family_merged_tn.jpg)
Sélectionnez les images obtenues pour en voir une copie plus grande.
Ceci utilise une composition Over normale, qui exige que l'image PNG (superposée) soit transparente. Cette transparence se présente sous deux formes. Soit un masque booléen (purement tout ou rien), comme celui vu ci-dessus. Tout exemple de code pour la séparation d'images est le bienvenu.
Photos superposées -- chevauchements flous de photos accolées
Créer une série de photos qui se chevauchent (et je ne parle pas d'un panorama) est une tâche courante, en particulier dans la création de sites web. Mais cela peut être délicat à réaliser sans une bonne connaissance des opérateurs IM. La méthode la plus simple consiste à utiliser une composition masquée des deux images, et un masque pour choisir quelle image superposer. Il faut d'abord faire un peu de calcul simple. Pour cet exemple, j'utilise deux miniatures de 120x90 pixels et je veux les chevaucher horizontalement de 40 pixels. Cela signifie que l'image obtenue devrait faire 120 + 120 - 40 pixels de large, soit une image de 200x90 pixels. Ensuite, il nous faut un masque. Il doit être noir d'un côté, blanc de l'autre, avec un dégradé de 40 pixels au milieu, à la taille de l'image de sortie finale. Autrement dit, 120 pixels - 40 pixels donne une zone de 80 pixels pour chacune des deux zones non chevauchées. Générons donc une image de masquage... |
magick -size 90x80 xc:white xc:black -size 90x40 gradient: \
+swap -append -rotate 90 overlap_mask.png
![[IM Output]](../static/img/photos/overlap_mask.png)
Une autre façon de générer l'image de masquage est d'utiliser le script générateur de dégradé horizontal « [plmlut](http://www.fmwconcepts.com/imagemagick/plmlut/index.php) » de Fred Weinhaus. Il offre des contrôles plus fins de la courbure du dégradé qu'un dégradé linéaire abrupt comme celui que je génère ci-dessus. Maintenant que tout le calcul est réglé, il ne reste plus qu'à effectuer une composition masquée de trois images, à l'aide du masque que nous venons de générer. Cependant, il nous faudra aussi agrandir l'image de destination (gauche) afin de ménager assez de place pour l'image de droite qui la chevauche (de couleur quelconque), et positionner correctement la seconde image en utilisant la gravité appropriée (à droite, soit 'East').
magick holocaust_tn.gif -extent 200x90 spiral_stairs_tn.gif \
overlap_mask.png -gravity East -composite overlap_photos.jpg
Et nous avons maintenant deux images, chevauchées à l'aide d'un dégradé linéaire. Bien sûr, les deux commandes peuvent être fusionnées en une seule, de sorte que vous n'ayez pas besoin d'enregistrer l'image intermédiaire du « masque ». Ceci est laissé en exercice au lecteur. Une légère amélioration consiste à utiliser un dégradé plus courbé sur un chevauchement plus large entre les images. Cela réduit le changement abrupt visible au début et à la fin de la zone de chevauchement de l'image finale. Surtout avec des images contenant de grandes zones de couleurs très différentes. Par exemple, ceci utilise des techniques de dégradé distordu pour non seulement générer une courbe de dégradé plus douce, mais aussi faire pivoter ce dégradé afin d'obtenir un chevauchement fortement incliné. |
magick -page +0-15 -size 1x30 gradient: \
-sigmoidal-contrast 5,50% -contrast-stretch 0 \
-set option:distort:viewport 180x90-90-45 \
+distort SRT 115 +repage \
holocaust_tn.gif -extent 180x90 +swap \
spiral_stairs_tn.gif +swap \
-gravity East -composite overlap_angled.jpg
![[IM Output]](../static/img/photos/overlap_angled.jpg)
Oui, ce qui précède est assez complexe, mais cela montre bien ce qui est possible. Si vous prévoyez de traiter plus de deux images, une meilleure méthode consiste à utiliser le masque pour définir directement la transparence de la deuxième image et des suivantes. Les multiples images peuvent alors être superposées à l'aide de techniques vues dans les Exemples d'images en couches. Certaines de ces techniques ne vous obligent pas à calculer la taille de l'image finale, car IM peut le faire pour vous. Vous devez seulement veiller à positionner correctement les images. Par exemple, ici j'ajoute un dégradé de 30 pixels à une deuxième et une troisième image, ce qui impose de placer les images tous les 90 pixels (largeur 120 moins 30 pixels de chevauchement) les unes des autres. Une fois que toutes les images ont reçu la transparence et le positionnement appropriés, il suffit de mettre en mosaïque les couches ensemble (tous les décalages sont positifs), en laissant IM déterminer la taille finale du canevas.
magick -size 90x90 xc:white -size 90x30 gradient: -append -rotate 90 \
hatching_tn.gif \
\( chinese_chess_tn.gif -clone 0 \
-compose CopyOpacity -alpha off -composite -repage +90+0 \) \
\( holocaust_tn.gif -clone 0 \
-compose CopyOpacity -alpha off -composite -repage +180+0 \) \
\( spiral_stairs_tn.gif -clone 0 \
-compose CopyOpacity -alpha off -composite -repage +270+0 \) \
-delete 0 -compose Over -mosaic overlap_series.jpg
Plutôt que de précalculer les positions des images masquées qui se chevauchent, vous pouvez utiliser les techniques présentées dans Chevauchement par accolage, ainsi que dans Positions calculées de façon incrémentale pour des séquences d'images plus longues. Remarques finales : la superposition de photos de cette manière fonctionne le mieux pour des images ayant une couleur d'ensemble raisonnablement commune. Vous remarquerez aussi que, pour les images situées à chaque extrémité de la séquence, un sujet centré peut ne pas paraître très centré, à cause du chevauchement sur un seul côté de l'image. On peut atténuer ce problème soit en fondant le bord extérieur de ces images vers la transparence, soit en coupant une partie du bord extérieur pour aider à recentrer le sujet de ces images. À NOTER : il se peut que réaliser la composition dans un espace colorimétrique différent donne de meilleurs résultats. Quelqu'un voudrait-il expérimenter et faire part de ses résultats, bons ou mauvais ?
Doubles expositions -- mélanger plusieurs photos d'une même scène
Avec les anciens appareils à film, il existait une technique où l'on prenait une photo deux fois ou plus sans « avancer » le film. Cela permettait de créer ce que l'on appelait des doubles expositions, où deux images prises à des instants légèrement différents étaient fusionnées. Le résultat était souvent une image fantôme ou un assombrissement des parties de l'image qui avaient bougé ou changé. Cependant, avec un contrôle soigneux des sujets de l'image, des effets d'éclairage, et même du processus de développement, il est devenu possible de réaliser des photos très étranges, voire « impossibles ». Avec les images numériques, c'est encore plus facile, car vous avez un contrôle encore meilleur des images. En gros... Voir, c'est peut-être croire, mais les appareils photo mentent ! Par exemple, supposons que je veuille une image où j'apparais deux fois ! Eh bien, c'est facile à faire. Voici par exemple les miniatures de deux photos prises rapidement spécialement pour cet exemple, à l'aide d'un trépied et d'un retardateur, que j'utiliserai directement.
![[IM Output]](../static/img/img_photos/anthony_2.jpg)
Peut-être pouvez-vous fournir un jeu de photos plus amusant ?
J'appliquerai les techniques de double exposition directement à ces miniatures, même si, plus typiquement, je le ferais en utilisant les fichiers d'images d'origine comme entrées, afin d'obtenir un résultat de la plus haute qualité. Or, si j'utilisais une « double exposition » traditionnelle à la manière du film avec un appareil à l'ancienne, le résultat serait une moyenne de ces deux images, générant des « fantômes » translucides de moi-même. Voici la simulation numérique de cette technique... |
magick anthony_1.jpg anthony_2.jpg -evaluate-sequence mean anthony_ghosts.jpg
![[IM Output]](../static/img/photos/anthony_ghosts.jpg)
Cependant, que faire si je ne veux pas de fantômes, mais des images bien solides de moi-même ? Il faut alors utiliser un masque pour choisir quelles parties doivent provenir de quelle image. Ce masque peut être généré de deux façons. Vous pouvez simplement créer le masque à la main en divisant l'image le long des parties statiques ou inchangées. Une affaire assez simple dans ce cas précis... |
magick -size 100x90 xc: -draw 'rectangle 0,0 50,89' \
-blur 0x3 anthony_mask.jpg
![[IM Output]](../static/img/photos/anthony_mask.jpg)
Remarquez que j'ai flouté le masque, afin d'« adoucir » (feather) la transition entre les deux images. Et ici, j'utilise une composition masquée pour fusionner les images. |
magick anthony_1.jpg anthony_2.jpg anthony_mask.jpg \
-composite anthony_doubled.jpg
![[IM Output]](../static/img/photos/anthony_doubled.jpg)
Et si vous aviez deux photos de famille (ou plus), où certaines personnes avaient les yeux fermés, parlaient, faisaient des grimaces ou regardaient ailleurs. Vous pourriez sélectionner chaque « tête » sur des images différentes et fusionner les multiples images pour former un montage, afin d'obtenir une photo où tout le monde regarde l'objectif, les yeux ouverts. En échangeant les images d'entrée, ou en inversant simplement le masque, vous pouvez me retirer complètement de l'image, et ainsi obtenir une vue dégagée du fond statique. |
magick anthony_2.jpg anthony_1.jpg anthony_mask.jpg \
-composite anthony_removed.jpg
![[IM Output]](../static/img/photos/anthony_removed.jpg)
Cela peut être pratique pour photographier un monument public, où l'on ne peut pas se permettre le coût d'un contrôle de la foule. Prenez simplement énormément de photos depuis un trépied, et avec un peu de chance vous pourrez les combiner pour retirer tout le monde de la scène ! Une alternative à la génération d'une image de fond, lorsque vous disposez de centaines d'images (une vidéo), consiste à créer simplement une moyenne de toutes les images. Cela transforme toutes les personnes ou autres objets transitoires en une légère brume de « fantômes ». Cela peut être un effet intéressant en soi, mais pas toujours celui recherché. Une image moyenne peut être une étape utile car, une fois que vous l'avez, vous pouvez la comparer à chaque image individuelle pour masquer la personne (l'objet transitoire) de chaque trame, avant de recombiner les fonds ensemble pour créer une image de fond propre (sans brume). Une discussion importante sur la génération automatique d'un « fond propre » à partir d'images vidéo se trouve sur le forum de discussion IM, dans Créer une image de référence et Extraire les événements de changement.
Avec une photo de fond propre, on peut appliquer un seuil à une image de différence pour masquer les parties de l'image qui ont changé. Vous devrez peut-être recourir à un flou et un seuillage supplémentaires pour étendre ce masque de façon appropriée, afin de couvrir non seulement l'objet dans l'image, mais aussi toute ombre ou tout reflet qu'il peut projeter sur le décor d'arrière-plan. Un peu d'essais et d'erreurs peut aussi être nécessaire pour y parvenir. |
magick anthony_removed.jpg anthony_2.jpg \
-compose difference -composite \
-threshold 5% -blur 0x3 -threshold 20% -blur 0x3 \
anthony_automask.jpg
![[IM Output]](../static/img/photos/anthony_automask.jpg)
Utilisons maintenant ce masque pour mélanger mon image de « fantômes » avec l'image d'origine, de sorte qu'on dirait que ma conscience me « hante » d'avoir réalisé de telles images « impossibles ». |
magick anthony_1.jpg anthony_ghosts.jpg anthony_mask.jpg \
-composite anthony_haunted.jpg
![[IM Output]](../static/img/photos/anthony_haunted.jpg)
Un dernier point : toutes les techniques ci-dessus supposent que les photos ont été prises avec un appareil solidement fixé sur un trépied immobile. Si ce n'était pas le cas, mais que les photos ont été prises à main levée, je peux vous garantir que les images ne coïncideront pas et ne s'« aligneront » pas correctement, quels que soient vos efforts. Dans de tels cas, vous pourriez avoir besoin d'une distorsion affine, voire en perspective, d'au moins une des deux images pour aligner correctement les fonds. Plus le fond est complexe, plus le réalignement nécessaire est exigeant. Si un flash a été utilisé, ou si la journée était nuageuse avec une lumière variable, vous pourriez aussi avoir besoin de quelques ajustements de luminosité sur la photo. La cause en est que la plupart des appareils « ajustent automatiquement » la luminosité des images, et qu'un flash, ou une lumière variable, peut modifier leur gestion de l'ajustement « auto-level » pour chacune des images. Comme dernier exemple, voici une autre image que j'ai créée à partir de deux photos distinctes, montrant mon neveu faisant de l'escrime avec lui-même, devant un mur d'escalade. Comme je tenais l'appareil à la main et utilisais un flash, j'ai eu besoin de quelques ajustements de distorsion affine, ainsi que d'un léger ajustement de luminosité, pour obtenir le résultat sans couture que vous voyez.
Si vous cherchiez à déterminer si cette photo est truquée ou non, vous examineriez l'éclairage, les ombres et les reflets. Ci-dessus, un examen attentif du sol montrera que le « Jacob » de droite n'a pas de reflet correct sur le sol (il a été coupé par le bord de la photo). Mais il faudrait vraiment bien étudier la photo pour le remarquer ! Pensez maintenant à tout ce à quoi vous pouvez employer cette technique de « double exposition ». Par exemple, pourquoi pas des miroirs déformants. Envoyez-moi vos résultats par courriel ! Si vous voulez approfondir, l'article de recherche « Interactive Digital Photomontage » aborde l'usage des « doubles expositions » (qu'il nomme « photomontage »), mais en exploitant des sélections d'utilisateur étendues par « segmentation d'image », pour choisir quelles parties de l'image doivent provenir d'où. Un exemple : si vous avez plusieurs photos d'un grand groupe de personnes, et que sur chaque photo quelqu'un « ne rend pas bien ». Vous pouvez utiliser cette technique pour choisir quelle personne provient de quelle image, afin d'obtenir une photo de groupe parfaite où tout le monde : regarde de face, a les yeux ouverts et sourit !
Protéger l'anonymat d'une personne -- brouiller une partie d'une photo
La technique ci-dessus, consistant à utiliser un masque de composition à 3 images, peut aussi être employée d'autres manières. Par exemple, vous pouvez « pixelliser » une image, puis utiliser un masque pour limiter l'effet au seul visage d'une personne, afin de « protéger son identité ».
magick zelda_tn.gif -scale 25% -scale 400% zelda_pixelate.gif
magick zelda_tn.gif -gamma 0 -fill white \
-draw 'circle 65,53 50,40' zelda_face_mask.gif
magick zelda_tn.gif zelda_pixelate.gif zelda_face_mask.gif \
-composite zelda_anonymity.png
Bien sûr, vous pouvez faire tout cela d'un seul coup, et même adoucir la transition du pixellisé vers le normal. Par exemple.. |
magick zelda_tn.gif \( +clone -scale 25% -scale 400% \) \
\( +clone -gamma 0 -fill white \
-draw 'circle 65,53 50,40' -blur 10x4 \) \
-composite zelda_anonymity.jpg
![[IM Output]](../static/img/photos/zelda_anonymity.jpg)
Bien sûr, plutôt que de pixelliser la partie en question, vous pouvez aussi flouter la zone à la place. Il suffit de remplacer les deux opérateurs « [-scale](https://imagemagick.org/command-line-options/#scale) » par un unique « [-blur](https://imagemagick.org/command-line-options/#blur) » pour en brouiller les détails. Cette technique de remplacement d'une zone masquée peut aussi servir à retirer d'une image du texte et des logos indésirables. Pour les détails, voir Comblement de trous.
Ajouter une texture à une image
La méthode de composition alpha Hardlight, ou l'une quelconque des diverses méthodes de composition d'éclairage, offre des moyens de donner à une image un motif de texture. Par exemple, ici j'ajoute une texture de tissu grossier à une photo que j'ai prise d'une pagode au zoo de Kunming, dans le sud de la Chine.
magick tile_fabric.gif -colorspace gray -normalize \
-fill gray50 +level 35% texture_fabric.gif
magick composite texture_fabric.gif pagoda_sm.jpg \
-tile -compose Hardlight photo_texture.jpg
Notez que si vous voulez réellement mettre en mosaïque la texture sur l'image, vous devez utiliser la commande « magick composite » plutôt que la commande « magick », plus polyvalente, même s'il existe plusieurs autres façons de mettre des images en mosaïque en mémoire avec convert. Notez aussi qu'en ajoutant une texture de cette manière, les détails plus fins de la photo d'origine peuvent être perdus par l'excès de bruit de la texture superposée ; les textures devraient être gardées soit simples, soit d'effet convenablement modéré, comme l'ajustement de niveaux réducteur de contraste utilisé ci-dessus. Pour utiliser un motif d'image comme texture, il faut le modifier de sorte qu'un gris parfait soit utilisé pour les zones qui restent inchangées dans l'image d'origine. C'est-à-dire que la couleur moyenne de l'image devrait être d'environ 50 % de gris. Dans l'exemple, je montre une façon de le faire avec à peu près n'importe quelle image mosaïquable, même si cette méthode précise ne fonctionne pas toujours bien. On trouve de telles textures partout sur le web, comme divers motifs d'arrière-plan pour pages web. Elles peuvent même ne pas ressembler à une texture, être colorées, ou encore très claires ou très sombres. Après ajustement, vous constaterez toutefois que vous pouvez obtenir des effets très intéressants. Comme précédemment, vous pouvez limiter les parties d'une image effectivement texturées en créant un masque approprié. Par exemple, créons un masque du seul ciel presque « blanc » dans la photo de la pagode.
magick pagoda_sm.jpg -fuzz 10% -transparent white \
-alpha extract -negate pagoda_mask.png
magick pagoda_sm.jpg photo_texture.jpg pagoda_mask.png \
-composite photo_texture_masked.jpg
Imaginez maintenant la photo d'une dame portant une robe. Vous pouvez prendre n'importe quel motif, l'ombrer de façon appropriée, puis le superposer sur l'image d'origine afin de remplacer la robe par un motif complètement différent. Bien sûr, il existe de nombreuses variantes de ce qui précède pour parvenir au résultat final, et la technique précise que vous employez vous appartient, mais l'idée de base est la même. Texturer l'image, masquer et superposer le résultat. En aparté, je vous recommande aussi de regarder la méthode de composition alpha Overlay, qui est tout simplement la même que la composition Hard_Light, mais avec les deux images échangées. Il existe également beaucoup d'autres méthodes de composition d'ombrage qui peuvent servir à texturer une image de diverses manières.
Masquage par incrustation couleur (chroma key) -- Modifier par zones d'une couleur précise
La photo de gauche a été fournie par un utilisateur dans une discussion du forum IM. Il voulait changer la couleur du chemisier de la jeune fille, qui était d'un joli « rose ». Le problème est que la couleur n'est pas simplement « rose », mais toute une gamme de nuances de « rose » différentes. Comme vous l'avez vu plus haut, pour modifier une image, la première étape consiste généralement à générer un masque approprié de la zone qui vous intéresse. Ici, j'utiliserai une technique connue sous le nom d'incrustation couleur (chroma key) pour générer un masque de cette couleur précise. Cette technique cherche généralement une couleur précise dans une image pour l'utiliser comme masque. C'est aussi la technique employée pour les effets d'écran « bleu » et « vert » très utilisés à la télévision et au cinéma.
Cela revient essentiellement à extraire la « teinte » (Hue) en séparant les images de canaux, puis à repérer la « nuance de teinte » voulue. Par exemple...
|
magick shirt.jpg -colorspace HSL -channel Hue -separate shirt_hue.jpg
Cependant, cette image de teinte présente quelques problèmes.
- D'abord, une couleur « rose » est très proche du « rouge », qui se trouve à la limite où la teinte « boucle ». Pour m'assurer que ce ne soit pas un problème, j'utilise Modulate pour éloigner la teinte de cette « discontinuité » de la teinte. Ce n'est pas un problème pour extraire une « incrustation couleur » d'écrans « verts » ou « bleus ».
- Cette couleur « rose » n'est pas non plus une couleur très saturée : elle a une valeur de saturation très basse. Cela signifie que sa « teinte » n'est pas aussi forte qu'elle le devrait.
- L'autre problème, c'est le fond gris !!!!! Le gris a très peu de teinte, je dois donc retirer de mon masque final toute zone ayant peu ou pas de saturation, sinon je modifierais des éléments du fond. Notez que ce n'est techniquement pas nécessaire si je limite les changements aux bouclages de teinte, qui n'affectent pas les couleurs non saturées.
Bref, l'image d'entrée aurait mieux fonctionné avec une couleur plus vive et plus forte, également moins semblable à la couleur de la peau (ou des cheveux). Un chemisier d'un bleu ou d'un vert soutenu, par exemple. Mais je vais travailler avec ce qu'on m'a donné. ![[IM Output]](../static/img/photos/shirt_hue.jpg)
Extrayons donc et combinons les deux masques de canaux. Notez que Teinte = Gray64 après que les teintes de l'image ont été « bouclées » avec modulate, et Saturé = Noir pour le fond gris. |
magick shirt.jpg -modulate 100,100,33.3 -colorspace HSL \
-channel Hue,Saturation -separate +channel \
\( -clone 0 -background none -fuzz 5% +transparent grey64 \) \
\( -clone 1 -background none -fuzz 10% -transparent black \) \
-delete 0,1 -alpha extract -compose multiply -composite \
shirt_mask.png
Il ne reste plus qu'un certain nombre de petites « taches » isolées, qui peuvent être retirées avec un lissage par morphologie (-morphology Smooth Square). Ce n'est pas parfait, mais cela fera l'affaire. La meilleure méthode serait de retoucher le masque à la main pour le nettoyer. Un masque peut maintenant être utilisé avec le masquage par composition, un peu comme nous l'avons fait dans les exemples des doubles expositions et de l'anonymat ci-dessus. Cependant, si vous utilisez un masque pour modifier une image existante (sans la déformer ni changer sa taille), il est alors plus simple de l'employer pour définir les zones non inscriptibles. Celles-ci sont connues sous le nom de masques de découpe ou d'écriture (voir « [-mask](https://imagemagick.org/command-line-options/#-mask) » ![[IM Output]](../static/img/photos/shirt_mask.png)
Ici, je nettoie le masque précédent de ses petits défauts (facultatif), et je l'inverse pour définir les zones que je veux « protéger en écriture ». Ensuite, je définis ce masque, je décale les teintes pour transformer le « rose » en un « bleu clair », et j'enregistre l'image obtenue. |
magick shirt_mask.png -morphology Smooth Square \
-negate shirt_write_mask.png
magick shirt.jpg -mask shirt_write_mask.png \
-modulate 100,100,25 +mask shirt_blue.jpg
Oui, il y a une légère bordure « rose », en particulier sur l'intérieur de la manche. De plus, une petite zone de peau sur son bras a viré à un bleu assez foncé. Ce sont fondamentalement des défauts de masque, et avec un peu plus de travail pour perfectionner le masque, vous pouvez corriger ces problèmes. Mais ce n'est pas un mauvais résultat. Une méthode pour générer un meilleur masque consiste à utiliser une image bien plus grande et de plus haute résolution. Lorsque l'image obtenue est ensuite redimensionnée, ces petits défauts seront (espérons-le) eux aussi réduits à l'insignifiance. ![[IM Output]](../static/img/photos/shirt_blue.jpg)
Le vrai problème de cet exemple précis, c'est que la « couleur clé » est si proche d'une couleur de peau normale qu'on cherche vraiment les ennuis ! C'est pourquoi les gens qui utilisent cette technique emploient des écrans « verts » et « bleus », car ces couleurs sont aussi différentes que possible de la couleur de « peau » des personnes devant l'écran. Notez qu'il vaut mieux NE PAS utiliser le JPEG comme images source ou de travail. En réalité, le JPEG ne devrait servir que pour vos images finales ! C'est en partie la raison pour laquelle autant de « défauts de masque » ont été générés au départ.
Écran vert
_Exemple à venir, utilisant le masquage par incrustation couleur d'un « fond sur écran vert ». Développé à partir de l'article Wikipédia Chroma Key
Les vrais problèmes dans le traitement de l'« écran vert » sont le « débordement de couleur » (color spill), les cheveux fins et clairs (blonds) et les zones semi-transparentes produisant les pires effets de débordement de couleur.
Suppression simpliste du débordement de couleur (correction de couleur)_
g(r,g,b) => (r, min(g, b), b)
Détermination de l'alpha...
a(r,b,g) => K0 * b − K1 * g + K2
_Utiliser des valeurs de 1.0 pour tous les coefficients K constitue une bonne première estimation.
Comme la couleur du fond est bien connue, une fois l'« alpha » connu vous pouvez utiliser les techniques montrées dans Suppression du fond à l'aide de deux fonds pour retirer tout « halo d'écran vert » éventuellement présent, mieux que la première formule de couleur.
Croquis au fusain de l'image
La transformation en croquis au fusain offre aux utilisateurs un moyen très simple de générer un rendu simplifié de l'image en niveaux de gris. Elle ne fonctionne pas bien pour les « images chargées », mais pour des images plus simples elle peut produire un résultat très frappant.
magick holocaust_sm.jpg -charcoal 5 charcoal.gif
Image au trait à colorier pour enfants
Au fil d'une longue discussion sur la génération de pages à colorier sur le forum des utilisateurs IM, la recette suivante a été mise au point pour transformer une simple photo en quelque chose que les enfants peuvent colorier. Voici le meilleur résultat obtenu jusqu'à présent, appliqué à une photo que j'ai prise du mémorial de l'Holocauste, à Berlin.
magick holocaust_sm.jpg \
-edge 1 -negate -normalize \
-colorspace Gray -blur 0x.5 -contrast-stretch 0x50% \
color-in.gif
# For heavily shaded pictures...
# #-segment 1x1 +dither -colors 2 -edge 1 -negate -normalize \
Les dernières opérations ci-dessus tentent de lisser les lignes et d'améliorer le résultat global. Bien sûr, la technique ci-dessus n'est utile que pour des images présentant de bons changements de couleur nets, et de préférence une image de plus haute résolution que celle que j'ai utilisée ci-dessus. Pour des images de dessin animé qui possèdent déjà des contours noirs sur un fond de couleur claire, l'utilisation de la détection de contours avec la méthode ci-dessus produira directement un effet de « dédoublement » des contours noirs. Vous pouvez voir cet effet dans les lignes dédoublées des dalles du chemin menant au mémorial, dans le coin inférieur gauche. C'est un artefact de la manière dont fonctionne la détection de contours, et vous pouvez en voir d'autres exemples dans cette section des exemples IM. La solution consiste à inverser les images de ce type avant d'utiliser « [-edge](https://imagemagick.org/command-line-options/#edge) » pour tracer le contour des zones colorées.
magick piglet.gif -background white -flatten \
-colorspace Gray -negate -edge 1 -negate -normalize \
-threshold 50% -despeckle \
-blur 0x.5 -contrast-stretch 0x50% \
color-in_cartoon.gif
J'applique aussi un « [-threshold](https://imagemagick.org/command-line-options/#threshold) » afin de pouvoir ensuite retirer les points isolés que « [-edge](https://imagemagick.org/command-line-options/#edge) » semble aimer générer. Après quoi je tente à nouveau de lisser les lignes crénelées de l'image. Ce qui précède a été enrichi lors d'une discussion sur le filtre Photocopie de GIMP pour tirer parti de la méthode Compose Divide afin de repérer les contours.
magick taj_mahal_sm.png -colorspace gray \
\( +clone -blur 0x2 \) +swap -compose divide -composite \
-linear-stretch 5%x0% photocopy.png
L'opération « [-linear-stretch](https://imagemagick.org/command-line-options/#linear-stretch) » ci-dessus règle à quel point les zones sombres des images seront noires, tandis que le « sigma » de « [-blur](https://imagemagick.org/command-line-options/#blur) » définit la netteté de l'ombrage.
Croquis au crayon
À partir d'un tutoriel Photoshop (PSP) sur la conversion d'images en croquis au crayon, dognose, du forum des utilisateurs IM, est parvenu à créer les commandes ImageMagick équivalentes. Voici sa conversion, simplifiée en quelques commandes IM, qui vous permet de traiter par lots de nombreuses images pour les transformer en « croquis au crayon d'artiste ». Il nous faut d'abord une image « pencil.gif » spéciale. Cela peut prendre longtemps ; pour cet exemple, je l'ai donc faite un peu plus petite, tout en préservant sa capacité à être mise en mosaïque sur de plus grandes images. Voir Modifier les images de tuile pour les détails des techniques. Cela n'a besoin d'être fait qu'une seule fois et peut ensuite être réutilisé. Vous pouvez donc en générer une bien plus grande pour votre propre usage, afin d'éviter tout effet de mosaïque. Idéalement, faites-la aussi grande que les images que vous prévoyez de convertir. |
magick -size 256x256 xc: +noise Random -virtual-pixel tile \
-motion-blur 0x20+135 -charcoal 1 -resize 50% pencil_tile.gif
![[IM Output]](../static/img/photos/pencil_tile.gif)
Il ne reste plus qu'à superposer et fondre cette image d'ombrage « crayon » avec une photo. L'image de crayon est mise en mosaïque pour former un canevas de la même taille que l'image que nous traitons. Elle est ensuite appliquée à l'image à l'aide des techniques présentées dans Canevas en mosaïque. Le tout est ensuite fusionné dans une copie en niveaux de gris de l'image d'origine.
magick pagoda_sm.jpg -colorspace gray \
\( +clone -tile pencil_tile.gif -draw "color 0,0 reset" \
+clone +swap -compose color_dodge -composite \) \
-fx 'u*.2+v*.8' sketch.gif
Notez que, comme l'opérateur « [-blend](https://imagemagick.org/command-line-options/#blend) » de la commande « [composite](basics.html#composite) » n'est pas disponible pour la commande « magick », j'ai choisi de faire l'équivalent à l'aide de l'opérateur « fait maison » « [-fx](https://imagemagick.org/command-line-options/#fx) ». Il existe probablement des façons de faire meilleures et plus rapides, mais plus compliquées (les suggestions sont les bienvenues). Ce n'est pas la version définitive, car l'opérateur néglige certains aspects d'accentuation des contours nécessaires pour souligner certains des changements de couleur plus clairs mais nets de l'image. Pouvez-vous améliorer ce qui précède ? L'algorithme ci-dessus a été intégré à IM sous forme de transformation artistique « [-sketch](https://imagemagick.org/command-line-options/#sketch) », mais sans le lissage par « [-resize](https://imagemagick.org/command-line-options/#resize) » de la « tuile de crayon » générée...
magick pagoda_sm.jpg -colorspace gray -sketch 0x20+120 sketch_new.gif
Suppression du vignettage Lorsqu'on prend des photos (numériques ou non), l'objectif de l'appareil assombrit généralement les bords et les coins de l'image. C'est ce qu'on appelle le « vignettage ». En fait, cet effet d'objectif est si courant qu'on le simule souvent à dessein à l'aide de l'opérateur « [-vignette](https://imagemagick.org/command-line-options/#vignette) ». Voir la transformation Vignette. Martin Herrmann Martin-Herrmann@gmx.de voulait retirer le vignettage de l'appareil de ses photos. En gros, il a photographié une feuille de papier blanc sous une lumière vive sans utiliser de flash. Il voulait ensuite combiner cela avec ses photos réelles pour éclaircir de façon appropriée les bords et les coins de l'image. Fondamentalement, ce que nous voulons faire est de diviser la photo d'origine par l'image en niveaux de gris de la photo de la feuille de papier blanc vivement éclairée ; cela éclaircit alors les parties de l'image de la quantité dont la photo du « papier blanc » avait été assombrie. Il s'agit en gros de la méthode de composition « [Divide](compose.html#divide) », qui divise l'image « source » par l'image « d'arrière-plan ». Par exemple,
magick nikon18-70dx_18mm_f3.5.jpg vegas_orig.jpg \
-compose Divide -composite vegas_fixed.jpg
![[photo]](../static/img/photos/vegas_fixed.gif)
(cliquez pour voir l'image photo en plus grand)
Cependant, comme la photo du « papier blanc » ne sera probablement pas d'un blanc pur, vous ne voulez sans doute pas éclaircir l'image de cette couleur « blanc cassé ». Pour corriger cela, il faut multiplier l'image diviseur par la couleur de son pixel central. Voici la solution finale fournie à Martin, qui utilisait le très lent opérateur FX fait maison. Elle est antérieure à l'ajout d'une méthode de composition Divide qui peut servir à accélérer énormément ce processus. La photo blanche a aussi été passée en niveaux de gris pour supprimer également toute distorsion de couleur ; notez que j'ai changé l'ordre, ce qui préservera aussi toute « métadonnée » présente dans l'original (puisqu'il s'agit de l'image « de destination » dans ce cas). |
magick vegas_orig.jpg \( nikon18-70dx_18mm_f3.5.jpg -colorspace Gray \) \
-fx '(u/v)*v.p{w/2,h/2}' vegas_fixed_fx.jpg
![[photo]](../static/img/img_photos/vegas_fixed_fx.gif)
Si vous regardez attentivement les photos agrandies, en particulier les coins du « ciel » en haut à gauche et en haut à droite, vous pouvez voir les effets de vignettage, ainsi que la correction qui a été apportée. Ce n'est pas une solution parfaite, et elle mériterait un peu plus de réglages. Par exemple, plutôt que d'utiliser un pixel de mise à l'échelle, on pourrait prétraiter l'image de la « page blanche », et aussi l'ajuster pour un meilleur résultat de suppression du vignettage. Notez que l'utilisation du JPEG n'est recommandée pour aucun type de travail photographique, car le format peut introduire des artefacts et des incohérences dans les résultats. Le format ne convient que pour le stockage et l'affichage des résultats finaux. Une discussion importante sur la correction du vignettage se trouve sur les forums des utilisateurs IM, dans la discussion Correction algorithmique du vignettage pour les sténopés ?. Parmi les facteurs qui peuvent influer sur le vignettage...
- La distance du film à l'objectif : plus elle est grande, plus la lumière s'étale.
- L'aire du « cercle » de l'ouverture (objectif ou sténopé), du fait de l'angle de la lumière.
- L'agencement du matériel de l'appareil autour de l'ouverture. Par exemple, l'épaisseur du porte-objectif ou du sténopé.
![[IM Text]](../static/img/photos/pagoda_sm_exif.txt.gif)
![[IM Text]](../static/img/photos/pagoda_sm_time.txt.gif)
![[IM Output]](../static/img/img_photos/night_club_tn.gif)
![[IM Output]](../static/img/photos/night_club_fixed.gif)
![[IM Output]](../static/img/img_photos/night_scape_tn.gif)
![[IM Output]](../static/img/photos/night_scape_fixed.gif)
![[IM Output]](../static/img/photos/beijing_model.jpg)
![[IM Output]](../static/img/img_photos/holocaust_tn.gif)
![[IM Output]](../static/img/img_photos/spiral_stairs_tn.gif)
![[IM Output]](../static/img/photos/overlap_photos.jpg)
![[IM Output]](../static/img/photos/overlap_series.jpg)
![[IM Output]](../static/img/img_photos/jacob_vs_jacob_md.jpg)
![[IM Output]](../static/img/img_photos/zelda_tn.gif)
![[IM Output]](../static/img/photos/zelda_face_mask.gif)
![[IM Output]](../static/img/photos/zelda_anonymity.png)
![[IM Output]](../static/img/images/tile_fabric.gif)
![[IM Output]](../static/img/photos/texture_fabric.gif)
![[IM Output]](../static/img/photos/photo_texture.jpg)
![[IM Output]](../static/img/photos/pagoda_mask.png)
![[IM Output]](../static/img/photos/photo_texture_masked.jpg)
![[IM Output]](../static/img/img_photos/holocaust_sm.jpg)
![[IM Output]](../static/img/photos/charcoal.gif)
![[IM Output]](../static/img/photos/color-in.gif)
![[IM Output]](../static/img/images/piglet.gif)
![[IM Output]](../static/img/photos/color-in_cartoon.gif)
![[IM Output]](../static/img/img_photos/taj_mahal_sm.png)
![[IM Output]](../static/img/photos/photocopy.png)
![[IM Output]](../static/img/img_photos/pagoda_sm.jpg)
![[IM Output]](../static/img/photos/sketch.gif)
![[IM Output]](../static/img/photos/sketch_new.gif)