11 votos

Medición de rectitud de un segmento de curva (representado como una polilínea)

Estoy trabajando en un sistema automático de elevación de etiquetado de los contornos y el algoritmo de uno de los factores que quiero tomar en cuenta a la hora de decidir las posiciones de las etiquetas es como "recta" un segmento particular de un contorno. El más recto, más probable es que se utiliza para colocar la etiqueta en ese segmento.

Cada contorno se representa por una polilínea (pero con puntos muy juntos como para que parezca una curva a ojo desnudo). Luego tengo una longitud fija (el ancho de una etiqueta), por ejemplo, 100 píxeles. Si yo al azar (o no) elegir el contorno de un segmento con el ancho de 100 píxeles, quiero ser capaz de obtener una numérico valor cuantitativo de su rectitud (decir cero totalmente contorno recto segmento, un valor mayor que cero para un no tan recta, segmento, y este valor aumenta a medida que la corrupción aumenta).

He buscado alrededor en busca de respuestas, pero no pude encontrar nada realmente útil. Yo estaría muy agradecido por los punteros.

9voto

cjstehno Puntos 131

La respuesta depende del contexto: si se va a investigar sólo una pequeña (bounded) número de segmentos, usted podría ser capaz de pagar un computacionalmente costosa solución. Sin embargo, parece probable que usted desee incorporar este cálculo dentro de algún tipo de búsqueda de la buena etiqueta de puntos. Si es así, es de gran ventaja para tener una solución que es computacionalmente rápido o permite una rápida actualización de una solución cuando el candidato segmento de línea es variado ligeramente.

Por ejemplo, supongamos que usted tiene la intención de llevar a cabo una búsqueda sistemática de todo un componente conectado de un contorno, representado como una secuencia de puntos P(0), P(1), ..., P(n). Esto se haría mediante la inicialización de un puntero (índice en la secuencia) s = 0 (la"s" de "inicio") y otro puntero f ("finalizar") a ser el más pequeño índice para que la distancia(P(f), P(s)) >= 100, y luego de avanzar s por tan largo como la distancia(P(f), P(s+1)) >= 100. Esto produce un candidato polilínea (P(s) P(s+1) ..., P(f-1), P(f)) para su evaluación. Después de evaluar su "idoneidad" para apoyar una etiqueta, entonces el incremento de s 1 (s = s+1) y proceder a aumentar la f a (digamos) f' y de s a s', hasta que, una vez más, un candidato de la polilínea que exceda el mínimo lapso de 100 se produce, representado como (P(s'), ..., P(f) P(f+1), ..., P(f')). Al hacerlo, los vértices P(s)...P(s'-1) son lanzadas desde el anterior candidato y vértices P(f+1), ..., P(f') se agregan a él. Es altamente deseable que el gimnasio puede ser rápida actualización de los conocimientos de sólo la quita y añade vértices. (Este procedimiento de análisis se continuó hasta que s = n; como de costumbre, f debe ser permitido "wrap around" de n a 0 en el proceso).

Esta consideración las normas muchas posibles medidas de fitness (sinuosidad, tortuosidad, etc.) que de otro modo podría ser atractivo. Nos conduce a favor L2-basado en las medidas, porque en general se puede actualizar de forma rápida cuando los datos subyacentes cambiar un poco. Tomando una analogía con el Análisis de Componentes Principales sugiere que entretener a la siguiente medida (donde los pequeños es mejor, como se solicita): utilizar el menor de los dos valores propios de la matriz de covarianza de las coordenadas del punto. Geométricamente, esto es una medida de la "típica" de lado a lado de la desviación de los vértices dentro del candidato de la sección de la polilínea. (Una interpretación es que su raíz cuadrada es la más pequeña semi-eje de la elipse que representa el segundo de los momentos de inercia de los vértices de la polilínea.) Que será igual a cero sólo para conjuntos de colineales vértices; de lo contrario, supera en cero. Mide un promedio de lado a lado de la desviación relativa a los 100 píxeles de referencia creado por el inicio y el final de una polilínea, y por lo tanto tiene una interpretación sencilla.

Debido a que la matriz de covarianza es sólo de 2 en 2, los valores propios son rápidamente encontró la solución de una sola ecuación cuadrática. Por otra parte, la matriz de covarianza es una suma de las contribuciones de cada uno de los vértices de una polilínea. Por lo tanto, es rápida actualización cuando los puntos se quitan o añaden, que conduce a un O(n) para el algoritmo de n-punto del contorno: esta escala bien a la muy detallada en los contornos de la concepción en la aplicación.

Aquí es un ejemplo del resultado de este algoritmo. Los puntos negros son los vértices de un contorno. La línea sólida roja es el mejor candidato polilínea segmento de extremo a extremo de la longitud es mayor de 100 dentro de ese contorno. (Visualmente el candidato obvio en la parte superior derecha no es suficiente.)

Figure

3voto

TiuTalk Puntos 121

No sé si esto ayuda, o incluso si se cuenta como una respuesta, pero como yo estaba sentado aquí pensando en la pregunta que acaba de publicar, tuve un pensamiento:

Lo que si se coloca un círculo de un radio determinado en su línea de contorno. Ese círculo se cruzará la línea de contorno en al menos dos lugares. De la recta de la línea, la más corta es la distancia a lo largo de la línea de contorno entre los dos puntos de intersección. La más larga es la distancia a lo largo de la línea de contorno entre los puntos de intersección, el más curvo de la línea. Si hay más de dos puntos de intersección, la línea de contorno es demasiado sinuosa.

Usted puede averiguar lo que la longitud de dar el mejor indicador de la rectitud, y establezca una rutina a paso a lo largo de cada línea de contorno y donde fue directamente suficiente, coloque la etiqueta.

Estoy seguro de que esto no ayuda demasiado, y lo digo en inglés es mucho más difícil que en cualquier lenguaje de programación que se está usando, pero podría ser un inicio?

3voto

tobes Puntos 19

El enfoque más sencillo que se me ocurre es la relación entre la longitud de la trayectoria entre el inicio y término de la distancia más corta (en línea recta) desde el inicio hasta el punto final. Las líneas rectas se tienen relaciones de cerca a uno a la vez, muy de líneas curvas tendrá una muy alta proporción.

Esto debería ser muy fácil de implementar una solución.


Actualización: Como Mike di cuenta correctamente, esto sería igual a Sinuosidad.

enter image description here

3voto

leora Puntos 5626

En la infografía de la comunidad, a menudo es necesario encontrar un cuadro delimitador alrededor de un objeto. En consecuencia, que es un bien estudiado el problema, con rápido algoritmos. E. g., ver Wikipedia Mínimo cuadro delimitador algoritmos artículo. Usted puede encontrar el mínimo de la zona del rectángulo que rodea la polilínea y, a continuación, utilizar el rectángulo de proporción de aspecto, altura/longitud. Para obtener una medida más precisa, usted podría mirar a la desviación de la polilínea a partir de la línea central de este rectángulo delimitador.

1voto

Tobias Kildetoft Puntos 1326

Por la búsqueda de "curvatura" y "polilínea", tengo esta info ¿Cómo puedo encontrar la curvatura de una polilínea?. Allí se sugiere el uso de regresar a la definición de la curvatura - K= DF/Ds. Aquí por F que significa phio T en la wikipedia la notación aquí (http://en.wikipedia.org/wiki/Curvature).

Supongamos que tenemos una secuencia de tres puntos, p0, p1 y p2. calcular la distancia s entre p0 y p1, que es el delta de s (Ds), suponiendo que los puntos están cerca suficientes para cada uno de los otros. Entonces usted necesita delta de T (DT), que es el cambio en la unidad tangencial del vector entre p0 y p1. no puede ser sofisticado, pero el crudo método que se me ocurre tomar dos bectors p0->p1, p1->p2, normalizar cada uno de los que tienen la longitud de uno, a continuación, tomar el vector de la resta de los dos, a continuación, determinar la magnitud. Que es DT. La división de rendimiento de una curvatura K0_1. agarrar p1, p2 y p3 para calcular K1_2 y así sucesivamente.

Me estoy preguntando si usted consigue el asimiento de el contorno como una polilínea, no como un prestados píxeles. Usted dijo: 100px por lo que me preocupo un poco.

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