Comment créer une palette de couleurs personnalisée par programmation?
J'aimerais créer une palette de couleurs dans matlab.
Je veux fondu à la couleur en fonction du niveau de gris du pixel.
Par exemple:
from 255 to 160 -> white
from 159 to 120 -> pink
from 119 to 50 -> brown
from 49 to 0 -> dark
- Essayez le colormapeditor: mathworks.com/help/matlab/ref/colormapeditor.html
- Je voudrais faire la même chose de colormapeditor mais je veux écrire une fonction matlab. Dans ce cas, je suis en mesure de modifier manuellement les seuils de couleurs en fonction de l'image que j'utilise. Désolé pour mon anglais!
Vous devez vous connecter pour publier un commentaire.
De la docs:
OK donc, pour commencer, nous allons créer un m par 3 de la matrice, dans votre cas, m est 161:
Maintenant, vous voulez le fond sombre (je suis aller avec le noir) et le 50e point d'être brun. mais laisse aller avec le rouge comme un exemple que c'est plus facile. RVB triples pour le noir et rouge respectivement:
[0,0,0]
et[1,0,0]
OK, donc actuellement notre enitre palette de couleur est le noir. Nous savons que nous voulons
map(50,:) = [1, 0 ,0]
c'est à dire rouge, mais maintenant, nous voulons un gradient entre le droit? Donc permet d'utiliser linspace (à noter qu'il existe une meilleure méthode à l'aide deinterp1
au lieu delinspace
à la fin de cette réponse):de mettre cela sur la carte:
Donc maintenant permet d'utiliser brun au lieu de rouge, pour obtenir le triple de ce lien diviser chaque élément de couleur par 255 donc notre triple est
t = [101, 67, 33]./255
. OK, donc maintenant il suffit de répéter que linspace procédure pour chaque couleur:Et maintenant, répétez l'opération pour chacun de vos autres nœuds.
Par exemple:
Une alternative à l'utilisation de
linspace
une fois par canal individuellement et en répétant cette opération pour chaque couleur est d'utiliser l'interpolation linéaire.Créer une matrice dont chaque ligne est une couleur triple
Et maintenant en faire un vecteur de quelle est la portée de chaque couleur doit être d'au (c'est à dire ce vecteur définit l'espacement des couleurs, ils n'ont pas besoin d'être régulièrement/équidistants):
Et enfin, vous pouvez créer la carte avec une simple interpolation:
tests
map(1:50...
que vous souhaitez utilisermap(51:120...
et au lieu delinspace(0,t(1),50)
vous souhaitez faire de lalinspace(t(1), t_pink(1), 70)
etcinterp1
est intelligent !Alternativement, vous pouvez utiliser
AdvancedColormap
fonction de FEX.Si vous avez besoin d'une lisse palette de couleurs, vous pouvez faire comme ceci: