Il existe de nombreuses façons de désaturer une image en couleur. En fait, il n'est probablement pas un "vrai" ou "bonne" façon de le faire, bien que certaines méthodes sont plus "correct" que d'autres.
Je suppose que votre image est en RVB (Rouge-Vert-Bleu) format (si BGR est également fréquent).
La plus simple façon, ce qui devrait fonctionner pour la plupart des photos (mais moins pour les images de synthèse), est simplement d'utiliser le canal Vert des 3 canaux RVB. Les humains sont plus sensibles à des variations dans la partie verte du spectre, de sorte que le canal vert couvre la plupart de la plage visible et est une bonne approximation de l'image en niveaux de gris que vous voulez.
Une meilleure façon de générer une image en niveaux de gris est d'utiliser une moyenne pondérée des 3 canaux RVB. Le choix des pondérations égales (0.33*R+0.33*G+0.33*B) donne une assez bonne image en niveaux de gris. D'autres convexe poids (non négatif poids d'un montant total de 1) donnera des résultats différents, dont certains peuvent être considérés comme plus esthétique, et certains peuvent prendre en considération des paramètres perceptifs. (YUV utilise ces poids: Y = 0.299*R + 0.587*G + 0.114*B)
Vous pouvez toujours convertir l'image à un autre espace de couleur qui n'a qu'un unique canal de niveaux de gris (et 2 "couleur" chaînes"), tels que le HSV (V est le niveau de gris), YUV (Y est le niveau de gris) ou Lab (L est le niveau de gris). Les différences ne devraient pas être très grande.
Le terme "dé-saturation" vient de la VHS de l'espace. Si vous vous convertir image à HSV, réglez le canal (Saturation) à tous les zéros, et le rendu de l'image, vous obtiendrez un 3-canal désaturé "couleur" de l'image.
La reproduction de ces niveaux de gris de canaux RVB vous donnera un 3-canal désaturé "couleur" de l'image où tous les 3 canaux RVB sont identiques.
Une fois que vous avez ce 3 canaux (RVB) image désaturée, vous pouvez multiplier chaque canal par un seprate poids à la colorisation de l'image - une image sépia.
Donné un gris du pixel [v,v,v], coloriser comme suit: [v*a, v*b, v*c], tels que 0 <= a,b,c <=1.
//Loop through the images pixels to reset color.for(x=0; x<image1.Width; x++){for(y=0; y<image1.Height; y++){Color pixelColor = image1.GetPixel(x, y);int grayScale =(int)((originalColor.R *.3)+(originalColor.G *.59)+(originalColor.B *.11));//create the color objectColor newColor =Color.FromArgb(grayScale, grayScale, grayScale);
image1.SetPixel(x, y, newColor);}}
Convertir la couleur des pixels de niveaux de gris à l'aide de cette
Gray=Green*0.59+Blue*0.11+Red*0.30;
Pourquoi ces valeurs de multiplier les composants? Ne qui donnent sépia? Je soupçonne qu'il fait, mais une explication serait utile. Rouge (255,0,0) Vert (0,255,0) Bleu (0,0,255) Ensemble, ils font de la couleur blanche qui est 255,255,255. Si vous calculez à l'aide de la formule ci-dessus à l'aide de pure RVB, c'résultats les plus proches à 255.
De sépia vous souhaitez convertir en niveaux de gris en premier. Ensuite, il suffit de multiplier chaque pixel par un ensemble de mise à l'échelle de triplets tels que [1, 0.95, de 0,82] vous pouvez jouer avec ce triplet pour obtenir le droit de regarder... de sorte que le code peut être...
for(x=0; x<image1.Width; x++){for(y=0; y<image1.Height; y++){Color pixelColor = image1.GetPixel(x, y);int grayScale =(int)((originalColor.R *.3)+(originalColor.G *.59)+(originalColor.B *.11));//create the color object Color newColor =Color.FromArgb(grayScale, grayScale, grayScale);//now apply a sepia filter
pixelColor.R = newColor.R*1;
pixelColor.G = newColor.G*0.95;
pixelColor.B = newColor.B*0.82;
image1.SetPixel(x, y, pixelColor);}}
Il existe de nombreuses façons de désaturer une image en couleur. En fait, il n'est probablement pas un "vrai" ou "bonne" façon de le faire, bien que certaines méthodes sont plus "correct" que d'autres.
Je suppose que votre image est en RVB (Rouge-Vert-Bleu) format (si BGR est également fréquent).
La plus simple façon, ce qui devrait fonctionner pour la plupart des photos (mais moins pour les images de synthèse), est simplement d'utiliser le canal Vert des 3 canaux RVB. Les humains sont plus sensibles à des variations dans la partie verte du spectre, de sorte que le canal vert couvre la plupart de la plage visible et est une bonne approximation de l'image en niveaux de gris que vous voulez.
Une meilleure façon de générer une image en niveaux de gris est d'utiliser une moyenne pondérée des 3 canaux RVB. Le choix des pondérations égales (0.33*R+0.33*G+0.33*B) donne une assez bonne image en niveaux de gris. D'autres convexe poids (non négatif poids d'un montant total de 1) donnera des résultats différents, dont certains peuvent être considérés comme plus esthétique, et certains peuvent prendre en considération des paramètres perceptifs. (YUV utilise ces poids:
Y = 0.299*R + 0.587*G + 0.114*B
)Vous pouvez toujours convertir l'image à un autre espace de couleur qui n'a qu'un unique canal de niveaux de gris (et 2 "couleur" chaînes"), tels que le HSV (V est le niveau de gris), YUV (Y est le niveau de gris) ou Lab (L est le niveau de gris). Les différences ne devraient pas être très grande.
Le terme "dé-saturation" vient de la VHS de l'espace. Si vous vous convertir image à HSV, réglez le canal (Saturation) à tous les zéros, et le rendu de l'image, vous obtiendrez un 3-canal désaturé "couleur" de l'image.
La reproduction de ces niveaux de gris de canaux RVB vous donnera un 3-canal désaturé "couleur" de l'image où tous les 3 canaux RVB sont identiques.
Une fois que vous avez ce 3 canaux (RVB) image désaturée, vous pouvez multiplier chaque canal par un seprate poids à la colorisation de l'image - une image sépia.
Donné un gris du pixel
[v,v,v]
, coloriser comme suit:[v*a, v*b, v*c]
, tels que0 <= a,b,c <=1
.OriginalL'auteur Adi Shavit
Convertir la couleur des pixels de niveaux de gris à l'aide de cette
Rouge (255,0,0) Vert (0,255,0) Bleu (0,0,255) Ensemble, ils font de la couleur blanche qui est 255,255,255. Si vous calculez à l'aide de la formule ci-dessus à l'aide de pure RVB, c'résultats les plus proches à 255.
OriginalL'auteur hungryMind
De sépia vous souhaitez convertir en niveaux de gris en premier. Ensuite, il suffit de multiplier chaque pixel par un ensemble de mise à l'échelle de triplets tels que [1, 0.95, de 0,82] vous pouvez jouer avec ce triplet pour obtenir le droit de regarder... de sorte que le code peut être...
OriginalL'auteur Rob McFeely
OriginalL'auteur Sultan
Ici, j'ai trouvé la bonne réponse:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/1d6b5960-c509-433c-b000-c885b8c727c4/how-to-convert-an-image-to-black-and-white-not-grayscale?forum=csharpgeneral&prof=required
OriginalL'auteur Serov Danil