2011-08-16 20 views
6

Sé que este problema se ha resuelto antes, pero he tenido grandes dificultades para encontrar cualquier literatura que describa los algoritmos utilizados para procesar este tipo de datos. Básicamente estoy haciendo algunos hallazgos de borde en un conjunto de datos 2D. Quiero ser capaz de encontrar un par de puntos en un diagrama de ojo (generalmente utilizado para calificar los sistemas de comunicaciones de alta velocidad), y como no he tenido experiencia en el procesamiento de imágenes, me cuesta escribir métodos eficientes.Detección de bordes bidimensional eficiente en Python

Como probablemente pueda ver, estos diagramas se llaman así porque se parecen al ojo humano. Pueden variar mucho en grosor, pendiente y ruido, dependiendo de la señal y del sistema bajo prueba. Las medidas que normalmente se toman son la fluctuación de fase (el grosor horizontal de la región de cruce) y la altura del ojo (medida en algún porcentaje específico del ancho o el punto máximo posible). Sé que esto se puede hacer mejor con el procesamiento de imágenes en lugar de un enfoque más lineal, ya que mis intentos hasta ahora tardan varios segundos en encontrar el lado izquierdo del primer cruce. ¿Alguna idea de cómo debería hacerlo en Python? Ya estoy usando NumPy para hacer parte del procesamiento.

Aquí hay algunos example data, está formateado como una matriz 1D con los datos asociados del eje x. Para este ejemplo en particular, debe dividirse cada 666 puntos (2 * int ((1.0/2.5e9)/1.2e-12)), ya que la velocidad de la señal era de 2.5 GB/s, y el tiempo entre los puntos era 1.2 ps

Gracias!

Example 1 Example 2

+0

su pasta de datos no funcionó ... – so12311

+0

Debe corregirse ahora – bheklilr

+0

Suponiendo que tiene los datos originales utilizados para generar el gráfico, tal vez sería mejor que utilizara esos datos directamente que analizar un gráfico procesado. –

Respuesta

3

Ha intentado OpenCV (Open Computer Vision)? Es ampliamente utilizado y tiene un enlace de Python.

No es un PITA, pero ¿es seguro que no sería mejor con un enfoque numérico? Todas las herramientas que he visto para el análisis del diagrama del ojo siguen la ruta numérica; No he visto ninguno que analice la imagen en sí.

Usted dice que su algoritmo es extremadamente lento en ese conjunto de datos; mi siguiente pregunta sería por qué. ¿Estás mirando un conjunto de datos sobremuestreados? (Supongo que lo eres.) Y si es así, ¿has intentado diezmar la señal primero? Eso al menos le daría menos muestras para que su algoritmo se abriera paso.

+0

Tengo que tener la medida de mediciones más precisa posible. El jitter necesita estar dentro de 1 ps (actualmente estoy interpolando para obtener un punto discreto más exacto, no solo el más cercano), y como estos son diagramas de ojo simulados, la cantidad de datos que tengo que ingresar es bastante grande en orden para obtener una medición precisa. – bheklilr

+0

Debo señalar que si observa un conjunto de muestras de una señal analógica que ya ha sido convertida A/D, la interpolación entre muestras no hará que sus mediciones sean más precisas. Es por eso que sobremuestreamos señales en primer lugar. Además, 300,000 puntos de datos no son mucho en el mundo de DSP. Eso es el equivalente a unos siete segundos de audio muestreado a 44.1 kHz. –

+0

Es menos de un nanosegundo para mí. Si bien no es mucho en el mundo DSP, es una gran cantidad de datos que debe procesar. Creo que si puedo convertir rápidamente estos datos a una imagen en la memoria (estos se generaron con matplotlib, que es significativamente más lento), entonces debería ser relativamente fácil de tratar. – bheklilr

1

simplemente bajando la ruta por un momento, si lee esas imágenes en la memoria, como son, ¿no sería bastante fácil hacer dos rellenos de inundación (centro inicial y medio del borde izquierdo) que incluyen todos " blanco "datos. si la rutina de relleno registró la altura máxima y mínima en cada columna, y la extensión horizontal máxima, entonces usted tiene todo lo que necesita.

en otras palabras, creo que estás pensando demasiado en esto. la detección de bordes se usa en escenas complejas "naturales" cuando los bordes no están claros. aquí sus bordes son tan completamente obvios que no necesita mejorarlos.

Cuestiones relacionadas