2017-10-10 3 views
0

J'ai des images de pierres. Les couleurs de la pierre sont crémeuses et je veux classer les images en fonction de leur différence de couleur. Je veux donner le grade de pierre le plus léger 0 et le grade de pierre le plus foncé 10 et classer les autres entre ces deux. Les pierres sont très similaires mais leur différence de couleur est détectable par les yeux.
Je sais si des pierres où tout en bleu par exemple je pourrais les classer en fonction de la partie R de la couleur RVB. Mais qu'en est-il de la couleur crémeuse?trier les images selon leur couleur

enter image description here

enter image description here

+0

Pouvez-vous télécharger quelques exemples d'images? Avez-vous réussi à segmenter les pierres de l'arrière-plan? Si ce n'est pas le cas, la mise au point d'un algorithme de tri sur la base de la couleur ne fonctionnera pas bien en raison du bruit de fond. – ZdaR

+0

@ZdaR J'ai téléchargé des images de pierres – mohammad

Répondre

2

Vous n'avez pas besoin d'aller à la complexité de l'installation d'un compilateur et OpenCV et l'écriture/la compilation du code Python/C++ pour obtenir la légèreté moyenne de vos images . Vous pouvez simplement utiliser ImageMagick qui est installé sur la plupart des distributions Linux et est également disponible pour macOS et Windows.

Fondamentalement, vous pouvez regarder le "Légèreté" dans HSL colourspace ou dans le Lab colourspace.


Regardons HSL premier.

# Resize stone down to one average pixel, convert to HSL colourspace and print 
convert stone1.jpg -resize 1x1 -colorspace HSL txt: 

# ImageMagick pixel enumeration: 1,1,65535,hsl 
0,0: (4228.92,19250.9,52587.2) #104BCD hsl(23.2305,29.375%,80.2429%) 

Ainsi, la légèreté de stone1.jpg dans HSL est 80,24%. Essayons stone2.jpg:

convert stone2.jpg -resize 1x1 -colorspace HSL txt: 

# ImageMagick pixel enumeration: 1,1,65535,hsl 
0,0: (7387.85,27252.5,57243) #1D6ADF hsl(40.5833,41.5846%,87.3472%) 

Ainsi, stone2.jpg est plus léger à 87,35%

Simplifions la sortie pour afficher uniquement les Légèreté:

convert stone1.jpg -colorspace HSL -format "%[fx:int(100*mean.b)]" info: 
80 

et stone2.jpg:

convert stone2.jpg -colorspace HSL -format "%[fx:int(100*mean.b)]" info: 
87 

Regardons Lab maintenant.

convert stone1.jpg -resize 1x1 -colorspace Lab txt: 

# ImageMagick pixel enumeration: 1,1,65535,cielab 
0,0: (53895.2,1140.43,2057.36) #D20408 cielab(82.2388%,1.74018%,3.13933%) 

Ainsi, stone1.jpg a un de 82,24% Lab Légèreté, regardons stone2.jpg:

convert stone2.jpg -resize 1x1 -colorspace Lab txt: 

# ImageMagick pixel enumeration: 1,1,65535,cielab 
0,0: (59395,-21.0391,2545.27) #E7000A cielab(90.6309%,-0.36%,3.88383%) 

Ainsi, stone2.jpg a une légèreté de 90,6%.

Et si nous voulons la forme la plus simple?

convert stone1.jpg -colorspace Lab -format "%[fx:int(100*mean.r)]" info: 
82 

Quels sont les pourcentages de? Ils sont le pourcentage blanc, donc le blanc pur serait 100% et le noir pur serait 0%. Test rapide ...

convert xc:black -colorspace Lab txt: 
# ImageMagick pixel enumeration: 1,1,65535,cielab 
0,0: (0,-0.5,-0.5) #000000000000 cielab(0%,-0.000762951%,-0.000762951%) 

convert xc:white -colorspace Lab txt: 
# ImageMagick pixel enumeration: 1,1,65535,cielab 
0,0: (65535,0.125,-1.69336) #FFFF00000000 cielab(100%,0.000190738%,-0.0025839%) 

Que faire si vous avez tout un répertoire complet des échantillons de pierre et que vous voulez les HSL valeurs Légèreté pour chacun?

convert stone* -colorspace HSL -format "%f:%[fx:int(100*mean.b)]\n" info: 
stone1.jpg:80 
stone2.jpg:87 
stone3.jpg:75 
stone4.jpg:92 
2

Je veux classer les images en fonction de leur différence color.I veulent donner le plus léger de qualité en pierre 0 et la plus sombre de qualité en pierre 10 et classifient les autres entre ces deux . Les pierres sont très similaires mais leur différence de couleur est détectable par les yeux.

Si vous souhaitez les commander du clair au foncé et prendre en compte la teinte, l'espace colorimétrique RVB n'est pas adapté. Vous devriez jeter un oeil à l'Lab colour space ou peut-être l'espace colorimétrique Hue Saturation Lightness (HSL). En convertissant les images en un de ces espaces de couleur, puis en prenant la moyenne, vous pouvez ensuite trier en luminosité, et un ou deux axes de couleur/teinte. (Cela suppose le contenu de l'image est la plupart du temps homogène.)