Ho scritto un programma per computer in grado di rilevare monete in un'immagine statica (.jpeg, .png, ecc.) Usando alcune tecniche standard per la visione computerizzata (sfocatura gaussiana, soglia, trasformazione di Hough ecc.). Utilizzando i rapporti delle monete prelevate da una determinata immagine, posso stabilire con certezza quali sono le monete. Tuttavia, desidero aggiungere ai miei livelli di confidenza e anche determinare se una moneta che deduco essere di tipo A (dai rapporti di raggio) è anche del colore corretto. Il problema è che per le monete britanniche et al. (rame, argento, oro), i rispettivi colori (in particolare rame-oro) sono molto simili.
Ho una routine che estrae il colore medio di una determinata moneta in termini di "spazio-colore" di RedGreenBlue (RGB) e routine per convertire questo colore in "spazio-colore" di HueSaturationBrightness (HSB o HSV).
RGB non è molto carino con cui tentare di distinguere tra i tre colori delle monete (vedere l'immagine allegata [di base] per un esempio). Ho i seguenti intervalli e valori tipici per i colori dei diversi tipi di monete:
Nota: il valore tipico qui è quello selezionato usando una media 'pixel-saggia' di un'immagine reale.
**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).
**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).
**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86)
Per prima cosa ho cercato di utilizzare la "distanza euclidea" tra un determinato colore medio della moneta (usando RGB) e i valori tipici per ciascun tipo di moneta sopra indicato trattando i valori RGB come un vettore; per il rame avremmo:
dove il valore più piccolo della differenza ( ) ci direbbe quale tipo di moneta data è più probabile. Questo metodo si è dimostrato molto impreciso.
Ho anche provato a confrontare la tonalità delle monete con i valori tipici dei tipi forniti sopra. Sebbene teoricamente ciò fornisca uno "spazio colore" molto migliore per gestire i diversi livelli di luminosità e saturazione delle immagini, anche questo non era abbastanza preciso.
Domanda: Qual è il metodo migliore per determinare un tipo di moneta basato sul colore (da un'immagine statica)?
Grazie mille per il tuo tempo.
Modifica 1
Nota: ho provato tutte le idee discusse di seguito e non ho raggiunto quasi nulla. La varianza delle condizioni di illuminazione (anche all'interno della stessa immagine) rende questo problema molto difficile e dovrebbe essere preso in considerazione.
Modifica 2 (riepilogo dei risultati)
Grazie per le tue risposte. Ulteriori mie ricerche (comprese le tue risposte e i tuoi commenti) hanno evidenziato quanto sia difficile affrontare questo problema nel caso generico di illuminazione arbitraria, telecamera arbitraria (dispositivo mobile), fluttuazione del colore della moneta (anche per la stessa specie / tipo) ecc. Ho prima considerato il riconoscimento del colore della pelle (un campo di ricerca molto attivo) come punto di partenza e ci sono ancora numerosi problemi anche con il riconoscimento del colore della pelle per i soli caucasici (vedi questo documento per una revisione delle tecniche attuali), e il fatto che questo problema contenga tre oggetti di colore distinti, ognuno dei quali può avere cromie continue e variabili, rende questo argomento di visione artificiale molto difficile da classificare e trattare di conseguenza (in effetti si potrebbe fare un buon dottorato su di esso !).
Ho esaminato il metodo di vincolo gamut dal post molto utile di DW di seguito. Questo è stato a prima vista molto promettente come una fase di pre-elaborazione per trasformare l'immagine e gli oggetti moneta separati in colori indipendenti dalle condizioni di illuminazione. Tuttavia, anche questa tecnica non funziona perfettamente (e coinvolge una libreria di immagini / istogrammi per le mappature - che non voglio approfondire) e nemmeno le metodologie molto più complesse di Neural Network Architecture. In effetti questo documento afferma in astratto che:
"current machine colour constancy algorithms are not good enough for colour-based
object recognition.".
Questo non vuol dire che non ci siano molti documenti più aggiornati su questo argomento, ma non riesco a trovarli e al momento non sembra essere un'area di ricerca molto attiva.
Anche la risposta di AVB è stata utile e ho esaminato brevemente L A B *.
"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative
perceptual differences between any two colours in L*a*b* can be approximated by
treating each colour as a point in a three dimensional space."
Da quello che ho letto, la trasformazione in questo spazio colore per le mie immagini dipendenti dal dispositivo sarà complicata, ma esaminerò in dettaglio questo (in vista di una sorta di implementazione) quando avrò un po 'più di tempo.
Non trattengo il respiro per una soluzione concreta a questo problema e dopo il tentativo con L A B * trascurerò il colore della moneta e cercherò di mettere in sicurezza i miei attuali algoritmi di rilevamento geometrico (accurata trasformazione ellittica di Hough ecc.).
Grazie a tutti voi. E come nota finale di questa domanda, ecco la stessa immagine con un nuovo algoritmo di rilevamento geometrico, che non ha riconoscimento del colore: