Rilevamento delle caratteristiche nelle immagini rumorose
-
28-10-2019 - |
Domanda
Ho costruito un sistema di imaging con una webcam e funzioni corrispondenti in modo tale che mentre sposto la videocamera; Posso seguire il movimento della telecamera. Sto facendo qualcosa di simile a qui , tranne che con i frame della webcam come input.
Funziona molto bene per immagini "buone", ma quando si scattano immagini in condizioni di scarsa illuminazione appare un sacco di rumore (fotocamera ad alto guadagno), e questo crea problemi con la funzione di rilevamento e corrispondenza. Fondamentalmente, non rileva alcuna buona funzionalità e, quando lo fa, non può abbinarle correttamente tra i frame.
Qualcuno conosce una buona soluzione per questo? Quali altri metodi vengono utilizzati per trovare e abbinare le funzioni?
Ecco due immagini di esempio con caratteristiche molto basse:
Soluzione
Penso che la correlazione di fase sia la soluzione migliore qui. È progettato per indicare lo spostamento di fase (cioè la traduzione) tra due immagini. È molto più resiliente (ma non immune) al rumore rispetto al rilevamento di caratteristiche perché opera nello spazio delle frequenze; mentre i rilevatori di funzionalità operano nello spazio. Un altro vantaggio è che è molto veloce rispetto ai metodi di rilevamento delle funzionalità. Ho un'implementazione disponibile nel trunk OpenCV che è accurata per i pixel secondari e si trova qui .
Tuttavia, le tue immagini sono praticamente "senza dettagli" con l'eccezione della piega al centro, quindi anche la correlazione di fase potrebbe avere qualche problema con essa. Pensa che è come cercare di rilevare la traduzione in una tempesta di neve. Se tutto ciò che puoi vedere è bianco, non puoi dire di aver tradotto affatto, quindi il termine whiteout . Nel tuo caso, l'algoritmo potrebbe soffrire di "greenout" :)
Puoi regolare le impostazioni della fotocamera per lavorare meglio in condizioni di scarsa illuminazione. Hai aperto completamente l'iride? Riesci a convivere con framerate più bassi? L'impostazione di un tempo di esposizione più lungo consentirà alla fotocamera di raccogliere più luce, offrendoti così più funzionalità al costo di aggiungere sfocatura di movimento. Oppure, se la scarsa illuminazione è il tuo ambiente predefinito, probabilmente vuoi qualcosa progettato per questo come una telecamera IR, ma quelle possono essere costose. Oltre a questo, un grande obiettivo e lunghe esposizioni sono tuoi amici :)
L ' equalizzazione dell'istogramma può essere interessante per migliorare il contrasto dell'immagine. Ma a volte può solo migliorare il rumore. OpenCV ha una funzione di equalizzazione dell'istogramma globale chiamata equalizeHist . Per un'implementazione più localizzata, ti consigliamo di esaminare Equalizzazione dell'istogramma adattivo limitato del contrasto o CLAHE per corto. Ecco un buon articolo su di esso. Questa pagina contiene alcuni bei esempi e del codice.