Isolare la parte non sfocata dell'immagine sfocata


10

Ho un'immagine scattata da una fotocamera di un telefono cellulare focalizzata su una parte di essa, diciamo un volto o altro. Voglio sapere, approssimativamente, dov'è l'area focalizzata. Ad esempio, un rettangolo di selezione attorno all'area focalizzata. esempio : Originale Dopo il rilevamento

Risposte:


7

In generale, si tratta di un problema di segmentazione delle immagini ( http://en.wikipedia.org/wiki/Image_segmentation ) in cui si cercherebbe di isolare le aree focalizzate nelle aree non focalizzate dell'immagine.

Le lenti ottiche sono comunque equivalenti ai filtri passa-basso e l'effetto di un filtro passa-basso su un segnale è quello di attenuarlo limitando il contenuto di frequenza superiore.

Nell'elaborazione delle immagini digitali, le basse frequenze corrispondono a oggetti di grandi dimensioni (forma generale) e le frequenze più alte corrispondono a oggetti di piccole dimensioni (dettagli).

Pertanto, per isolare la regione focalizzata, si potrebbero cercare aree con una deviazione standard più elevata rispetto alle aree sfocate che avrebbero una deviazione standard più bassa a causa dell'operazione di livellamento dell'obiettivo fuori fuoco.

Per distinguere le aree "sfocate" rispetto a "non sfocate", puoi impostare una "finestra" di dimensioni e farla scorrere sull'immagine.M×N

In ciascuna posizione della finestra calcolare la varianza dei valori di "patch" come se fossero un vettore monodimensionale di valoriCiò si tradurrà in un'altra "immagine" (o più in generale in una matrice bidimensionale) che rappresenta la variazione della deviazione standard in ciascuna posizione sull'immagine. È quindi possibile raccogliere tutti questi valori e ottenere il loro istogramma. L'istogramma presenterà una distribuzione multimodale (per ulteriori informazioni, consultare http://en.wikipedia.org/wiki/Multimodal_distribution ).M×N

Nel caso dell'immagine nel tuo post, è probabile che l'istogramma mostri due modalità. Uno corrispondente a valori relativamente alti di deviazione standard (area focalizzata) e uno corrispondente a valori relativamente bassi di deviazione standard (aree sfocate).

È quindi possibile posizionare una soglia, ad esempio solo tra le due modalità per stabilire un criterio tra le regioni focalizzate e non focalizzate e quindi selezionare tutte le "patch" (o aree della finestra MxN) la cui deviazione standard è superiore alla soglia. (Per ulteriori informazioni, consultare: http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )

Questo isolerà le parti focalizzate dell'immagine per te.

Spero che sia di aiuto.


Ho intenzione di fare una lettura approfondita per la tua risposta e tornare con un feed back,
Mille

Grazie mille, risposta fantastica e dettagliata, condividerò l'implementazione se avrò ottenuto buoni risultati usando Opencv, grazie ancora
Humam Helfawi

A proposito, un rappresentante grigio dell'immagine è sufficiente o ho bisogno di elaborare ciascun canale?
Humam Helfawi,

Sono contento che l'abbia trovato utile. Lavorare in scala di grigi andrebbe benissimo per la discriminazione tra aree sfocate e focalizzate, ma includere ulteriori informazioni sul colore potrebbe aiutarti a prescrivere aree più complesse (ad esempio, tracciare l'area di un viso in un ritratto o isolare solo il fiore nell'immagine in il tuo post).
A_A

La domanda è stata riportata alla sua forma originale in seguito alla discussione su: meta.dsp.stackexchange.com/questions/1337/… @ vast-academician Aggiungi i tuoi commenti come risposta separata. La parte principale è stata conservata su: pastebin.com/kjCC1wM6
A_A

5

Ecco un approccio più semplice, che non prevede l'analisi delle finestre scorrevoli.

  • Converti la tua immagine in scala di grigi (questo non è necessario, ma suppongo che tu abbia un solo canale per motivi di chiarezza)

  • Calcola il gradiente in entrambe le direzioni

  • Calcola la grandezza (o semplicemente piazza il gradiente)

  • Somma entrambe le immagini sfumate in entrambe le direzioni

Come già detto, la parte focalizzata dell'immagine avrà frequenze più alte rispetto all'area non focalizzata. Dalla sommatoria si finiranno con due proiezioni, in cui vi sono molte variazioni (valori più alti) in quella parte in cui l'oggetto focalizzato è posizionato in questa direzione. Ora puoi fare quanto segue:

  • Determina il punto iniziale e finale di questi valori più alti. È possibile utilizzare una soglia semplice (ad es. 0,7 * valore_massimo) o smussare i profili, prendere la seconda derivata e verificare la presenza dei valori più alti.

  • Le posizioni Start / Stop del passaggio precedente forniscono le posizioni dei pixel lungo entrambe le direzioni in cui posizionare il rettangolo che indica l'area di nitidezza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.