Оценка кривизны по изображению

У меня есть такие картинки:

введите здесь описание изображениявведите здесь описание изображения введите здесь описание изображениявведите здесь описание изображения

На этих изображениях красная линия - это то, что я хочу получить от изображения. На исходных изображениях нет этих красных линий, а есть только эта зеленая дорога.

Я хочу оценить кривую по изображению в виде коэффициентов уравнения: A x ^ 2 + B x + C = 0. На изображениях может быть шум (черные дыры по краям, как вы видите выше).

Я попытался решить эту проблему, используя метод наименьших квадратов (LSM), но с этим подходом есть две проблемы:

  1. Метод слишком медленный даже на ПК, потому что количество очков велико.

  2. Дорога слишком широкая в следующем случае:

Кривая на левом изображении распознается правильно, а на правом — неправильно. Причина в том, что дорога слишком широкая и слишком короткая, я полагаю. введите изображение

В качестве решения для обоих случаев я хочу сделать дорогу узкой. В идеальном случае это красная линия на изображениях выше. Или я хочу использовать LSM для обнаружения строки (A x + B = 0) для оптимизации времени обработки.

Я пробовал стирать изображение - это неправильный подход. Скелет тоже не правильное решение.

Есть идеи, как добиться желаемого результата (сделать дорогу узкой)? Или какие-либо идеи другого подхода к этой проблеме?


person maximus    schedule 04.09.2012    source источник
comment
Пробовали ли вы истончение? Хотя бы в качестве первого шага. Второй может быть LSM на утонченной линии (или на выборочных точках, если их слишком много). Или вы можете попытаться обнаружить дуги и/или parabolas с помощью Hough transform.   -  person Agnius Vasiliauskas    schedule 04.09.2012


Ответы (1)


Если вы всегда можете полагаться на одну ось в качестве зависимой переменной в вашей подгонке (похоже, это должна быть ось x в приведенных выше «правильных» примерах, хотя ваш нижний правый сбой, похоже, использует y), тогда вы могли бы что-то сделать нравится:

  • для каждой строки сканирования y выберите медиану x нечерных пикселей
  • если нет нечерных пикселей (или меньше некоторого выбранного шумового порога), пропустить строку

Теперь у вас есть список из (x,y) пар, максимум столько, сколько строк развертки. Они представляют собой предположения относительно середины дороги на каждом уровне. Сопоставьте полином низкого порядка x=f(y) (я бы выбрал линейный или кубический, но вы можете сделать квадратный, если хотите) к этим точкам методом наименьших квадратов.

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

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

person walkytalky    schedule 04.09.2012
comment
Спасибо. Работает довольно быстро, разве что иногда делает ложные линии, в зависимости от того, как дорога ориентирована на камеру. Это потому, что расчет всегда выполняется построчно по горизонтали. А ложные расчеты появляются, если линия начинается не снизу изображения, а частично начинается с одной его стороны. - person maximus; 13.09.2012
comment
@maximus Ну, это взлом. Вы могли бы улучшить ситуацию, если бы более избирательно относились к точкам, используемым для подгонки, например, исключая строки, которые не ограничены с обеих сторон, но помимо этого (или в дополнение к этому), я подозреваю, что вам нужно будет принять более тщательное решение. подход, основанный на модели, который вводит некоторые предварительные знания о том, что представляют изображения. - person walkytalky; 14.09.2012