findParabolicLaneBoundaries

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

Синтаксис

boundaries = findParabolicLaneBoundaries(xyBoundaryPoints,approxBoundaryWidth)
[boundaries,boundaryPoints] = findParabolicLaneBoundaries(xyBoundaryPoints,approxBoundaryWidth)
[___] = findParabolicLaneBoundaries(___,Name,Value)

Описание

пример

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)

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

approxBoundaryWidth = 0.25;

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

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

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

[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
BEconfig = bevSensor.birdsEyeConfig;
lanesBEI = insertLaneBoundary(birdsEyeImage,boundaries(1),BEconfig,XPoints);
lanesBEI = insertLaneBoundary(lanesBEI,boundaries(2),BEconfig,XPoints,'Color','green');
imshow(lanesBEI)

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

свернуть все

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

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

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

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

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

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

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

isValid = validateBoundaryFcn(parameters)

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

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

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

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

свернуть все

Модели контура маршрута, возвращенные как массив объектов parabolicLaneBoundary. Объекты контура маршрута содержат следующие свойства:

  • Параметры Трехэлементный вектор, [A B C], который соответствует трем коэффициентам полиномиального уравнения второй степени в общей форме: y = A x 2 + B x + C.

  • BoundaryTypeLaneBoundaryType поддерживаемых контуров маршрута. Поддерживаемые типы контура маршрута:

    • Unmarked

    • Solid

    • Dashed

    • BottsDots

    • DoubleSolid

    Задайте тип контура маршрута как LaneBoundaryType.BoundaryType. Например:

    LaneBoundaryType.BottsDots
    
  • Strength — отношение количества уникального x - местоположения оси на контуре к общему количеству точек вдоль строки, на основе свойства XExtent.

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

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

Советы

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

Алгоритмы

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

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

Введенный в R2017a