Domanda

Supponi di avere una raccolta di punti con coordinate su un sistema di coordinate cartesiane.

una griglia non curata

Vuoi tracciare un altro punto e conosci le sue coordinate nello stesso sistema di coordinate cartesiane.

Tuttavia, la trama su cui stai disegnando è distorta dall'originale. Immagina di prendere il piano originale, stamparlo su un foglio di gomma, allungarlo in alcuni punti e pizzicarlo in altri, in modo asimmetrico (nessuna sovrapposizione o qualcosa di complesso).

una griglia deformata ( fonte )

Conosci le coordinate allungate e non stirate di ciascuna delle tue serie di punti, ma non la funzione di stiramento sottostante. Conosci le coordinate non stirate di un nuovo punto.

Come si può stimare dove tracciare il nuovo punto nelle coordinate allungate in base alle posizioni allungate dei punti vicini? Non è necessario che sia esatto, poiché non è possibile determinare la funzione di allungamento effettiva da un insieme di punti rimappati a meno che non si disponga di ulteriori informazioni.

altre possibili parole chiave: coordinate distorte del piano della mesh della griglia distorta

È stato utile?

Soluzione

Ok, quindi suona come una deformazione dell'immagine. Questo è ciò che dovresti fare:

  1. Crea una triangolazione Delaunay della tua griglia non curata e usa la tua conoscenza del corrispondenze tra la griglia deformata e non deformata per creare la triangolazione per la griglia deformata. Ora conosci i triangoli corrispondenti in ogni immagine e poiché non vi sono sovrapposizioni, dovresti essere in grado di eseguire il passaggio successivo senza troppe difficoltà.

  2. Ora, per trovare il punto corrispondente A , nell'immagine deformata:

    1. Trova il triangolo A si trova e usa la trasformazione tra il triangolo nella griglia non deformata e la griglia deformata per capire la nuova posizione.

Questo è esplicitamente spiegato in dettaglio qui .

Un altro metodo (molto più complicato) è il Thin Plate Spline (che è anche spiegato nelle diapositive sopra).

Altri suggerimenti

Ho capito che hai una corrispondenza uno a uno tra i punti della griglia avvolti e non scartati. E suppongo che la deformazione non sia così estrema che potresti avere linee della griglia che si intersecano (come l'immagine che mostri).

La strategia è esattamente ciò che Jacob suggerisce: triangolare le due griglie in modo che vi sia una corrispondenza uno a uno tra i triangoli, individuare il punto da mappare nella triangolazione e quindi utilizzare le coordinate baricentriche nel triangolo corrispondente per calcolare il nuova posizione del punto.

Preprocessa

  1. Genera la triangolazione Delaunay dei punti della griglia avvolta, chiamiamola WT .
  2. Per ogni triangolo in WT aggiungi un triangolo tra i vertici corrispondenti nella griglia da scartare. Ciò fornisce una triangolazione UWT dei punti da scartare.

Mappa un punto p nella griglia racchiusa

  1. Trova il triangolo T (p1, p2, p3) nel UWT che contiene p .
  2. Calcola le coordinate baricentriche (b1, b2, b3) di p in T(p1,p2,p3)
  3. Sia Tw (q1, q2, q3) il triangolo in WT corrispondente a T (p1, p2, p3) . La nuova posizione è
    b1 * q1 + b2 * q2 + b3 * q3 .

Commento Questo dà una funzione di deformazione come spline lineare . Per un comportamento più regolare si potrebbe usare la stessa triangolazione ma fare un'approssimazione di ordine superiore che porterebbe a un calcolo un po 'più complicato invece delle coordinate baricentriche.

Le altre risposte sono fantastiche. L'unica cosa che aggiungerei è che potresti voler dare un'occhiata a Deformazione in forma libera come modo per descrivere le deformazioni.

Se questo è utile, allora è del tutto possibile adattare una griglia / reticolo di deformazione alle tue coppie conosciute, e quindi hai un metodo molto veloce per deformare punti futuri.

Molto dipende da quanti punti hai. Se ne hai solo uno, non c'è davvero molto che puoi fare con esso: puoi compensare il secondo punto della stessa quantità nella stessa direzione, ma non hai abbastanza dati per fare davvero di meglio.

Se hai un buon numero di punti esistenti, puoi fare un adattamento di superficie attraverso quei punti e usarlo per approssimare la posizione corretta del nuovo punto. Dati N punti, puoi sempre ottenere una misura perfetta usando un polinomio di ordine N, ma raramente vuoi farlo - invece, di solito indovini che la funzione di stiramento è una funzione di ordine abbastanza basso (ad esempio quadratica o cubica) e adatta una superficie ai punti su quella base. Quindi posizionare il nuovo punto in base alla funzione per la superficie adattata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top