1

J'ai travaillé sur la mise en grappe K-means sur des images dans différents espaces colorimétriques. Les centres de cluster sont représentatifs de la valeur de couleur et je voudrais décrire la valeur de couleur par un nom de couleur.Mappage des valeurs RVB aux noms de couleurs MATLAB

Exemple des résultats de l'opération de regroupement: Orignal, Segmented Image

Je voudrais maintenant décrire les noms de couleurs de ces 3 pixels (valeurs RVB) de la img segmentée:

134.2263 146.4977 194.6406 
137.5899 78.5631 50.4859 
111.6383 131.4764 36.3863 

pour obtenir sorties comme: vert foncé, brun, violet clair etc.

Je pense que c'est similaire à l'utilisation de codes de couleurs HTML mais je ne suis pas sûr de savoir comment l'appliquer dans matlab.

Il existe des questions similaires sur stackoverflow mais liées à python, java etc pas matlab. Y a-t-il des fonctionnalités matlab qui rendraient cela possible?

Merci!

Répondre

2

Une esquisse de solution:

Télécharger une page Web contenant des informations sur les valeurs rgb et les noms correspondants:

ctable = urlread('https://en.wikipedia.org/wiki/List_of_colors_%28compact%29'); 

Parse valeurs rgb, chaque valeur arrive à apparaître deux fois:

rgb_vals = regexp(ctable,'rgb\([0-9]+,[0-9]+,[0-9]+\)','match')'; 
rgb_vals = rgb_vals(1:2:end); 

Analyser les noms de couleurs: cela peut être un peu plus compliqué, mais possible. Assurez-vous simplement que l'ordre correspond à la liste analysée des valeurs rgb, en examinant quelques paires.

Enfin, construisez un classificateur KNN, auquel une nouvelle valeur rgb est attribuée, recherchez la valeur rgb la plus proche dans votre table et affichez le nom correspondant. Vous pouvez utiliser le knn de Matlab.

Une autre option similaire est de rechercher un convertisseur rbb-to-name en ligne, et d'envoyer une requête à chaque fois que vous en avez besoin.

EDIT Il pourrait être plus facile d'abord diviser le contenu en ctable par fins de ligne, puis lorsque vous trouvez une ligne avec la valeur rgb vous pouvez rechercher le nom dans la ligne suivante.

+0

+1 et merci! mais cela peut être un peu trop complexe pour mon application. Pouvez-vous penser à une autre manière dont il peut être fait simplement en utilisant environ 10 couleurs principales, par ex. rouge bleu vert jaune etc. mais avec des descriptions telles que sombre, lumière? Je ne peux penser qu'à estimer les plages de ces couleurs dans hsv et à les mapper en une étiquette définie. Un classificateur KNN serait-il également applicable dans ce cas? Merci. – User404

+0

Il devrait fonctionner de la même manière pour une table plus courte (que vous pouvez également trouver en ligne, ou vous construire). le drak/lumière peut être basé dans un certain seuil. Si cela ne fonctionne pas pour hsv, vous pouvez toujours convertir hsv-> rgb et faire le knn dans l'espace rgb –

+0

Y a-t-il des plages définies pour les couleurs sombres/claires? ou est-ce que je viens d'estimer à partir d'une application "sélecteur de couleurs"? – User404