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 calcular
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.
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.
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.
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.
fuente
Respuestas:
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.
fuente
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.
fuente