Rastrear una isolina de una costosa función 2D


10

Tengo un problema similar en la formulación de esta publicación, con algunas diferencias notables:

¿Qué métodos simples existen para muestrear adaptativamente una función 2D?

Como en esa publicación:

  • Tengo una y la evaluación de esta función es algo costosa de calcularF(X,y)

A diferencia de esa publicación:

  • No estoy interesado en el valor de la función con precisión en todas partes, sino solo en encontrar un solo isocontour de la función.

  • Puedo hacer afirmaciones significativas sobre la autocorrelación de la función y, en consecuencia, la escala de suavidad.

¿Existe una forma inteligente de avanzar / muestrear esta función y encontrar este contorno?

Más información

La función es el cálculo de las características de Haralick sobre píxeles que rodean el punto, y la clasificación suave por algún tipo de clasificador / regresor. El resultado de esto es un número de coma flotante que indica a qué textura / material pertenece el punto. La escala de este número puede ser una probabilidad de clase estimada (SoftSVM o métodos estadísticos, etc.) o algo realmente simple como el resultado de una regresión lineal / logística. La clasificación / regresión es precisa y económica en comparación con el tiempo necesario para la extracción de características de la imagen.norte

Las estadísticas que rodean a significan que la ventana típicamente está muestreando regiones superpuestas y, como tal, existe una correlación significativa entre las muestras cercanas. (Algo que incluso puedo abordar numéricamente / simbólicamente) En consecuencia, esto puede considerarse como una función más compleja de f ( x , y , N ) donde N mayor dará una estimación más relacionada con el vecindario (altamente correlacionada), y un N menor dará una estimación más variable, pero más local. norteF(X,y,norte)nortenorte

Cosas que he probado:

  • Computación bruta: funciona bien. 95% de segmentación correcta con constante . Los resultados se ven fantásticos cuando se contornea usando cualquier método estándar después de eso. Esto lleva una eternidad . Puedo simplificar las funciones calculadas por muestra, pero idealmente quiero evitar esto para mantener este código general en las imágenes con texturas cuyas diferencias se muestran en diferentes partes del espacio de funciones. norte

  • Paso tonto: realice un "paso" de un solo píxel en cada dirección y elija la dirección para moverse según la cercanía al valor de la línea iso. Todavía es bastante lento, e ignorará la bifurcación de una isolina. Además, en áreas con un gradiente plano, "vagará" o se doblará sobre sí mismo.

Estoy pensando que quiero hacer algo como la subdivisión propuesta en el primer enlace, pero podada por cajas que unen la isla de interés. Siento que debería poder aprovechar también, pero no estoy seguro de cómo abordarlo. norte


Tengo exactamente el mismo problema, excepto que es una función de probabilidad que quiero contornear y es costosa porque en cada punto necesito realizar una minimización. ¿Hiciste algún progreso y / o puedes señalar cómo finalmente lo hiciste?
adavid

Acabo de comprobar la solución en la que convergí. (ver abajo)
meawoppl

Respuestas:


4

Hay un documento en gráficos de computadora llamado Provably Good Sampling and Meshing of Surfaces , que se basa en que usted proporciona un oráculo que determina todas las intersecciones de una isolina con un segmento de línea dado. Con eso, muestrea todos los contornos asumiendo que puede proporcionar una escala de entidad local (algo así como la curvatura local máxima) y un conjunto inicial de segmentos de línea que intersectan todos los contornos. No es lo más sencillo de implementar, ya que se basa en calcular triangulaciones de Delaunay, pero se implementa en 3D en CGAL . Es sustancialmente más simple en 2D, ya que existe un buen software de triangulación como Triangle . En cierto sentido, esto está bastante cerca de lo mejor que puedes hacer.


Realmente me gusta esta formulación, ya que también se extiende lógicamente al 3d de forma bastante limpia. Tengo que formular esto en Python, por lo que ya tengo acceso a la envoltura Delauny de qhull, por lo que no es un gran problema. Déjame ver si obtengo este resumen correcto: - Haz un muestreo para sembrar. - Muestras trianguladas. - Para todos los bordes que abarcan la isolínea por encima de cierta longitud: calcular las intersecciones de la isolina con el borde - todo el cálculo a las muestras, y repetir desde el paso de triangulación?
meawoppl

@meawoppl: Personalmente no he implementado o usado este algoritmo (¡todavía!) pero eso parece correcto.
Victor Liu

¡Voy a escribir esto hoy y publicar algunos resultados!
meawoppl

Perdón por el retraso. Este método funciona realmente bien para mi conjunto de datos. Básicamente, lo siembro en una malla regular para muestrear para comenzar, luego triangular, subdividir los bordes que cruzan el contorno iso, la repetición. Es un poco difícil expresar el requisito de "característica más fina", y hay mérito para el muestreo inicial aleatorio frente a regular, ya que una isolina diagonal tarda un poco más que una que sigue las tenencias del muestreo. Terminé dejando que tomara como máximo 5 pases, y eso funcionó como un criterio de detención realmente simple. Wooo> 1K
meawoppl

1

Puede intentar aplicar las características principales del método Efficient Global Reliability Analysis (EGRA). Este método se obtuvo para el cálculo eficiente de una probabilidad de falla, pero las entrañas se centran en hacer lo que usted describe: crear un modelo que sea preciso solo cerca de un contorno de interés específico.

Este podría ser un punto de partida interesante, pero no estoy seguro de que resuelva su problema. Depende mucho de la forma de su función. Si es algo que se puede aproximar bien con un modelo de kriging , entonces debería funcionar bien. Estos modelos son bastante flexibles, pero generalmente necesitan una función subyacente suave. Intenté aplicar EGRA a una aplicación de segmentación de imágenes en el pasado, pero tuve poco éxito porque simplemente no tiene sentido adaptar un modelo sustituto a algo que no está realmente definido por una relación funcional. Aún así, lo menciono como algo que quizás desee considerar en caso de que su aplicación sea diferente de lo que imagino.

Si no lo he convencido, puede leer más sobre EGRA aquí (enlace PDF) y aquí , y hay una implementación existente en el proyecto DAKOTA de Sandia, que yo sepa, la única implementación de código abierto de EGRA disponible.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.