2012-06-29 22 views
5

Desidero ottenere i valori RGB di un'immagine in molte condizioni di illuminazione. Per ottenere uno scenario neutro, desidero normalizzare i valori RGB con i valori RGB di alcune immagini predefinite.Come normalizzare il valore RGB con i valori RGB di riferimento

Lasciatemi spiegare. Ho 6 immagini predefinite e conosco i loro valori RGB medi esatti. Ora farò l'immagine dell'immagine sconosciuta in diverse condizioni di illuminazione. Farò anche le foto di 6 immagini predefinite nelle stesse condizioni. Ora il mio obiettivo è definire una formula di normalizzazione confrontando i valori rgb di riferimento noti delle immagini predefinite con i valori calcolati dall'immagine della telecamera. con questo parametro di normalizzazione calibrerò il valore RGB dell'immagine sconosciuta. In modo che io possa ottenere il valore RGB medio dall'immagine sconosciuta in modo neutro, indipendentemente dalle condizioni di illuminazione.

Come posso ottenere facilmente questo in Java.

risposta

0

Per situazioni di illuminazione diverse, è necessaria una correzione RGB lineare. Basta moltiplicare ciascuno dei valori R, G, B di una costante derivata per ciascun canale.

Se c'era un solo colore di riferimento, sarebbe facile: moltiplicare per il colore di riferimento e dividere per il colore catturato. Ad esempio, se il tuo colore di riferimento era (240,200,120) ma la tua immagine è stata misurata (250,190,150), moltiplicherebbe il rosso di 240/250, il verde di 200/190 e il blu di 120/150. Usa le stesse costanti per ogni pixel nell'immagine.

Con più colori da abbinare dovrai calcolare la media dei fattori di correzione per arrivare a un singolo insieme di costanti. Maggiore ponderazione deve essere data ai colori più brillanti, ad esempio se hai avuto un riferimento di (200,150,20) e ha misurato (190,140,10) che avresti cercato di raddoppiare la quantità di blu che potrebbe essere molto lontana. Il metodo più semplice sarebbe quello di sommare tutti i valori di riferimento e dividere per la somma dei valori misurati.

+0

Ciao, sto usando il tuo metodo. Ora invece dei valori RGB sto usando lo spazio colore HSI e solo normalizzando la matrice di intensità. –

+0

@P basak: in altre parole, si sta essenzialmente facendo ciò che ho proposto, ma con HSI anziché YUV.COSÌ, in altre parole, volevi semplicemente normalizzare qualcosa di molto simile a un canale di luminosità !!! – trumpetlicks

+0

@Mark - Quindi in sostanza ciò che state proponendo è la media per ciascun canale, usando quindi le medie come fattore di normalizzazione per le nuove immagini. – trumpetlicks

1

È la ragione per cui si sta eseguendo questa operazione per normalizzare veramente l'RGB o si sta cercando di normalizzare le immagini per avere una luminosità simile. Perché se il tuo obiettivo è semplicemente la luminosità, allora convertirò in uno standard di colore che ha un componente di luminosità e normalizzerò solo il componente di luminosità.

Da lì è possibile riprendere la nuova immagine nel componente colore diverso standard e convertirla in RGB se lo si desidera.

I passi (ma non in Java):

1) Convert - RGBImage --> YUVImage 
2) Normalize RGBImage using the Y component 
3) Convert - Normalized(YUVImage) --> Normalized(RGBImage) 

In questo modo è possibile implementare normalizzazione della luminosità utilizzando il algorithm described here.

ELSE, è possibile calcolare la media delle medie per ciascun canale e utilizzarle come numeratore per i fattori di normalizzazione per le nuove immagini che calcolano ciascun canale separatamente.

+0

Ciao, voglio davvero normalizzare rgb. –

+0

Voglio qualcosa come la calibrazione. Voglio calcolare la deviazione dalle immagini di riferimento e applicare quella deviazione all'immagine sconosciuta per ottenere valori neutri. –

+0

Ho convertito in spazio colore HSI. Ora sto cercando un modo per normalizzare l'indice con il riferimento. –

Problemi correlati