issue114:inkscape
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
issue114:inkscape [2016/11/09 14:32] – auntiee | issue114:inkscape [2016/11/09 15:43] (Version actuelle) – andre_domenech | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
Let's look at how a convolution matrix actually works by picturing its effect on a simple image made up of a small set of pixels. For this demonstration, | Let's look at how a convolution matrix actually works by picturing its effect on a simple image made up of a small set of pixels. For this demonstration, | ||
- | Ce mois-ci, nous allons | + | Ce mois-ci, nous allons |
Regardons comment fonctionne une matrice de convolution en illustrant son effet sur une image simple faite d'un petit ensemble de pixels. Pour cette démonstration, | Regardons comment fonctionne une matrice de convolution en illustrant son effet sur une image simple faite d'un petit ensemble de pixels. Pour cette démonstration, | ||
Ligne 18: | Ligne 18: | ||
Notre première matrice sera un tableau 3x3, avec le nombre 1.00 dans chaque case, et la « cible » spécifiée comme étant la cellule centrale de la matrice. Voici à quoi ça ressemble dans l' | Notre première matrice sera un tableau 3x3, avec le nombre 1.00 dans chaque case, et la « cible » spécifiée comme étant la cellule centrale de la matrice. Voici à quoi ça ressemble dans l' | ||
- | Le procédé de convolution lui-même consiste à prendre notre matrice et à la positionner de sorte que la cellule cible de la matrice soit tour-à-tour positionnée au-dessus de chaque pixel de l' | + | Le procédé de convolution lui-même consiste à prendre notre matrice et à la positionner de sorte que la cellule cible de la matrice soit tour à tour positionnée au-dessus de chaque pixel de l' |
La valeur du pixel de sortie est donc : | La valeur du pixel de sortie est donc : | ||
Ligne 33: | Ligne 33: | ||
Some of you may have noticed that I've conveniently started with a pixel that is not on the very edge of the filter area. How does Inkscape calculate the value for the top-left pixel, for example, given that five of the points covered by the matrix simply don't exist? The answer lies in the Edge Mode popup in the filter settings: “Duplicate” copies the pixels from the outer edge to fill any missing values; “Wrap” uses the pixels from the opposite side of the image to fill the gaps as though it were working on a tiled version of the input; “None” just sets the channel values for the missing pixels to zero.** | Some of you may have noticed that I've conveniently started with a pixel that is not on the very edge of the filter area. How does Inkscape calculate the value for the top-left pixel, for example, given that five of the points covered by the matrix simply don't exist? The answer lies in the Edge Mode popup in the filter settings: “Duplicate” copies the pixels from the outer edge to fill any missing values; “Wrap” uses the pixels from the opposite side of the image to fill the gaps as though it were working on a tiled version of the input; “None” just sets the channel values for the missing pixels to zero.** | ||
- | Pas besoin de grandes connaissances mathématiques pour comprendre que les cinq pixels blancs ont apportés | + | Pas besoin de grandes connaissances mathématiques pour comprendre que les cinq pixels blancs ont apporté |
Sur le pixel suivant, le résultat est identique. Cette fois-ci, seulement trois pixels blancs contribuent à la sortie ; mais la valeur est encore de 765, qui est bornée, et donc la sortie est à nouveau blanche. | Sur le pixel suivant, le résultat est identique. Cette fois-ci, seulement trois pixels blancs contribuent à la sortie ; mais la valeur est encore de 765, qui est bornée, et donc la sortie est à nouveau blanche. | ||
Ligne 47: | Ligne 47: | ||
Now each output pixel is the average of nine pixels from the input image. Although it might not be clear from this small example, the outcome is a simple blurring of the input image. In reality, it would be better to use a Gaussian Blur primitive if you just want to soften your image a bit, but this was, of course, just a demonstration of the mathematics that takes place behind the scenes with the Convolve Matrix.** | Now each output pixel is the average of nine pixels from the input image. Although it might not be clear from this small example, the outcome is a simple blurring of the input image. In reality, it would be better to use a Gaussian Blur primitive if you just want to soften your image a bit, but this was, of course, just a demonstration of the mathematics that takes place behind the scenes with the Convolve Matrix.** | ||
- | Ou, du moins, c'est ainsi que c'est censé fonctionner. D' | + | Ou, du moins, c'est ainsi que c'est censé fonctionner. D' |
Parce que les valeurs que nous avons choisies entraînent une troncature des résultats de calcul, notre filtre, tel qu'il est, crée simplement en sortie des pixels noirs et blancs. Avant la troncature, les résultats étaient 1 275 et 765, mais notre action suivante supprime toute différence de valeur parce qu'ils sont tous au-dessus de 255. En utilisant le contrôle Diviseur dans les paramètres du filtre, nous pouvons adapter la sortie des calculs avant troncature, nous permettant de restreindre les valeurs pour préserver ces différences. Une bonne règle empirique est de mettre le diviseur à la même valeur que la somme de chacun des nombres de la matrice. En le réglant à 9 dans notre exemple, les sorties 1 275 et 765 sont réduites à 142 (1 275 ÷ 9) et 85 (765 ÷ 9), nous donnant ce résultat : | Parce que les valeurs que nous avons choisies entraînent une troncature des résultats de calcul, notre filtre, tel qu'il est, crée simplement en sortie des pixels noirs et blancs. Avant la troncature, les résultats étaient 1 275 et 765, mais notre action suivante supprime toute différence de valeur parce qu'ils sont tous au-dessus de 255. En utilisant le contrôle Diviseur dans les paramètres du filtre, nous pouvons adapter la sortie des calculs avant troncature, nous permettant de restreindre les valeurs pour préserver ces différences. Une bonne règle empirique est de mettre le diviseur à la même valeur que la somme de chacun des nombres de la matrice. En le réglant à 9 dans notre exemple, les sorties 1 275 et 765 sont réduites à 142 (1 275 ÷ 9) et 85 (765 ÷ 9), nous donnant ce résultat : | ||
Ligne 57: | Ligne 57: | ||
A Sobel operator emphasises the differences between adjacent pixels in one direction or another. The result is essentially a map with bright colors where there is a sharp transition between pixels, and dark colors where there is little or no difference between adjacent pixels. In practical terms, therefore, it acts as an edge detection filter, in this case highlighting vertical edges (note, particularly, | A Sobel operator emphasises the differences between adjacent pixels in one direction or another. The result is essentially a map with bright colors where there is a sharp transition between pixels, and dark colors where there is little or no difference between adjacent pixels. In practical terms, therefore, it acts as an edge detection filter, in this case highlighting vertical edges (note, particularly, | ||
- | Maintenant, passons à des matrices plus intéressantes. J' | + | Maintenant, passons à des matrices plus intéressantes. J' |
- | Un opérateur Sobel amplifie les différences entre les pixels voisins dans une direction ou une autre. Le résultat est essentiellement une configuration avec des couleurs lumineuses, où la transition entre pixels est franche, et des couleurs sombres où il y a peu ou pas de différence | + | Un opérateur Sobel amplifie les différences entre les pixels voisins dans une direction ou une autre. Le résultat est essentiellement une configuration avec des couleurs lumineuses, où la transition entre pixels est franche, et des couleurs sombres où il y a peu ou pas de différences |
**Rotating the values of the matrix through 90° (so that the top row contains 1, 2, 1 and the bottom row is -1, -2, -1) turns it into an edge detection filter for horizontal edges. In this case the coving vanishes, but any near-horizontal shapes are accentuated: | **Rotating the values of the matrix through 90° (so that the top row contains 1, 2, 1 and the bottom row is -1, -2, -1) turns it into an edge detection filter for horizontal edges. In this case the coving vanishes, but any near-horizontal shapes are accentuated: | ||
Ligne 72: | Ligne 72: | ||
As you can see, there are a variety of effects that can be produced with this primitive, although it's far from intuitive to work out what values you need to enter into the matrix to get a particular output. Although the matrix approach allows for a vast number of possibilities, | As you can see, there are a variety of effects that can be produced with this primitive, although it's far from intuitive to work out what values you need to enter into the matrix to get a particular output. Although the matrix approach allows for a vast number of possibilities, | ||
- | La rotation des valeurs de la matrice de 90° (de telle sorte que la ligne du haut contienne 1, 2, 1 et celle du bas -1, -2, -1) la transforme en un filtre de détection des contours horizontaux. Dans ce cas, la moulure disparaît, mais les formes presque horizontales sont accentuées : | + | La rotation des valeurs de la matrice de 90 ° (de telle sorte que la ligne du haut contienne 1, 2, 1 et celle du bas -1, -2, -1) la transforme en un filtre de détection des contours horizontaux. Dans ce cas, la moulure disparaît, mais les formes presque horizontales sont accentuées : |
Une forme plus générale de détection des contours, qui souligne les lignes verticales et horizontales donnant une version « schématique » de l' | Une forme plus générale de détection des contours, qui souligne les lignes verticales et horizontales donnant une version « schématique » de l' | ||
Ligne 88: | Ligne 88: | ||
Finally, the Preserve Alpha checkbox determines whether the alpha of the original pixel is transferred to the output unchanged (checked), or if the alpha channel is also subject to the convolution process (unchecked). I tend to leave this checked, as it's one less channel of calculations for Inkscape to perform, and I haven' | Finally, the Preserve Alpha checkbox determines whether the alpha of the original pixel is transferred to the output unchanged (checked), or if the alpha channel is also subject to the convolution process (unchecked). I tend to leave this checked, as it's one less channel of calculations for Inkscape to perform, and I haven' | ||
- | Avant de conclure, il y a quelques contrôles supplémentaires dans l' | + | Avant de conclure, il y a quelques contrôles supplémentaires dans l' |
Ici, dans ces exemples, j'ai pris comme base que le centre de la matrice est positionné sur le pixel cible de chaque calcul. Il est possible de changer cela en utilisant le champ Cible de l' | Ici, dans ces exemples, j'ai pris comme base que le centre de la matrice est positionné sur le pixel cible de chaque calcul. Il est possible de changer cela en utilisant le champ Cible de l' | ||
Ligne 99: | Ligne 99: | ||
Crédits images | Crédits images | ||
- | « La création d' | + | //La création d'Adam// par Michel-Ange |
https:// | https:// |
issue114/inkscape.1478698353.txt.gz · Dernière modification : 2016/11/09 14:32 de auntiee