Эффективное 2D-обнаружение кромок в Python - PullRequest
6 голосов
/ 17 августа 2011

Я знаю, что эта проблема была решена раньше, но мне было очень трудно найти какую-либо литературу, описывающую алгоритмы, используемые для обработки такого рода данных.По сути, я занимаюсь поиском преимуществ на наборе двумерных данных.Я хочу найти пару точек на глазковой диаграмме (обычно используется для оценки высокоскоростных систем связи), и, поскольку у меня не было опыта в обработке изображений, я изо всех сил пытаюсь написать эффективные методы.

КакВы, наверное, видите, эти диаграммы так называются, потому что они напоминают человеческий глаз.Они могут сильно различаться по толщине, наклону и шуму, в зависимости от сигнала и тестируемой системы.Обычно выполняются следующие измерения: джиттер (горизонтальная толщина области пересечения) и высота глаза (измеряется либо в некотором заданном проценте от ширины, либо в максимально возможной точке).Я знаю, что лучше всего это сделать с помощью обработки изображений вместо более линейного подхода, поскольку мои попытки пока занимают несколько секунд, чтобы найти левую сторону первого пересечения.Любые идеи о том, как я должен идти об этом в Python?Я уже использую NumPy для выполнения некоторой обработки.

Вот некоторые примеры данных , они отформатированы как одномерный массив со связанными данными оси X.Для этого конкретного примера его следует разделить на каждые 666 точек (2 * int ((1.0 / 2.5e9) / 1.2e-12)), поскольку скорость сигнала составляла 2,5 ГБ / с, а время между точками составляло1,2 пс.

Спасибо!

Example 1 Example 2

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Вы пробовали OpenCV (Open Computer Vision)? Он широко используется и имеет привязку Python.

Не для того, чтобы быть PITA, но вы уверены, , вам не будет лучше с численным подходом? Все инструменты, которые я видел для анализа глазных диаграмм, идут по числовому маршруту; Я не видел ни одного, который анализирует само изображение.

Вы говорите, что ваш алгоритм мучительно медленен в этом наборе данных - мой следующий вопрос будет почему. Вы смотрите на набор данных с избыточной дискретизацией? (Полагаю, что да.) И если да, то пробовали ли вы сначала децитировать сигнал? Это, по крайней мере, даст вам меньше примеров для прохождения алгоритма.

1 голос
/ 17 августа 2011

просто на мгновение по вашему маршруту, если вы прочитаете эти изображения в память, как они есть, было бы довольно легко сделать две заливки (начальный центр и середину левого края), которые включают все «белые»" данные.если процедура заполнения записала максимальную и минимальную высоту в каждом столбце и максимальный горизонтальный экстент, то у вас есть все, что вам нужно.

Другими словами, я думаю, вы слишком обдумываете это.Обнаружение краев используется в сложных «естественных» сценах, когда края нечеткие.здесь ваши края настолько очевидны, что вам не нужно их улучшать.

...