2016-03-10 2 views
2

Моего требования, чтобы найти наклон линий (все 8 строк), окружающей матрицу данных, как показано на крае обнаружено изображение:Быстрый алгоритма для обнаружения наклона линий в изображении

image

два основных ограничения:

  • наклон обнаруженную должны иметь точность по меньшей мере, 0,1 & deg; (лучший достижимы в этом изображении)
  • Время, затраченное должно быть меньше, чем 30 ms

Я реализую algo на Blackfin DSP и использовал панель инструментов обработки изображений Blackfin.

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

[для моего использования случае, чем выше угол точности, тем лучше, я нацеливание по крайней мере, 0,02 - 0,05 с более высоким разрешением изображения]

+5

Как вы ожидаете, чтобы достичь этой точности? Внешние линии имеют длину около 260 пикселей. Вы можете определить позицию на линии только с погрешностью ± 0,5 px (изображение не подходит для подпиксельных методов). Это само по себе приводит к неопределенности, по меньшей мере, «дуги» (0,5/260) = 0,1 °. –

+0

чего вы хотите достичь? Я не могу придумать какое-либо приложение, где вам нужна такая точность для DMC. поделитесь дополнительной информацией, пожалуйста, – Piglet

+0

Добавленный ответ, я думаю, достаточно быстрый подход. Прецизионная проблема все еще существует и сильно зависит от качества подгонки и разрешения и качества изображения. btw выглядит как приложение для размещения SMD/BGA, или я ошибаюсь? – Spektre

ответ

0

быстрый и легкий Approch будет сканировать каждую строку и столбец для первый и второй белый пиксель, начиная с левого, правого, верхнего и нижнего. Затем просто используйте некоторый надежный алгоритм построения линии, чтобы получить строки.

Если вы еще не пытались сделать это, вы можете уменьшить данные для преобразования Хафа или других алгоритмов, обрезав изображение до размера DMC.

Необходимая точность угла не может быть достигнута, поскольку у вас недостаточно результатов. И даже если бы у вас были ваши результаты, они пострадали бы от любых шумов и выбросов.

1
  1. найти ограничивающий прямоугольник

    сканирование всех точки и обнаружил xmin,ymin,xmax,ymax из множества пикселей

  2. найти зазоры

    линии литого сканирование через половину ограничивающей коробку Вспомнив/мер размеры зазора. Чтобы избежать пропусков линии (из-за отверстий), вы можете накладывать больше строк сканирования или сканировать с более широким лучом.

    Если вам нужны примеры для луча литых/сканирование смотрите:

  3. segmentate изображения в регионы

    просто сжать ограничивающий параллелепипед некоторой доли (50 %) пробела ... примерно так:

    regions

    , образующий 8 прямоугольных областей, каждый из которых имеет одну линию без шума от краев.

  4. регресса/подходят линии

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

    Я хотел бы попробовать использовать это:

    Или использовать поиск приближения и нужным что-то вроде

    просто игнорировать параметры кривизны и подстроки линии напрямую, а не кубики.

    После линии установлены вы можете вычислить их наклон непосредственно atan2(dy,dx)

+0

спасибо за предложение. Позвольте мне попробовать это, и я дам вам знать, работает ли это во временном ограничении. в случае необходимости я могу определить шею бутылки и повторить ее решение. – kaustubh