5 votos

Calcule la línea de centro poligonal con un enfoque de LeastCostPath

Estoy trabajando en la derivación de la línea central de un polígono, de forma similar a esta pregunta o esta uno, utilizando un enfoque diferente. Estoy al 90% hecho con la tarea, pero no puede llegar al paso final. Mi enfoque es calcular un LeastCostPath a través del canal del centro.

Para hacerlo, primero se calculó una superficie en el polígono con la distancia a la poligonal perimetral (ver imagen 2). Con el fin de obtener los valores de 0 - 1 con valores bajos están en el polígono centro, he utilizado la siguiente operación:

rastervalueNormalizedInverted = 1-(eucideanDistance/maxRasterValue)

Ahora puedo calcular el costo mínimo ruta entre el inicio y el final de mi polígono y tengo una hermosa línea sin cuelga y sin el problema de tener que especificar los valores de umbral (ver imagen 3).

Tengo la sensación de que estoy al 90% hecho en este punto. Todo lo que tengo que hacer ahora es considerar el canal lateral en el polígono, que no fueron considerados por la inicial LeastCostPath de cálculo.

Estoy completamente atascado en este punto! He intentado varios enfoques para obtener la divergencia y la convergencia de la línea de los dos brazos laterales se ve en la imagen, sin éxito. ¿Alguien puede proporcionar una idea de la dirección en la que podría empezar a buscar?

Aquí están las imágenes para ilustrar:

El original Polígono: The original Polygon Normalizado, invertida la distancia euclídea al polígono perimetral: Normalized, inverted euclidean distance to the polygon edge Menor Costo de Ruta desde el inicio al final de la canal devuelve una línea agradable: Least Cost Path from the start to endpoint of the channel returns a nice line

3voto

RETAS Puntos 129

He pasado muchas horas trabajando en problemas similares. He publicado un documento sobre el tema, incluso. En el toolbox de Matlab presentada no, yo uso el camino más corto al igual que usted está haciendo. En mi experiencia, no existe un método general que se basa en la distancia de transformación que permite la resolución de todos los sub/conducto de los canales. Eso no quiere decir que uno no puede ser creado, pero a medida que he encontrado (y como he encontrado), es bastante difícil.

He encontrado la única manera de lidiar con el trenzado/anastamosing es dejar solo el esqueleto de su máscara. Sí, usted puede terminar para arriba con muchos no deseados de los spurs, pero pueden ser filtrados. El esqueleto contiene la topología que usted necesita, aunque con el ruido. En los enlaces y nodos (esto no es tan fácil como suena si lo haces a ti mismo, pero creo que el Arc tiene algunas buenas herramientas para ayudar), entonces usted puede filtrar cada vínculo basado en la longitud, o el cambio en la distancia transformar valor como usted se mueve a lo largo del enlace (por ejemplo, el conducto de los canales de enlaces nunca se acerque a cero, mientras que un estímulo casi siempre llega al borde de la máscara, lo que resulta en cerca de cero). Sin la topología (es decir, saber dónde branchpoints debe ser), usted está atascado. Usted podría desarrollar un umbral basado en la heurística para el caso particular de mostrar, pero no sería de aplicación general.

Usted podría tener algo de suerte con las cuencas de los algoritmos-nunca he usado pero un colega se utiliza para la línea de centro de delineación (aunque de nuevo, es de un solo hilo).

Voy a comprobar de nuevo aquí para ver lo que vienen!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X