2011-02-02 14 views
7

La mia applicazione iphone acquisisce i dati in tempo reale dalla videocamera utilizzando AVCaptureSession di AVFoundation. Sono in grado di accedere a quei dati nel suo metodo di delega in runtime e creare un'immagine da esso. Può essere CGImage, UIImage o solo dati grezzi (CMSampleBufferRef).Determinazione della luminanza/luminosità dell'immagine

Quello che sto cercando di fare è calcolare la luminanza, la luminosità di quei dati (immagine). Oppure può essere un altro valore che può indicarmi quanto è luminosa la luce in ingresso.

Esiste un modo standard per ottenere questo valore? Forse usando OpenGL.

Grazie in anticipo.

risposta

13

Basta convertire l'immagine in YUV format e calcolare la media del canale luma. La conversione del colore è un'operazione tipica e qualsiasi framework di elaborazione delle immagini adeguato lo supporta. Ad esempio, OpenCV (hai detto OpenGL, ma in realtà non ha nulla a che fare con l'elaborazione delle immagini, presumo che tu intendessi OpenCV) ha CvtColor.

Se non si dispone di un tale quadro a portata di mano, ma hanno accesso alle intensità dei pixel, è possibile utilizzare l'equazione:

Y' = 0.299*R + 0.587*G + 0.144*B 

per ottenere il canale luma, e poi calcolare la media. R, G e B rappresentano rispettivamente i canali rosso, verde e blu.

EDIT

Si noti che è possibile che la fotocamera compenserà vivaci scene scure/modificando la sua apertura. Questo dipende dalla fotocamera, ma penso che la maggior parte delle fotocamere faccia questo - altrimenti le tue immagini possono finire sia sature (bianco puro) o nero semplice - in entrambi i casi, inutile. Occhi umani in realtà do the same thing.

Il lato negativo è che è difficile dire se ci si trova in un ambiente buio o luminoso semplicemente guardando un'immagine. In tal caso, potrebbe essere necessario andare oltre l'immagine e interrogare la telecamera. In teoria, puoi farlo direttamente attraverso un driver (improbabile) o forse osservando i metadati dell'immagine (ad esempio con JPEG, c'è EXIF).

Infine, non hai detto cosa esattamente vuoi sapere della luminosità di. Se è la scena generale, allora la media sarà abbastanza buona. Se è parte della scena, potresti dover fare qualcosa di un po 'più intelligente. Facci sapere se questo è il caso.

+0

Grazie, immagino che debba funzionare. Farò un tentativo e postare il risultato qui. – krafter

+0

Dai un'occhiata al mio commento modificato: ho identificato un potenziale problema e alcuni modi per risolverlo. – misha

+0

Sì, questo funziona davvero: ottenere informazioni sui pixel dividendoli nelle intensità del colore e calcolando Y come mostrato qui. Poiché ho bisogno del valore di luminosità medio di piccole (veloci) pulsazioni luminose prima che la fotocamera possa adattarsi ad esso, questo metodo funziona bene. Grazie ancora. – krafter

Problemi correlati