exponenta event banner

findCubicLaneBoundaries

Поиск границ с помощью кубической модели

Описание

пример

boundaries = findCubicLaneBoundaries(xyBoundaryPoints,approxBoundaryWidth) использует алгоритм консенсуса случайных выборок (RANSAC) для поиска кубических моделей границ полосы движения, которые соответствуют набору граничных точек и приблизительной ширине. Каждая модель в возвращенном массиве cubicLaneBoundary содержит объекты [A B C D] коэффициенты его полиномиального уравнения третьей степени и интенсивность граничной оценки.

[boundaries,boundaryPoints] = findCubicLaneBoundaries(xyBoundaryPoints,approxBoundaryWidth) также возвращает массив ячеек с внутренними граничными точками для каждой найденной граничной модели с использованием предыдущих входных аргументов.

[___] = findCubicLaneBoundaries(___,Name,Value) использует параметры, указанные одним или несколькими Name,Value пара аргументов, с любым из предшествующих синтаксисов.

Примеры

свернуть все

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

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

I = imread('road.png');

Преобразуйте изображение в изображение с высоты птичьего полета с помощью предварительно настроенного объекта датчика. Этот объект моделирует датчик, который захватил исходное изображение.

bevSensor = load('birdsEyeConfig');
birdsEyeImage = transformImage(bevSensor.birdsEyeConfig,I);
imshow(birdsEyeImage)

Figure contains an axes. The axes contains an object of type image.

Установите приблизительную ширину маркера полосы движения в мировых единицах (метрах).

approxBoundaryWidth = 0.25;

Обнаружение элементов полосы движения и отображение их в виде черно-белого изображения.

birdsEyeBW = segmentLaneMarkerRidge(im2gray(birdsEyeImage), ...
    bevSensor.birdsEyeConfig,approxBoundaryWidth);
imshow(birdsEyeBW)

Figure contains an axes. The axes contains an object of type image.

Получение точек-кандидатов полосы движения в мировых координатах.

[imageX,imageY]  = find(birdsEyeBW);
xyBoundaryPoints = imageToVehicle(bevSensor.birdsEyeConfig,[imageY,imageX]);

Поиск границ полосы движения на изображении с помощью findCubicLaneBoundaries функция. По умолчанию функция возвращает максимум две границы полосы движения. Границы хранятся в массиве cubicLaneBoundary объекты.

boundaries = findCubicLaneBoundaries(xyBoundaryPoints,approxBoundaryWidth);

Использовать insertLaneBoundary для наложения полос на исходное изображение. XPoints вектор представляет точки полосы движения в метрах, которые находятся в пределах диапазона датчика эго-транспортного средства. Укажите полосы движения различных цветов. По умолчанию полосы движения имеют желтый цвет.

XPoints = 3:30;

figure
sensor = bevSensor.birdsEyeConfig.Sensor;
lanesI = insertLaneBoundary(I,boundaries(1),sensor,XPoints);
lanesI = insertLaneBoundary(lanesI,boundaries(2),sensor,XPoints,'Color','green');
imshow(lanesI)

Figure contains an axes. The axes contains an object of type image.

Просмотрите полосы движения на изображении с видом на птицу.

figure
BEconfig = bevSensor.birdsEyeConfig;
lanesBEI = insertLaneBoundary(birdsEyeImage,boundaries(1),BEconfig,XPoints);
lanesBEI = insertLaneBoundary(lanesBEI,boundaries(2),BEconfig,XPoints,'Color','green');
imshow(lanesBEI)

Figure contains an axes. The axes contains an object of type image.

Входные аргументы

свернуть все

Возможные граничные точки, указанные как [x y] вектор в координатах транспортного средства. Получение координат транспортного средства для точек в birdsEyeView изображение, используйте imageToVehicle функция преобразования координат изображения с высоты птичьего полета в координаты транспортного средства.

Приблизительная ширина границы, заданная как вещественный скаляр в единицах мира. Ширина представляет собой горизонтальное измерение по оси Y.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'MaxSamplingAttempts',200

Максимальное количество границ полосы движения, которые пытается найти функция, указанное как пара, разделенная запятыми, состоящая из 'MaxNumBoundaries' и положительное целое число.

Функция для проверки модели границы, указанной как разделенная запятыми пара, состоящая из 'ValidateBoundaryFcn' и дескриптор функции. Указанная функция возвращает логическое значение 1 (true), если граничная модель принята и логическа 0 (false) в противном случае. Эта функция используется для отклонения недопустимых границ. Функция должна иметь вид:

isValid = validateBoundaryFcn(parameters)

parameters - вектор, соответствующий трем параболическим параметрам.

Функция проверки по умолчанию всегда возвращает 1 Правда.

Максимальное число попыток найти выборку точек, которая дает допустимую кубическую границу, заданную как разделенная запятыми пара, состоящая из 'MaxSamplingAttempts' и дескриптор функции. findCubicLaneBoundaries использует fitPolynomialRANSAC функция для выборки из набора граничных точек и подгонки кубической граничной линии.

Выходные аргументы

свернуть все

Модели границ полос движения, возвращаемые в виде массива cubicLaneBoundary объекты. Объекты границ полос движения имеют следующие свойства:

  • Parameters - четырехэлементный вектор, [A B C D], что соответствует четырем коэффициентам полиномиального уравнения третьей степени в общем виде: y = Ax3 + Bx2 + Cx + D.

  • BoundaryType - A LaneBoundaryType поддерживаемых границ полосы движения. Поддерживаются следующие типы границ полосы движения:

    • Unmarked

    • Solid

    • Dashed

    • BottsDots

    • DoubleSolid

    Укажите тип границы полосы движения как LaneBoundaryType.BoundaryType. Например:

    LaneBoundaryType.BottsDots
    
  • Strength - Отношение количества уникальных расположений по оси X на границе к общему количеству точек вдоль линии на основе XExtent собственность.

  • XExtent - двухэлементный вектор, описывающий минимальное и максимальное расположения осей X для граничных точек.

Внутренние граничные точки, возвращаемые в виде массива ячеек [x y] значения. Каждый элемент массива ячеек соответствует одному и тому же элементу в массиве cubicLaneBoundary объекты.

Совет

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

Алгоритмы

  • Эта функция использует fitPolynomialRANSAC для поиска кубических моделей. Поскольку этот алгоритм использует случайную выборку, выходные данные могут изменяться в зависимости от выполнения.

  • maxDistance параметр fitPolynomialRANSAC равен половине ширины, указанной в approxBoundaryWidth аргумент. Точки считаются входящими, если они находятся в пределах ширины границы. Функция получает конечную граничную модель, используя наименьшие квадраты, вписанные в внутренние точки.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2018a