2011-02-07 8 views
18

Per darvi un po 'di informazioni su ciò che sto facendo: sto provando a registrare quantitativamente le variazioni nel flusso di un fluido comprimibile tramite l'analisi delle immagini. Un modo per farlo è sfruttare il fatto che l'indice di rifrazione del fluido è direttamente correlato alla sua densità. Se si imposta un tipo di immagine dietro il flusso, la distorsione dell'immagine dovuta all'oscillazione dell'indice di rifrazione in tutto il campo del fluido porta a un gradiente di densità, che aiuta a caratterizzare il diagramma di flusso.Riconoscere le distorsioni in una griglia regolare

Ho una serie di routine che lo fanno con successo con un normale schema 2D di punti. Il motivo a punti è leggermente distorto e, confrontando la posizione dei punti nell'immagine distorta con quella nell'immagine non distorta, ottengo un campo di spostamento, che è esattamente ciò di cui ho bisogno. Il problema con questo metodo è la risoluzione. La risoluzione è limitata al numero di punti nel campo e sto esplorando metodi che mi danno più dati.

Un'idea che ho avuto è quella di utilizzare una griglia regolare di linee orizzontali e verticali. Questa immagine distorce allo stesso modo, ma invece di ottenere solo lo spostamento di un punto, avrò la distorsione continua di una griglia. Sembra che ci debba essere un algoritmo o una procedura standard per confrontare una griglia geometrica con un'altra e dedurre qualche tipo di campo di spostamento. Tuttavia, non ho trovato nulla di simile nella mia ricerca.

Qualcuno ha qualche idea che potrebbe indicarmi la giusta direzione? Per tua informazione, non sono un informatico - Sono un ingegnere. Lo dico solo perché potrebbe esserci un approccio ovvio che sto trascurando a causa di un campo diverso. Ma posso programmare. Sto utilizzando MATLAB, ma posso leggere Python, C/C++, ecc

Ecco alcuni esempi del tipo di immagini con cui sto lavorando:

 Regular:        Distorted: 

enter image description here ------ - enter image description here

+0

Dai un'occhiata a questo software (commerciale) http://www.correlatedsolutions.com/index.php/home –

risposta

19

Penso che stiate cercando l'algoritmo Digital Image Correlation.

Here you can see a demo.

Here is a Matlab Implementation.

Da Wikipedia:

correlazione digitale di immagini e di monitoraggio (DIC/DDIT) è un metodo ottico che utilizza il monitoraggio & tecniche di registrazione delle immagini per 2D precisi e misure 3D di cambiamenti nelle immagini. Questo è spesso usato per misurare la deformazione (ingegneria), il dislocamento e la deformazione, ma è ampiamente applicato in molte aree della scienza e dell'ingegneria.

Modifica

Qui ho applicato l'algoritmo DIC all'immagine distorta utilizzando Mathematica, che mostra gli spostamenti relativi.

enter image description here

Modifica

È inoltre possibile identificare facilmente la massima zona di spostamento:

enter image description here

Modifica

Dopo un po 'di lavoro (quit EA bit, francamente) si può arrivare fino a qualcosa di simile, che rappresenta il "campo di spostamento", mostrando chiaramente che si tratta di un vortice:

enter image description here

(più scura e le frecce più grandi significa più di spostamento (velocità))

Inviami un commento se sei interessato al codice Mathematica per questo. Penso che il mio codice non aiuti nessuno, quindi ometto di postarlo.

+1

Questo è fantastico e penso esattamente di cosa ho bisogno. Grazie per la risposta rapida e il caloroso benvenuto! – pdxmere

+0

@belisarius sarebbe bello avere qualche dettaglio in più esattamente su quello che hai fatto (fino all'ultima figura, il campo di velocità) :-) – Szabolcs

+0

@Szabolcs Non proprio "velocità", solo spostamento. Ad ogni modo, è stato complicato perché la deformazione della griglia ha richiesto un po 'di lavoro per essere in grado di identificare quale punto sorgente ha finito dove. Infine, il fatto che i margini non siano deformati è stata la chiave. Vedrò se ho salvato il codice sorgente per i posteri (:)) e lo posterò qui se non mi fa arrossire –

1

Vorrei anche suggerire un algoritmo di tracciamento della linea che funzioni bene.

Basta iniziare dalla prima linea di pixel dell'immagine e iniziare a seguire ciascuna delle linee verticali verso il basso (è sufficiente avviarlo alla prima riga per ottenere i punti di partenza. Ciò può essere fatto da un semplice motivo che si muove ortogonalmente al gradiente di quella linea, ergo segue una linea Quando raggiungi un incrocio di una linea orizzontale puoi misurare quel punto (in x, y coordinate) e confrontarlo con il corrispondente punto di incrocio nell'immagine distorta

Dato che la tua griglia è regolare, sai che il n'th crossing point misurato sulla m'th vertical black line è corrispondente in entrambe le immagini, quindi devi semplicemente confrontare entrambi i punti calcolando la loro distanza. otterrai, fino a che punto ogni punto di attraversamento di la griglia è distorta.

Questo seguendo un algoritmo di linea viene anche utilizzato negli algoritmi di collegamento Edge di base o nel rilevatore Canny Edge.

(Tutto questo sono le idee solo teorici e non è possibile fornire con un algoritmo ad esso. Ma credo che dovrebbe funzionare facilmente sulle immagini distorte come hai lì ... ma forse è utile per voi)

Problemi correlati