Traccia un isoline di una costosa funzione 2D


10

Ho un problema simile nella formulazione a questo post, con alcune notevoli differenze:

Quali sono i metodi semplici per campionare in modo adattivo una funzione 2D?

Come in quel post:

  • Ho una e la valutazione di questa funzione è alquanto costosa da calcolaref(x,y)

A differenza di quel post:

  • Non mi interessa il valore della funzione in modo accurato ovunque, ma solo nel trovare un singolo isoreur della funzione.

  • Sono in grado di fare affermazioni significative sull'autocorrelazione della funzione e, di conseguenza, sulla scala di scorrevolezza.

Esiste un modo intelligente per scorrere / campionare questa funzione e trovare questo contorno?

Maggiori informazioni

La funzione è il calcolo delle Funzionalità di Haralick su pixel che circondano il punto e una classificazione graduale secondo una sorta di classificatore / regressore. L'output di questo è un numero in virgola mobile che indica a quale trama / materiale appartiene il punto. Il ridimensionamento di questo numero può essere stimato probabilità di classe (SoftSVM o metodi statistici ecc.) O qualcosa di veramente semplice come l'output di una regressione lineare / logistica. La classificazione / regressione è accurata ed economica rispetto al tempo impiegato per l'estrazione delle caratteristiche dall'immagine.N

Nf(X,y,N)NN

Cose che ho provato:

  • N

  • Dumb Stepping: fai un "passo" di un singolo pixel in ciascuna direzione e scegli la direzione da spostare in base alla vicinanza al valore iso-linea. Ancora piuttosto lento, e ignorerà la biforcazione di un isoline. Inoltre, nelle aree con una pendenza piatta "vagherà" o raddoppierà su se stesso.

N


Ho esattamente lo stesso problema, tranne per il fatto che è una funzione di probabilità che voglio delineare ed è costosa perché ad ogni punto ho bisogno di eseguire una minimizzazione. Hai fatto progressi e / o puoi indicare come alla fine hai fatto questo?
Adavid,

Ho appena verificato la soluzione su cui convergo. (vedi sotto)
meawoppl

Risposte:


4

C'è un documento in computer grafica chiamato Provably Good Sampling and Meshing of Surfaces , che si basa sulla tua fornitura di un oracolo che determina tutte le intersezioni di un isoline con un dato segmento di linea. Con ciò, campiona tutti i contorni supponendo che tu possa fornire una scala caratteristica locale (qualcosa come la massima curvatura locale) e un insieme iniziale di segmenti di linea che interseca tutti i contorni. Non è la cosa più semplice da implementare, poiché si basa sul calcolo delle triangolazioni Delaunay, ma è implementato in 3D in CGAL . È sostanzialmente più semplice in 2D, poiché esiste un buon software di triangolazione come Triangle . In un certo senso, questo è abbastanza vicino al meglio che puoi fare.


Mi piace molto questa formulazione in quanto si estende logicamente in 3d piuttosto chiaramente. Devo formularlo in Python, quindi ho già accesso al wrapping Delauny di qhull, quindi non è un grosso problema. Fammi vedere se ho capito bene questo riassunto: - Fai un po 'di campionamento su seed. - Campioni triangolari. - Per tutti i bordi che si estendono su isoline al di sopra di una certa lunghezza: calcolare le intersezioni di isoline con bordo - tutto il calcolo per campioni e ripetere dal passaggio di triangolazione?
meawoppl

@meawoppl: non ho implementato o usato personalmente questo algoritmo (ancora!) ma suona bene.
Victor Liu

Lo cancellerò oggi e pubblicherò alcuni risultati!
meawoppl

Scusa per il ritardo. Questo metodo funziona davvero bene per il mio set di dati. Fondamentalmente, ho seminato una mesh regolare da campionare per iniziare, quindi triangolare, suddividere i bordi che attraversano l'iso-contorno, la ripetizione. È un po 'difficile esprimere il requisito della "caratteristica migliore", e c'è un merito al campionamento iniziale casuale rispetto al normale, dato che un isoline diagonale impiega un po' più di quello che segue le locazioni del campionamento. Ho finito per lasciarmi prendere al massimo 5 passaggi, e questo ha funzionato come un criterio di arresto davvero semplice. Wooo> 1K
meawoppl

1

Potresti provare ad applicare le funzionalità principali del metodo EGRA (Efficient Global Reliability Analysis). Questo metodo è stato derivato per il calcolo efficiente di una probabilità di fallimento, ma le viscere si concentrano sul fare ciò che descrivi, creando un modello che è accurato solo vicino a un contorno specifico di interesse.

Questo potrebbe essere un interessante punto di partenza, ma non sono sicuro che risolverà il tuo problema. Dipende molto dalla forma della tua funzione. Se è qualcosa che può essere approssimato bene con un modello di kriging , allora dovrebbe funzionare bene. Questi modelli sono piuttosto flessibili, ma generalmente richiedono una funzione di base regolare. In passato ho provato ad applicare EGRA a un'applicazione di segmentazione di immagini, ma ho avuto scarso successo perché semplicemente non ha senso adattare un modello surrogato a qualcosa che non è definito da una relazione funzionale. Tuttavia, lo cito come qualcosa che potresti voler esaminare nel caso in cui la tua domanda sia diversa da quella che sto immaginando.

Se non ne ho parlato, puoi leggere di più sull'EGRA qui (link PDF) e qui , e c'è un'implementazione esistente nel progetto DAKOTA di Sandia - per quanto ne sappia, l'unica implementazione open source di EGRA disponibile.

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.