EN FR
Login

Inktopia

Color analysis of fountain pen inks

Frequently Asked Questions

Color analysis of fountain pen inks

Color extraction from images

Color extraction relies on the K-means algorithm, a clustering method that groups pixels by similarity. Before analyzing the image, the system automatically filters background pixels: white or ivory paper, gray shadows, grids and light blue lines. This detection examines each pixel's brightness and saturation to exclude anything that isn't ink (very light pixels, quasi-achromatic, or with very similar RGB values indicating gray). Once cleaned, the image is analyzed by K-means which identifies the 5 most significant ink color clusters. For each cluster, the system calculates the average color and its percentage. These colors are then stored in three different color spaces (RGB, HSV, LAB) because each captures distinct aspects: RGB for screen display, HSV to separate hue and saturation, LAB for human perception. This triple representation enables robust comparisons between inks, regardless of lighting variations or image quality.

Go further

Background filtering uses precise thresholds: pixels with brightness > 90% are considered white paper, saturation < 10% indicates achromatic elements (gray, shadows). For grids, the system detects very light blue pixels (H between 180-240°, S < 30%, V > 70%). The K-means algorithm typically converges in 10-20 iterations with k=5 clusters. For each cluster, the RGB centroid is converted to HSV (Hue, Saturation, Value) and LAB (Lightness, a*, b*). The LAB space is particularly important as it's perceptually uniform: a distance of ΔE=2.3 (Euclidean distance in LAB space) represents the minimum perception threshold for the human eye. Conversions use the D65 illuminant (standard daylight) and the CIE 1931 2° observer. Each cluster's percentage is calculated as (cluster pixel count) / (total ink pixels) × 100.

Average and dominant color calculation

Each ink typically has multiple photos taken under different conditions. The system first analyzes each photo individually with K-means to extract its 5 main colors and their proportions. These results are then combined by weighting each color by its importance (percentage of pixels it represents). The final average color corresponds to the weighted average of all colors extracted from all photos. This multi-photo approach compensates for single-image biases: an overly dark or saturated photo has less impact if other photos balance it out. The result is a more faithful representation of the ink's true color.

Go further

The weighting calculation uses the formula: average_color = Σ(color_i × weight_i × proportion_i) / Σ(weight_i). Each photo's weight depends on its quality (0-1 score based on sharpness, exposure, resolution). Proportions are normalized so Σ(proportions) = 1 for each photo. For example, if an ink has 3 photos: Photo A (quality 0.9) extracts blue at 60%, Photo B (quality 0.7) extracts blue at 55%, Photo C (quality 0.8) extracts blue at 70%. The system first calculates weighted average of hues in HSV to avoid RGB averaging artifacts (averaging red and cyan in RGB yields gray, while HSV correctly produces an intermediate hue). The final 3 dominant colors are those with the highest cumulative proportions after aggregation.

Ink complexity measurement

Complexity measures the number of distinct colors and their dispersion. A simple, uniform ink (like a pure blue) scores close to 0. An ink with light shading scores 0.1-0.3. An ink with strong shading or two-tone effects scores 0.4-0.6. Truly multi-chromatic inks with sheen or shimmer reach 0.7+.

Go further

The complexity formula combines several metrics: (1) Normalized entropy of dominant color proportions: H = -Σ(p_i × log(p_i)) / log(n), where p_i is the proportion of color i and n the number of colors. Uniform distribution (all colors equal) yields H=1, single color yields H=0. (2) Coefficient of variation of saturation: CV_S = σ_S / μ_S, measuring relative dispersion of saturations. (3) Standard deviation of hue: σ_H, calculated circularly to handle continuity at 0°/360°. (4) Kurtosis of brightness: measures whether distribution is flat (many different values) or concentrated. Final score: complexity = 0.4×H + 0.25×CV_S + 0.2×(σ_H/180) + 0.15×(normalized_kurtosis). Weights are empirically calibrated on a manually annotated ink dataset.

Analysis quality measurement

Analysis quality indicates how reliable the ink's color analysis is. It's calculated from four factors: number of images (30%), outlier proportion (30%), average image quality (30%), and whether a similarity vector exists (10%). A score of 0.9+ means excellent quality (10+ images, no outliers). 0.7-0.9 is very reliable (6+ images). 0.5-0.7 is good (3-5 images). 0.3-0.5 is fair but improvable (1-2 images). Below 0.3 means the analysis needs more images to be trustworthy. This score helps identify which inks need additional photos for better accuracy.

Go further

Detailed calculation: (1) Image score: min(image_count / 10, 1.0) × 0.30. Capped at 10 images as beyond that improvement is marginal. (2) Outlier score: (1 - outlier_proportion) × 0.30. If 2 out of 10 images are outliers, proportion = 0.2, score = 0.8 × 0.30 = 0.24. (3) Average quality score: mean(image_qualities) × 0.30. Each image is scored on sharpness (Laplacian analysis), exposure (histogram), resolution (total pixels). (4) Vector score: 0.10 if the 128D similarity vector exists, 0.0 otherwise. Final formula: quality_score = image_score + outlier_score + quality_score + vector_score. This composite score helps prioritize inks needing re-photography.

Poor quality image detection

The system automatically detects outlier images using Z-score on color deviation. If the absolute Z-score exceeds 2, the image is flagged as an outlier with the specific reason (e.g., "Color deviation Z-score: 3.45"). These markers identify shooting problems: overly strong flash, incorrect white balance, or partially dried ink. The admin interface allows viewing these flagged images and excluding them from analysis if they distort the ink's representation.

Go further

Z-score measures how many standard deviations a value deviates from the mean. For each image, we calculate the average LAB distance between its extracted colors and the ink's average colors: d_i = mean(ΔE(image_color, average_color)). Then we calculate μ = mean(d_i) and σ = standard_deviation(d_i) for all images of the ink. Image i's Z-score is: Z_i = (d_i - μ) / σ. If |Z_i| > 2, the image is an outlier (statistically, only 5% of values in a normal distribution exceed ±2σ). A Z-score of +3.45 means the image is 3.45 times farther from the mean than normal variation, indicating a significant anomaly. The system also records the deviation type: hue (hue shift), saturation (desaturation/oversaturation), or brightness (underexposed/overexposed).

Ink similarity calculation

Each ink is represented by a 128-dimensional vector encoding its colorimetric characteristics. The average color occupies 45 dimensions (30 in repeated HSV, 15 in repeated RGB) or 35% of the total, ensuring it remains the dominant factor. The top 3 dominant colors and their proportions occupy 12 dimensions. A hue distribution histogram (18 bins of 20°) captures the overall distribution. Statistical moments (standard deviation, skewness, kurtosis) on H, S, and V reveal the ink's internal variability. Perceptual features (luminosity, chromaticity, purity) add a visual dimension. Finally, complexity metrics (entropy, dominant color weight) and the encoded color category complete the vector. Similarity between two inks is calculated using cosine distance: the closer to 1, the more similar the inks. This multi-dimensional representation captures both the main hue and secondary nuances, enabling identification of visually similar inks even if their exact composition differs.

Go further

128D vector breakdown: [0-29] repeated HSV average 10×, [30-44] repeated RGB average 5×, [45-50] top 3 dominant colors in HSV (H,S), [51-53] proportions of the 3 dominant colors, [54-71] hue distribution histogram (18 bins × 20° = 360°), [72-80] statistical moments (σ_H, σ_S, σ_V, skew_H, skew_S, skew_V, kurt_V, kurt_S, kurt_H), [81-83] perceptual features (average luminosity, average chromaticity, purity), [84-86] complexity metrics (entropy, dominant weight, dispersion), [87-101] color category encoded as one-hot (15 categories), [102-127] padding or additional features. Repeating HSV average (10×) and RGB average (5×) amplifies their weight in cosine similarity calculation. Cosine distance: sim(A,B) = (A·B) / (||A|| × ||B||), where A·B is the dot product. The closer sim → 1, the more vectors point in the same direction = similar inks.

Why do some similar inks look different?

Calculated similarity is mathematical and objective, but color perception is subjective and contextual. The screen used to view inks plays a major role: a poorly calibrated display can shift hues or saturation. Ambient lighting also modifies perception: warm light makes blues appear grayer, cold light diminishes reds. Individual differences in color perception (partial color blindness, variable sensitivity to nuances) also influence judgment. Finally, the paper and pen used to create the photographed swatch affect rendering: absorbent paper will dull the ink, glossy paper will enhance sheen. The algorithm strongly weights the average color (35% of the vector): two inks with similar base tones but different undertones may score highly, even if visually one appears greener and the other bluer. Mathematical similarity does not replace the human eye, it complements it.

Go further

Technical factors of perception/algorithm divergence: (1) Metamerism: two inks can have different reflectance spectra but appear identical under one lighting and different under another (tungsten lamp vs LED vs daylight). The algorithm works on RGB/sRGB assuming a standard D65 illuminant. (2) Chromatic adaptation: the human eye adapts to ambient color temperature (automatic compensation), but photos and calculations are fixed in the capture color space. (3) Simultaneous contrast: an ink surrounded by white appears darker than when surrounded by black, an effect ignored by the algorithm which compares isolated colors. (4) Differential sensitivity: the eye distinguishes variations better in greens/yellows (peak sensitivity at 555nm) than in blues/reds, but the algorithm treats all dimensions equally after normalization. (5) sRGB encoding deviation: sRGB space covers only ~35% of the visible CIE 1931 space, some saturated colors (deep cyans, purples) are clipped.

Chromaticity diagram representation

The chromaticity diagram is a polar plot where each ink is positioned according to two axes: the angle represents hue (0° for red, 120° for green, 240° for blue), and the distance from center represents chroma (saturation × brightness). This representation separates the hue dimension from the intensity dimension: a vivid red ink and a pale red ink will have the same angle but different distances. Gray inks, with low saturation, cluster at the center. Highly saturated and bright inks move toward the periphery. This visualization facilitates catalog exploration: to find blues, look toward 240°; for intense colors, move away from the center. Visible clusters reveal available color families and underrepresented areas.

Go further

Chroma is calculated as C = S × V (in normalized HSV coordinates 0-1), providing a measure of perceptual 'vividness'. Unlike a classic CIE xy diagram, this HSV polar representation simplifies interpretation: hue H is directly the angle θ = H (in degrees), and radius r = C × max_radius (typically 100 pixels for display). Achromatic inks (blacks, grays) have S ≈ 0 thus C ≈ 0, positioning them at center regardless of their nominal hue. To handle near-black colors (low V), a threshold can be applied: if V < 0.15, force r = 0 to avoid dispersion of quasi-black inks around the circle. The diagram often uses logarithmic or square root scale for radius (r = √C) to better space low-saturation inks that otherwise overlap at center. Cardinal axes correspond to primary/secondary hues: 0°=Red, 60°=Yellow, 120°=Green, 180°=Cyan, 240°=Blue, 300°=Magenta.

Sheen and shading detection

The system automatically distinguishes sheen from shading using a multi-criteria scoring algorithm. For each dominant color, it calculates a score (0-100) based on four factors: hue distance from the main color (30% weight), saturation variance (30%), brightness variance (20%), and minority presence (20%). Colors scoring above 30 are classified based on hue distance: if the hue differs by 60° or more (e.g., red shimmer on teal ink like Emeraude de Chivor), it's sheen - metallic particles reflecting a different color. If the hue is similar (less than 60° difference), it's shading - darker tones caused by ink pooling in certain areas (edges, paper texture). This distinction is crucial: sheen comes from reflective particles and appears as a contrasting color overlay, while shading is inherent to the ink's flow and drying behavior, producing darker concentrated areas where more ink accumulates.

Go further

Detailed score calculation for each secondary color i: (1) Hue distance: Δ_H = min(|H_i - H_main|, 360 - |H_i - H_main|) to handle circularity. Score_hue = (Δ_H / 180) × 30. The more the hue differs, the higher the score. (2) Saturation variance: Δ_S = |S_i - S_main|. Score_sat = Δ_S × 30. Sheen often has different saturation. (3) Brightness variance: Δ_V = |V_i - V_main|. Score_val = Δ_V × 20. Shading is generally darker (Δ_V negative but we take absolute value). (4) Minority presence: Score_minority = (1 - proportion_i) × 20. Secondary effects typically represent < 30% of pixels. Total score = Score_hue + Score_sat + Score_val + Score_minority. If score > 30 AND Δ_H > 60°, classify as sheen. If score > 30 AND Δ_H ≤ 60°, classify as shading. Shimmer (bright particles of same hue) is detected by high brightness variance (Δ_V > 0.3) with Δ_H < 30°.

Questions fréquentes

Analyse des couleurs d'encres pour stylos plume

Extraction des couleurs dans les images

L'extraction des couleurs repose sur l'algorithme K-means, une méthode de clustering qui regroupe les pixels par similarité. Avant d'analyser l'image, le système filtre automatiquement les pixels de fond : papier blanc ou ivoire, ombres grises, quadrillages et lignes bleues claires. Cette détection examine la luminosité et la saturation de chaque pixel pour exclure tout ce qui n'est pas de l'encre (pixels très clairs, quasi-achromatiques, ou avec RGB très proches indiquant du gris). Une fois nettoyée, l'image est analysée par K-means qui identifie les 5 groupes de couleurs d'encre les plus importants. Pour chaque groupe, le système calcule la couleur moyenne et son pourcentage. Ces couleurs sont ensuite stockées dans trois espaces colorimétriques différents (RGB, HSV, LAB) car chacun capture des aspects distincts : RGB pour l'affichage écran, HSV pour séparer teinte et saturation, LAB pour la perception humaine. Cette triple représentation permet des comparaisons robustes entre encres, indépendamment des variations d'éclairage ou de qualité d'image.

Pour aller plus loin

Le filtrage du fond utilise des seuils précis : pixels avec luminosité > 90% sont considérés comme du papier blanc, saturation < 10% indique des éléments achromatiques (gris, ombres). Pour les quadrillages, le système détecte les pixels bleus très clairs (H entre 180-240°, S < 30%, V > 70%). L'algorithme K-means converge typiquement en 10-20 itérations avec k=5 clusters. Pour chaque cluster, le centroïde RGB est converti en HSV (Hue, Saturation, Value) et LAB (Lightness, a*, b*). L'espace LAB est particulièrement important car il est perceptuellement uniforme : une distance de ΔE=2.3 (différence euclidienne dans l'espace LAB) représente le seuil de perception minimum pour l'œil humain. Les conversions utilisent l'illuminant D65 (lumière du jour standard) et l'observateur 2° CIE 1931. Le pourcentage de chaque cluster est calculé comme (nombre de pixels du cluster) / (total pixels d'encre) × 100.

Calcul des couleurs moyennes et dominantes

Chaque encre dispose généralement de plusieurs photos prises dans des conditions différentes. Le système analyse d'abord chaque photo individuellement avec K-means pour extraire ses 5 couleurs principales et leurs proportions. Ces résultats sont ensuite combinés en pondérant chaque couleur par son importance (pourcentage de pixels qu'elle représente). La couleur moyenne finale correspond à la moyenne pondérée de toutes les couleurs extraites de toutes les photos. Cette approche multi-photos compense les biais d'une seule image : une photo trop sombre ou trop saturée aura moins d'impact si d'autres photos équilibrent. Le résultat est une représentation plus fidèle de la vraie couleur de l'encre.

Pour aller plus loin

Le calcul de pondération utilise la formule : couleur_moyenne = Σ(couleur_i × poids_i × proportion_i) / Σ(poids_i). Le poids de chaque photo dépend de sa qualité (score 0-1 basé sur la netteté, l'exposition, la résolution). Les proportions sont normalisées pour que Σ(proportions) = 1 pour chaque photo. Par exemple, si une encre a 3 photos : Photo A (qualité 0.9) extrait un bleu à 60%, Photo B (qualité 0.7) extrait un bleu à 55%, Photo C (qualité 0.8) extrait un bleu à 70%. Le système calcule d'abord la moyenne pondérée des teintes en HSV pour éviter les artefacts de moyennage RGB (moyenner du rouge et du cyan en RGB donne du gris, alors qu'en HSV on obtient correctement une teinte intermédiaire). Les 3 couleurs dominantes finales sont celles ayant les proportions cumulées les plus élevées après agrégation.

Mesure de la complexité d'une encre

La complexité mesure le nombre de couleurs distinctes et leur dispersion. Une encre simple et uniforme (comme un bleu pur) obtient un score proche de 0. Une encre avec du shading léger obtient 0.1-0.3. Une encre avec un fort shading ou des effets bi-tons obtient 0.4-0.6. Les encres véritablement multi-chromatiques avec sheen ou shimmer atteignent 0.7+.

Pour aller plus loin

La formule de complexité combine plusieurs métriques : (1) Entropie normalisée des proportions de couleurs dominantes : H = -Σ(p_i × log(p_i)) / log(n), où p_i est la proportion de la couleur i et n le nombre de couleurs. Une distribution uniforme (toutes les couleurs égales) donne H=1, une couleur unique donne H=0. (2) Coefficient de variation de la saturation : CV_S = σ_S / μ_S, mesurant la dispersion relative des saturations. (3) Écart-type de la teinte : σ_H, mais calculé de manière circulaire pour gérer la continuité à 0°/360°. (4) Kurtosis de la luminosité : mesure si la distribution est plate (beaucoup de valeurs différentes) ou concentrée. Score final : complexité = 0.4×H + 0.25×CV_S + 0.2×(σ_H/180) + 0.15×(kurtosis_normalisé). Les poids sont calibrés empiriquement sur un ensemble d'encres annotées manuellement.

Mesure de la qualité de l'analyse

La qualité de l'analyse indique la fiabilité de l'analyse colorimétrique d'une encre. Elle est calculée à partir de quatre facteurs : nombre d'images (30%), proportion d'outliers (30%), qualité moyenne des images (30%), et présence d'un vecteur de similarité (10%). Un score de 0.9+ signifie excellente qualité (10+ images, pas d'outliers). 0.7-0.9 est très fiable (6+ images). 0.5-0.7 est bon (3-5 images). 0.3-0.5 est acceptable mais améliorable (1-2 images). En dessous de 0.3, l'analyse nécessite plus d'images pour être fiable. Ce score aide à identifier les encres nécessitant des photos supplémentaires pour une meilleure précision.

Pour aller plus loin

Le calcul détaillé : (1) Score d'images : min(nombre_images / 10, 1.0) × 0.30. Plafonné à 10 images car au-delà l'amélioration est marginale. (2) Score d'outliers : (1 - proportion_outliers) × 0.30. Si 2 images sur 10 sont des outliers, proportion = 0.2, score = 0.8 × 0.30 = 0.24. (3) Score de qualité moyenne : moyenne(qualités_images) × 0.30. Chaque image est notée sur sa netteté (analyse de Laplacien), son exposition (histogramme), sa résolution (pixels totaux). (4) Score de vecteur : 0.10 si le vecteur de similarité 128D existe, 0.0 sinon. Formule finale : quality_score = score_images + score_outliers + score_qualité + score_vecteur. Ce score composite aide à prioriser les encres nécessitant une re-photographie.

Détection des images de mauvaise qualité

Le système détecte automatiquement les images aberrantes (outliers) en utilisant un Z-score sur la déviation de couleur. Si le Z-score absolu dépasse 2, l'image est marquée comme outlier avec la raison spécifique (ex: "Color deviation Z-score: 3.45"). Ces marqueurs identifient les problèmes de prise de vue : flash trop fort, balance des blancs incorrecte, ou encre partiellement sèche. L'interface d'administration permet de visualiser ces images marquées et de les exclure de l'analyse si elles faussent la représentation de l'encre.

Pour aller plus loin

Le Z-score mesure à combien d'écarts-types une valeur s'éloigne de la moyenne. Pour chaque image, on calcule la distance LAB moyenne entre ses couleurs extraites et les couleurs moyennes de l'encre : d_i = moyenne(ΔE(couleur_image, couleur_moyenne)). Puis on calcule μ = moyenne(d_i) et σ = écart-type(d_i) pour toutes les images de l'encre. Le Z-score de l'image i est : Z_i = (d_i - μ) / σ. Si |Z_i| > 2, l'image est un outlier (statistiquement, seulement 5% des valeurs d'une distribution normale dépassent ±2σ). Un Z-score de +3.45 signifie que l'image est 3.45 fois plus éloignée de la moyenne que la variation normale, indiquant une anomalie significative. Le système enregistre également le type de déviation : teinte (hue shift), saturation (desaturation/oversaturation), ou luminosité (underexposed/overexposed).

Calcul de la similarité entre encres

Chaque encre est représentée par un vecteur de 128 dimensions qui encode ses caractéristiques colorimétriques. La couleur moyenne occupe 45 dimensions (30 en HSV répété, 15 en RGB répété) soit 35% du total, garantissant qu'elle reste le facteur dominant. Les 3 couleurs dominantes et leurs proportions occupent 12 dimensions. Un histogramme de distribution des teintes (18 intervalles de 20°) capture la répartition globale. Les moments statistiques (écart-type, asymétrie, kurtosis) sur H, S et V révèlent la variabilité interne de l'encre. Les caractéristiques perceptuelles (luminosité, chromaticité, pureté) ajoutent une dimension visuelle. Enfin, des métriques de complexité (entropie, poids de la couleur dominante) et la catégorie de couleur encodée complètent le vecteur. La similarité entre deux encres se calcule avec la distance cosinus : plus elle est proche de 1, plus les encres sont similaires. Cette représentation multi-dimensionnelle capture à la fois la teinte principale et les nuances secondaires, permettant d'identifier des encres visuellement proches même si leur composition exacte diffère.

Pour aller plus loin

Décomposition du vecteur 128D : [0-29] HSV moyen répété 10×, [30-44] RGB moyen répété 5×, [45-50] top 3 couleurs dominantes en HSV (H,S), [51-53] proportions des 3 couleurs dominantes, [54-71] histogramme de teintes (18 bins × 20° = 360°), [72-80] moments statistiques (σ_H, σ_S, σ_V, skew_H, skew_S, skew_V, kurt_V, kurt_S, kurt_H), [81-83] caractéristiques perceptuelles (luminosité moyenne, chromaticité moyenne, pureté), [84-86] métriques de complexité (entropie, poids dominant, dispersion), [87-101] catégorie de couleur encodée en one-hot (15 catégories), [102-127] padding ou caractéristiques additionnelles. La répétition de HSV moyen (10×) et RGB moyen (5×) amplifie leur poids dans le calcul de similarité cosinus. Distance cosinus : sim(A,B) = (A·B) / (||A|| × ||B||), où A·B est le produit scalaire. Plus sim → 1, plus les vecteurs pointent dans la même direction = encres similaires.

Pourquoi certaines encres similaires semblent-elles différentes ?

La similarité calculée est mathématique et objective, mais la perception des couleurs est subjective et contextuelle. L'écran utilisé pour visualiser les encres joue un rôle majeur : un écran mal calibré peut décaler les teintes ou la saturation. L'éclairage ambiant modifie également la perception : une lumière chaude rendra les bleus plus gris, une lumière froide atténuera les rouges. Les différences individuelles de perception des couleurs (daltonisme partiel, sensibilité variable aux nuances) influencent aussi le jugement. Enfin, le papier et le stylo utilisés pour créer le nuancier photographié affectent le rendu : un papier absorbant ternira l'encre, un papier glacé accentuera le sheen. L'algorithme, lui, pondère fortement la couleur moyenne (35% du vecteur) : deux encres avec des tons de base similaires mais des sous-tons différents peuvent obtenir un score élevé, même si visuellement l'une paraît plus verte et l'autre plus bleue. La similarité mathématique ne remplace pas l'œil humain, elle le complète.

Pour aller plus loin

Facteurs techniques de divergence perception/algorithme : (1) Métamérisme : deux encres peuvent avoir des spectres de réflectance différents mais apparaître identiques sous un éclairage, et différentes sous un autre (lampe tungstène vs LED vs lumière du jour). L'algorithme travaille sur RGB/sRGB qui suppose un illuminant D65 standard. (2) Adaptation chromatique : l'œil humain s'adapte à la température de couleur ambiante (compensation automatique), mais les photos et calculs sont figés dans l'espace couleur de capture. (3) Contraste simultané : une encre entourée de blanc paraît plus foncée qu'entourée de noir, effet ignoré par l'algorithme qui compare des couleurs isolées. (4) Sensibilité différentielle : l'œil distingue mieux les variations dans les verts/jaunes (pic de sensibilité à 555nm) que dans les bleus/rouges, mais l'algorithme traite toutes les dimensions également après normalisation. (5) Déviation d'encodage sRGB : l'espace sRGB ne couvre que ~35% de l'espace visible CIE 1931, certaines couleurs saturées (cyans profonds, violets) sont clippées.

Représentation du diagramme de chromaticité

Le diagramme de chromaticité est un graphique polaire où chaque encre est positionnée selon deux axes : l'angle représente la teinte (0° pour le rouge, 120° pour le vert, 240° pour le bleu), et la distance du centre représente le chroma (saturation × luminosité). Cette représentation sépare la dimension de teinte de la dimension d'intensité : une encre rouge vif et une encre rouge pâle auront le même angle mais des distances différentes. Les encres grises, peu saturées, se regroupent au centre. Les encres très saturées et lumineuses s'éloignent vers la périphérie. Cette visualisation facilite l'exploration du catalogue : pour trouver des bleus, on regarde vers 240° ; pour des couleurs intenses, on s'éloigne du centre. Les clusters visibles révèlent les familles de couleurs disponibles et les zones sous-représentées.

Pour aller plus loin

Le chroma est calculé comme C = S × V (en coordonnées HSV normalisées 0-1), donnant une mesure de la 'vivacité' perceptuelle. Contrairement à un diagramme CIE xy classique, cette représentation polaire HSV simplifie l'interprétation : la teinte H est directement l'angle θ = H (en degrés), et le rayon r = C × rayon_max (typiquement 100 pixels pour l'affichage). Les encres achro matiques (noirs, gris) ont S ≈ 0 donc C ≈ 0, les positionnant au centre indépendamment de leur teinte nominale. Pour gérer les couleurs proches du noir (V faible), on peut appliquer un seuil : si V < 0.15, forcer r = 0 pour éviter la dispersion d'encres quasi-noires autour du cercle. Le diagramme utilise souvent une échelle logarithmique ou racine carrée pour le rayon (r = √C) afin de mieux espacer les encres peu saturées qui sinon se chevauchent au centre. Les axes cardinaux correspondent aux teintes primaires/secondaires : 0°=Rouge, 60°=Jaune, 120°=Vert, 180°=Cyan, 240°=Bleu, 300°=Magenta.

Détection du sheen et du shading

Le système distingue automatiquement le sheen du shading grâce à un algorithme de scoring multi-critères. Pour chaque couleur dominante, il calcule un score (0-100) basé sur quatre facteurs : distance de teinte par rapport à la couleur principale (poids 30%), variance de saturation (30%), variance de luminosité (20%), et présence minoritaire (20%). Les couleurs obtenant un score supérieur à 30 sont classées selon leur distance de teinte : si la teinte diffère de 60° ou plus (ex: reflets rouges sur une encre turquoise comme Émeraude de Chivor), c'est du sheen - des particules métalliques réfléchissant une couleur différente. Si la teinte est similaire (moins de 60° de différence), c'est du shading - des tons plus foncés causés par l'accumulation d'encre dans certaines zones (bords du trait, texture du papier). Cette distinction est cruciale : le sheen provient de particules réfléchissantes et apparaît comme une superposition de couleur contrastante, tandis que le shading est inhérent aux propriétés d'écoulement et de séchage de l'encre, produisant des zones concentrées plus sombres là où l'encre s'accumule.

Pour aller plus loin

Calcul du score détaillé pour chaque couleur secondaire i : (1) Distance de teinte : Δ_H = min(|H_i - H_main|, 360 - |H_i - H_main|) pour gérer la circularité. Score_hue = (Δ_H / 180) × 30. Plus la teinte diffère, plus le score augmente. (2) Variance de saturation : Δ_S = |S_i - S_main|. Score_sat = Δ_S × 30. Un sheen a souvent une saturation différente. (3) Variance de luminosité : Δ_V = |V_i - V_main|. Score_val = Δ_V × 20. Le shading est généralement plus sombre (Δ_V négatif mais on prend la valeur absolue). (4) Présence minoritaire : Score_minority = (1 - proportion_i) × 20. Les effets secondaires représentent typiquement < 30% des pixels. Score total = Score_hue + Score_sat + Score_val + Score_minority. Si score > 30 ET Δ_H > 60°, classifier comme sheen. Si score > 30 ET Δ_H ≤ 60°, classifier comme shading. Les shimmer (particules brillantes de même teinte) sont détectés par forte variance de luminosité (Δ_V > 0.3) avec Δ_H < 30°.