Algoritmo del colore più vicino utilizzando la tripletta esagonale

6

Wikipedia ha una lista di colori che sto usando per una base di nomi di colori. Voglio trovare il colore con il nome più vicino dato un valore RGB arbitrario.

Ad esempio #5D8AA8 tripletta esadecimale è "Air Force Blue". Queste informazioni verranno memorizzate in una tabella di database (tbl_Color (HexTriplet,ColorName)) nel mio sistema

Supponiamo di aver creato un colore con #5D8AA7 . Ho bisogno di ottenere il colore più vicino disponibile nella tabella tbl_Color. La risposta attesa è " #5D8AA8 - Air Force Blue". Questo perché #5D8AA8 è il colore più vicino per #5D8AA7 .

Abbiamo qualche algoritmo per trovare il colore più vicino?

Riferimenti

  1. Algoritmo per analizzare l'esadecimale nella famiglia di colori
  2. Algoritmo per la ricerca il colore tra due altri - nello spazio cromatico dei colori dipinti
posta Lijo 07.08.2012 - 11:01
fonte

2 risposte

9

Un semplice algoritmo che fornisce risultati ragionevolmente buoni: aggiungi la differenza quadratica di ogni componente di colore (rosso, verde, blu) tra il colore che stai cercando e il colore nell'elenco dei colori e scegli il colore in cui la somma di quelle differenze al quadrato sono minime.

Per un risultato più accurato, consulta l'articolo wikipedia sulla differenza di colore e implementa uno degli algoritmi descritti qui.

    
risposta data 07.08.2012 - 11:12
fonte
3

Puoi trattare i colori RGB come un vettore tridimensionale.

La distanza tra due punti qualsiasi (colori) è data dalla seguente formula:

Il tuo colore è dato come: # 5D8AA8

Questo è composto da tre valori esadecimali: [5D] [8A] [A8]

Segui questi passaggi:

  1. Elimina # dalla stringa
  2. Spezza il resto in 2x2x2 pezzi e
  3. Utilizza un convertitore Hex2Dec per convertire il tuo colore in una rappresentazione di valori decimali 3D

Utilizza la formula fornita sopra per calcolare la variazione di colore.

    
risposta data 26.11.2014 - 15:52
fonte

Leggi altre domande sui tag