Domanda:
Esiste una teoria alla base del "rilevamento sfocatura"?
goldenmean
2011-03-03 00:44:38 UTC
view on stackexchange narkive permalink

Sto cercando di implementare un algoritmo di rilevamento della sfocatura per la mia pipeline di imaging. La sfocatura che desidero rilevare è entrambe le cose:

  1. Vibrazione della fotocamera: immagini catturate usando la mano che si muove / trema quando la velocità dell'otturatore è inferiore.

  2. Effetto movimento: oggetti in rapido movimento nella scena, catturati utilizzando una velocità dell'otturatore non sufficientemente elevata. Per esempio. Un'auto in movimento una notte potrebbe mostrare una traccia del suo fanale / fanale posteriore nell'immagine come una sfocatura.

Come si può rilevare questa sfocatura e quantificarla in qualche modo per prendere una decisione in base a quella "metrica di sfocatura" calcolata?

Qual è la teoria alla base del rilevamento della sfocatura?

Sto cercando materiale di buona lettura che utilizzi il quale posso implementare alcuni algoritmi per questo in C / Matlab.

Questo è interessante, e chiaramente _ si riferisce_ alla fotografia, ma generalmente questo sito è più dedicato allo scatto di foto e agli _utilizzo_ di strumenti per elaborarle, e non così pesante dal punto di vista matematico. È molto probabile che uno dei nostri utenti più esperti di matematica si presenti con una buona risposta, ma potresti fare meglio semplicemente su Stack Overflow, dove hanno migliaia di domande sull'elaborazione delle immagini. http://stackoverflow.com/questions/tagged/image-processing
Detto questo, puoi trovare alcuni materiali interessanti che potrebbero aiutare cercando su Google "motion blur fourier".
Le risposte su http://photo.stackexchange.com/q/9432/1356 potrebbero essere di aiuto. In breve: gli algoritmi di rilevamento della sfocatura sembrano essere principalmente rilevatori locali di contrasto / bordi con post-elaborazione per stimare la quantità di sfocatura.
Una risposta:
Matt Grum
2011-03-03 01:45:02 UTC
view on stackexchange narkive permalink

Per rilevare la sfocatura di cui si desidera rilevare la mancanza di nitidezza, il modo più semplice per farlo è guardare la prima e la seconda immagine derivata poiché i dettagli fini verranno visualizzati come un forte gradiente. Vorrei dare un'occhiata all'utilizzo di qualcosa come un filtro laplaciano.

Se vuoi rilevare specificamente il motion blur, devi usare un kernel anisotropico che rileverà dove ci sono dettagli in una direzione ma non nell'altra ( poiché l'effetto movimento lineare riduce i dettagli lungo un asse particolare). Qualcosa come il rilevatore d'angolo Harris è buono per questo.

Entrambi possono (penso) essere facilmente implementati per convoluzione, c'è una funzione per farlo in matlab penso che si chiami qualcosa come conv2

Entrambe le sfocature mancheranno di nitidezza in una sola direzione. Tuttavia, mentre la vibrazione della fotocamera avrà la diffusione uniforme dell'effetto, la sfocatura da movimento avrà solo parti dell'immagine fuori nitidezza (il soggetto in movimento). Non vedo come la seconda derivata venga in aiuto qui.
A proposito, la direzione del movimento non deve essere orizzontale o verticale, quindi non è sufficiente confrontare solo il gradiente nelle direzioni X e Y. Bisogna davvero considerare l'intero gradiente vettoriale. Penso che, laddove esista una sfocatura indotta dal movimento, otterrai un vettore grad con una notevole ampiezza (poiché l'immagine cambia più rapidamente perpendicolare alla direzione del movimento e molto lentamente nella direzione del movimento). OTOH, se non è presente alcuna sfocatura indotta dal movimento, la velocità di variazione è uguale in tutte le direzioni e quindi l'ampiezza del vettore grad è minore. (??? !!?! ?? tanti anni fa ...)


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 2.0 con cui è distribuito.
Loading...