J'ai un problème de formulation similaire à ce post, avec quelques différences notables:
Quelles méthodes simples existe-t-il pour échantillonner de manière adaptative une fonction 2D?
Comme dans ce post:
- J'ai un et l'évaluation de cette fonction coûte un peu cher à calculer
Contrairement à ce poste:
Je ne m'intéresse pas à la valeur de la fonction avec précision partout, mais seulement à trouver un seul isocontour de la fonction.
Je peux faire des affirmations significatives sur l'autocorrélation de la fonction, et par conséquent sur l'échelle de lissage.
Existe-t-il un moyen intelligent de suivre / échantillonner cette fonction et de trouver ce contour?
Plus d'information
La fonction est le calcul des caractéristiques Haralick sur pixels entourant le point et la classification douce par une sorte de classifieur / régresseur. La sortie de ceci est un nombre à virgule flottante qui indique à quelle texture / matériau le point appartient. L'échelle de ce nombre peut être des probabilités de classe estimées (SoftSVM ou méthodes statistiques, etc.) ou quelque chose de vraiment simple comme la sortie d'une régression linéaire / logistique. La classification / régression est précise et bon marché par rapport au temps nécessaire à l'extraction des caractéristiques de l'image.
Les statistiques entourant signifient que la fenêtre échantillonne généralement les régions qui se chevauchent et, en tant que tel, il existe une corrélation significative entre les échantillons voisins. (Quelque chose que je peux même aborder numériquement / symboliquement) Par conséquent, cela peut être considéré comme une fonction plus complexe de où un plus grand donnera une estimation plus liée au voisinage (hautement corrélée), et un un plus petit donnera une estimation plus variable, mais plus locale.
Choses que j'ai essayées:
Calcul brutal - Fonctionne bien. 95% de segmentation correcte avec constant . Les résultats sont fantastiques lorsqu'ils sont profilés en utilisant n'importe quelle méthode standard après cela. Cela prend une éternité . Je peux simplifier les fonctionnalités calculées par échantillon, mais idéalement, je veux éviter cela pour garder ce code général aux images avec des textures dont les différences apparaissent dans différentes parties de l'espace des fonctionnalités.
Dumb Stepping - Faites un "pas" d'un pixel dans chaque direction et choisissez la direction à déplacer en fonction de la proximité de la valeur de l'iso-ligne. Encore assez lent, et il ignorera la bifurcation d'une isoligne. De plus, dans les zones à gradient plat, il "vagabonde" ou se replie sur lui-même.
Je pense que je veux faire quelque chose comme la subdivision proposée dans le premier lien, mais élagué pour les cases qui délimitent l'isoligne d'intérêt. Je pense que je devrais être capable de tirer parti de également, mais je ne sais pas comment aborder cela.
la source
Réponses:
Il existe un document en infographie appelé Provably Good Sampling and Meshing of Surfaces , qui s'appuie sur vous pour fournir un oracle qui détermine toutes les intersections d'une isoline avec un segment de ligne donné. Avec cela, il échantillonne tous les contours en supposant que vous pouvez fournir une échelle de caractéristique locale (quelque chose comme la courbure locale maximale), et un ensemble initial de segments de ligne qui intersecte tous les contours. Ce n'est pas la chose la plus simple à implémenter, car elle repose sur le calcul des triangulations de Delaunay, mais elle est implémentée en 3D dans CGAL . C'est beaucoup plus simple en 2D, car il existe un bon logiciel de triangulation comme Triangle . Dans un certain sens, c'est assez proche du meilleur que vous puissiez faire.
la source
Vous pouvez essayer d'appliquer les fonctionnalités de base de la méthode EGRA (Efficient Global Reliability Analysis). Cette méthode a été dérivée pour le calcul efficace d'une probabilité de défaillance, mais ses tripes se concentrent sur ce que vous décrivez - créer un modèle qui n'est précis que près d'un contour d'intérêt spécifique.
Cela pourrait être un point de départ intéressant, mais je ne suis pas sûr que cela résoudra votre problème. Cela dépend beaucoup de la forme de votre fonction. Si c'est quelque chose qui peut être bien approché avec un modèle de krigeage , alors il devrait bien fonctionner. Ces modèles sont assez flexibles, mais nécessitent généralement une fonction sous-jacente fluide. J'ai essayé d'appliquer EGRA à une application de segmentation d'image dans le passé, mais j'ai eu peu de succès car cela n'a tout simplement pas de sens d'adapter un modèle de substitution à quelque chose qui n'est pas vraiment défini par une relation fonctionnelle. Pourtant, je le mentionne comme quelque chose que vous voudrez peut-être examiner si votre application est différente de ce que j'envisage.
Si je ne vous en ai pas parlé, vous pouvez en savoir plus sur EGRA ici (lien PDF) et ici , et il existe une implémentation existante dans le projet DAKOTA de Sandia - à ma connaissance, la seule implémentation open source d'EGRA disponible.
la source