Обнаружение прямой линии по изображению

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

Теперь я хочу обработать это изображение и дать результат, прямо или нет. если он кривой, то насколько большой кривой. Я не понимаю, как это сделать. Я много искал, но не могу найти подходящий результат. Может ли кто-нибудь помочь мне в этом?

4 ответа

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

Но вот мое предложение:

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

прямая линия

Это довольно сложно, и ваш вопрос очень широкий, но давайте попробуем:

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

  2. Я бы использовал сплайн-интерполяцию между точками. Таким образом, можно просто получить локальный вывод кривой, касающейся каждой точки.

  3. Если максимум первого деривации мал, точки находятся в линии. Если вы считаете, что точки принадлежат одной кривой, второй вывод - это ваша кривизна.

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

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

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

Как предложил @urzeit, вы должны сначала найти точки как можно точнее. На самом деле нет никакого способа дать хороший совет по этому поводу, не видя реальных картинок, за исключением, может быть: постараться сделать задачу максимально простой для себя. Например, если вы можете установить камеру на очень короткое время затвора (микросекунды, если это возможно) и одновременно сконцентрировать энергию лазера, "фон" будет вносить меньше энергии в яркость изображения, а лазерные пятна будут просто быть яркими пятнами на темном фоне.

Измерение линейности должно быть простым, хотя: "Линейность" - это просто другое слово для "линейной корреляции". Таким образом, вы можете просто рассчитать соотношение между значениями X и Y. Как показывают изображения на связанной странице википедии, корреляция =1 означает, что все точки находятся на одной линии.

Если вы хотите фактическую линию, вы можете просто использовать Total Least Squares.

Другие вопросы по тегам