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 для наложения полос на оригинальное изображение. The 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 = A x3 + <reservedrangesplaceholder1> <reservedrangesplaceholder0>2 + <reservedrangesplaceholder2> <reservedrangesplaceholder1> + D.

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

    • Unmarked

    • Solid

    • Dashed

    • BottsDots

    • DoubleSolid

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

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

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

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

Совет

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

Алгоритмы

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

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

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2018a