findParabolicLaneBoundaries

Найдите контуры с помощью параболической модели

Описание

пример

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

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

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

Примеры

свернуть все

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

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

I = imread('road.png');

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

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

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

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

approxBoundaryWidth = 0.25;

Обнаружьте функции маршрута и отобразите их как черно-белое изображение.

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

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

Получите кандидата маршрута точки в мировых координатах.

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

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

boundaries = findParabolicLaneBoundaries(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 object. The axes object 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 object. The axes object contains an object of type image.

Входные параметры

свернуть все

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

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

Аргументы name-value

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

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

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

Функция, чтобы подтвердить граничную модель в виде разделенной запятой пары, состоящей из 'ValidateBoundaryFcn' и указатель на функцию. Заданная функция возвращает логический 1 (TRUE), если граничная модель принята и логический 0 (FALSE) в противном случае. Используйте эту функцию, чтобы отклонить недопустимые контуры. Функция должна иметь форму:

isValid = validateBoundaryFcn(parameters)

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

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

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

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

свернуть все

Модели контура маршрута, возвращенные как массив parabolicLaneBoundary объекты. Эта таблица показывает свойства каждого выходного объекта контура.

СвойствоОписание
Parameters

Коэффициенты для параболической модели формы y = Ax2 + Bx + C в виде вектора с действительным знаком из формы [A B C].

BoundaryType

Тип контура маршрута в виде LaneBoundaryType перечисление. Поддерживаемые типы контура маршрута:

  • Unmarked

  • Solid

  • Dashed

  • BottsDots

  • DoubleSolid

Объекты контура маршрута всегда возвращают BoundaryType как вводят Solid. Обновите эти типы, чтобы совпадать с типами маршрутов, которые адаптируются. Чтобы обновить тип контура маршрута, используйте LaneBoundaryType. BoundaryType синтаксис. Например, этот пример кода показывает, как обновить первый выходной контур маршрута, чтобы ввести BottsDots:

boundaries(1) = LaneBoundaryType.BottsDots;

Strength

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

XExtent

Длина контура вдоль x - ось в виде вектора с действительным знаком из формы [minX maxX] это описывает минимальный и максимальный x - местоположения оси.

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

Советы

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

Алгоритмы

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

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

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

Введенный в R2017a