0

Я делаю проект, который является обнаружением дыры в дороге. Я использую лазер для испускания луча на дороге и с помощью камеры, чтобы сделать изображение дороги. изображение может быть таким: enter image description hereобнаружение прямой линии с изображения

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

ответ

1

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

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

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

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

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

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

+0

Как я могу начать эту обработку изображений в C# ??? @urzeit –

+0

@new: Вы использовали C# раньше? – urzeit

+0

Да, сэр @urzeit –

0

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

1

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

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

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

illustration showing distances of points from best-fit straight line

+0

Примечание: на рисунке показана полная линейная регрессия, а не «обычная» линейная регрессия. Недостатком этого является то, что он не принимает «длину» точек вдоль линии или количества очков в должном порядке, как это делает статистическая оценка звука, например, стандартное отклонение или корреляция. – Niki

+0

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

+0

Точно моя точка. Мы мало знаем. Таким образом, выбор по умолчанию должен быть объективной оценкой. Пристрастная оценка * может иметь смысл, но это не мой первый выбор без каких-либо знаний, чтобы оправдать его. – Niki

0

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

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

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

Смежные вопросы