2010-07-30 13 views
6

Sto cercando di implementare un metodo di equalizzazione dell'istogramma (HE) per un UIImage nella mia app per iPhone.Equalizzazione dell'istogramma con correzione del colore (iPhone/obiettivo-C)

ho letto il seguente:

http://en.wikipedia.org/wiki/Histogram_equalization

ma dice:

Ancora, è da notare che applicando lo stesso metodo sul rosso, verde, e componenti blu di un RGB l'immagine può produrre cambiamenti drammatici nel bilanciamento dei colori dell'immagine poiché le relative distribuzioni dei canali cromatici cambiano a seguito dell'applicazione dell'algoritmo. Tuttavia, se l'immagine viene prima convertita in un altro spazio colore, in uno spazio colore Lab, o in uno spazio colore HSL/HSV in particolare, l'algoritmo può essere applicato al canale di luminanza o valore senza provocare modifiche alla tonalità e alla saturazione dell'immagine .

Quindi questo sarebbe un approccio fattibile?

  1. dati Grab UIImage e la conversione da RGB a HSL
  2. Applicare HE sul canale di luminanza
  3. dati riconvertire RGB
  4. Crea nuovo UIImage dai dati

Questo sarà lenta, Mi chiedo? Inoltre, avrò a che fare con dati 8/16/24 bit in modo diverso, in quanto non ho idea del tipo di immagine che verrà utilizzata con la mia app? O posso assumere 24 bit per le immagini in iPhone?

Apprezzerei qualsiasi suggerimento per il codice C obiettivo che esegue l'equalizzazione dell'istogramma corretta colore.

ho guardato la biblioteca di seguito, ma non fa alcuna correzione del colore per HE:

http://code.google.com/p/simple-iphone-image-processing/source/browse/#svn/trunk/Classes%3Fstate%3Dclosed

Grazie!

+0

Esiste un'implementazione HE semplice come risposta a questa domanda: http://stackoverflow.com/questions/3278560/uiimage-implementing-an-auto-levels-algorithm/3306089#3306089 Ma non funzionerà in altri spazi di colori rispetto alle immagini native. – tonklon

+0

Grazie, l'ho visto. Volevo ulteriori informazioni sull'aspetto della correzione del colore ... –

risposta

1

Sì, puoi farlo in questo modo, funzionerà. Sì, "costerà di più" poiché devi eseguire la conversione avanti e indietro - ma questo è il prezzo che dovrai pagare se non vuoi influenzare la tonalità e la saturazione. Ne vale la pena per le immagini che stai correggendo? Dipenderà dalla tua applicazione, stai bene con un successo nelle prestazioni rispetto alla migliore qualità? Probabilmente dovrai occuparti solo di componenti a colori a 8 bit, puoi supporre "24 bit" per le immagini ma questo è 3 componenti a 8 bit. L'unico modo per conoscere le tue risposte è provare.

0

Si consiglia di utilizzare YUV Colorspace. Sia per precisione che per semplicità di calcolo (combinazione lineare).

Un metodo sarebbe applicare l'equalizzazione dell'istogramma sull'immagine RGB (Immagine2). Quindi lascia che l'utente scelga ciò che vuole, si applica solo alla luminosità o a tutti e 3 i canali. Per la prima scelta, acquisire i canali UV dell'immagine originale con il canale Y dell'immagine equalizzata e riconvertire in RGB. Per la seconda scelta basta lasciare l'utente con Image2.

-2

Basta scrivere i codici e il modello che applica HE a ciascun componente RGB. Sebbene ci siano molti calcoli per i suoi 3 componenti, ma la velocità di programmazione è OK.Nella maggior parte dei casi, il contrasto è migliorato, ma il "look" dell'immagine è cambiato. Quindi accetta di trasformare l'RGB in un altro spazio, quindi applica di nuovo l'HE. Sto cercando la formula e anche lo spazio colore corretto per l'HE. Quale spazio colore è più facile?

Scrivo HE nella piattaforma iPad, ma dopo aver aperto un'immagine grande presa dalla mia Canon, l'intero programma si blocca dopo le funzioni UIPopoverContoller, UIImagePickerController. Penso che forse è perché sto spingendo troppo sul sistema operativo del telefono, o il sistema operativo alloca solo una quantità limitata di spazio di memoria per ciascuna app. Se le app utilizzano più della memoria preimpostata, l'iOS uccide subito le app. Pertanto, è necessario fare attenzione alla dimensione dell'immagine in ingresso e alla raccolta dati inutili della memoria non utilizzata e alla perdita di memoria. Utilizzare lo strumento di XCode per verificare la presenza di perdite è un must.

+2

Applicando HE a ciascun componente RGB, si distorcerebbe il colore dell'immagine. – James

0

Poiché dopo la trasformazione, si gestiscono I/V come valori continui, sarà necessario applicare una strategia di raggruppamento, che si traduce in una fase Istogramma per la quantità che si desidera equalizzare. Pertanto, è possibile accelerare riducendo la dimensione del cestino?

Problemi correlati