Images : filtres par convolution


Description

Voici une classe présentant un ensemble de filtres dit de convolutions (on applique une matrice à chaque pixel de l'image).

Voici un exemple de matrice que l'on peut appliquer au pixel
-1 | -2 | -1
-2 | 16 | -2
-1 | -2 | -1

afin de réhausser la netteté de l'image.

Cette source se caractérise par l'emploi de quelques tableaux non affectés au tas managé, mais se situant dans la zone mémoire réservée à la méthode, ce qui donne de la rapidité dans les traitements. L'instruction "stackalloc" est employée à cet effet. Dans les boucles, j'ai essayé d'économiser des instructions IL afin de gagner du temps processeur.

Vous pouvez créer vos propres filtres en créant vos matrices 3x3 ou 5x5 ou plus avec les coefficients souhaités. Le terme facteur est en général la somme des coefficients. Un offset peut être appliqué à l'ensemble.

Conclusion :


Le fonctionnement est simple :

Filtres.Relief(maBitmap);

on reprend la référence de maBitmap qui a été traitée. Attention, à ne passer que des images au format 32Arbg.
Si celle-ci n'est pas au format 32Argb, vous pouvez en général en créer une à ce format par :
Bitmap image32 = new Bitmap(maBitmap);
Filtres.Accentuation(image32);

Dernière précision importante, la transparence est conservée !

Remerciement :
Je tiens à remercier Brunews (Bruno Nati) pour les conseils d'optimisation qu'il promulgue un peu partout dans les communautés.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.