pcmatchfeatures

Найдите соответствие с функциями между облаками точек

Описание

indexPairs = pcmatchfeatures(features1,features2) находит, что соответствие с функциями между входными матрицами извлеченного облака точек показывает и возвращает их индексы в каждой матрице функции.

пример

indexPairs = pcmatchfeatures(features1,features2,ptCloud1,ptCloud2) отклоняет неоднозначные соответствия функции на основе пространственной реляционной информации от облаков точек, соответствующих матрицам функции.

[indexPairs,scores] = pcmatchfeatures(___) возвращает нормированные Евклидовы расстояния между соответствующими функциями с помощью любой комбинации входных параметров от предыдущих синтаксисов.

___ = pcmatchfeatures(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой комбинации аргументов в предыдущих синтаксисах. Например, 'MatchThreshold',0.03 устанавливает нормированный порог расстояния для соответствия с функциями к 0.03.

Примеры

свернуть все

В этом примере показано, как совпадать с соответствующими функциями облака точек и визуализировать их использующий pcmatchfeatures и pcshowMatchedFeatures функции.

Создайте velodyneFileReader объект.

veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');

Считайте два облака точек с помощью velodyneFileReader объект.

frameNumber = 1;
skipFrame = 5;
fixed = readFrame(veloReader,frameNumber);
moving = readFrame(veloReader,frameNumber + skipFrame);

Сегмент и удаляет наземную плоскость из облака фиксированной точки.

groundPtsIdxFixed = segmentGroundFromLidarData(fixed);
fixedSeg = select(fixed,~groundPtsIdxFixed,'OutputSize','full');

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

groundPtsIdxMoving = segmentGroundFromLidarData(moving);
movingSeg = select(moving,~groundPtsIdxMoving,'OutputSize','full');
figure
pcshowpair(fixedSeg,movingSeg)
ylim([-50 60])
title('Input Point Clouds')

Наложенные облака точки ввода являются цветом, закодированным можно следующим образом:

  • Пурпурный - облако Фиксированной точки

  • Зеленый - движущееся облако точек

Downsample облака точек.

fixedDownsampled = pcdownsample(fixedSeg,'gridAverage',0.2);
movingDownsampled = pcdownsample(movingSeg,'gridAverage',0.2);

Извлеките функции из облаков точек.

[fixedFeature,fixedValidInds] = extractFPFHFeatures(fixedDownsampled);
[movingFeature,movingValidInds] = extractFPFHFeatures(movingDownsampled);
fixedValidPts = select(fixedDownsampled,fixedValidInds);
movingValidPts = select(movingDownsampled,movingValidInds);

Совпадайте с функциями между облаками точек.

indexPairs = pcmatchfeatures(movingFeature,fixedFeature,movingValidPts, ...
    fixedValidPts);
matchedFixedPts = select(fixedValidPts,indexPairs(:,2));
matchedMovingPts = select(movingValidPts,indexPairs(:,1));

Визуализируйте соответствия.

figure
pcshowMatchedFeatures(movingSeg,fixedSeg,matchedMovingPts,matchedFixedPts, ...
    'Method',"montage")
xlim([-40 210])
ylim([-50 50])
title('Matched Points')

Совпадающими функциями и облаками точек является цвет, закодированный, чтобы улучшить визуализацию:

  • Пурпурный - Движущееся облако точек.

  • Зеленый - облако Фиксированной точки.

  • Красный круг - Совпадающие точки в движущемся облаке точек.

  • Синяя звездочка - Совпадающие точки в облаке фиксированной точки.

  • Желтый - Линия, соединяющая соответствующие функции.

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

свернуть все

Первый набор функций в виде M 1 N матрицей. Матрица содержит M 1 функция, и N является длиной каждого характеристического вектора. Каждая строка представляет одну функцию.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Второй набор функций в виде M 2 N матрицей. Матрица содержит M 2 функции, и N является длиной каждого характеристического вектора. Каждая строка представляет одну функцию.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Первое облако точек в виде pointCloud объект.

Второе облако точек в виде pointCloud объект.

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

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

Пример: 'MatchThreshold',0.03 устанавливает нормированный порог расстояния для соответствия с функциями к 0.03.

Метод сопоставления в виде разделенной запятой пары, состоящей из 'Method' и любой 'Exhaustive' или 'Approximate'. Метод определяет, как функция находит самых близких соседей между features1 и features2. Два характеристических вектора соответствуют, когда расстояние между ними меньше или равно соответствующему порогу.

  • 'Exhaustive' — Вычислите попарное расстояние между заданными характеристическими векторами.

  • 'Approximate' — Используйте эффективный аппроксимированный самый близкий соседний поиск. Используйте этот метод для больших наборов функций. [1]

Типы данных: char | string

Соответствие с порогом в виде разделенной запятой пары, состоящей из 'MatchThreshold' и скаляр в области значений (0, 1].

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

Типы данных: single | double

Пространственный порог отношения в виде разделенной запятой пары, состоящей из 'RejectRatio' и скаляр в области значений (0, 1).

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

Функция не рассматривает пространственный порог отношения, если вы не задаете значения для ptCloud1 и ptCloud2 входные параметры.

Типы данных: single | double

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

свернуть все

Индексы совпадающих функций, возвращенных как P-by-2 матрица. P является количеством совпадающих функций. Каждая строка соответствует совпадающей функции между features1 и features2 входные параметры, где первым элементом является индекс функции в features1 и вторым элементом является индекс соответствующей функции в features2.

Типы данных: uint32

Нормированное Евклидово расстояние между соответствием с функциями, возвращенными как P - вектор-столбец элемента. i th элемент вектора является расстоянием между совпадающими функциями в i th строка indexPairs вывод .

Типы данных: single | double

Ссылки

[1] Muja, Мариус и Дэвид Г. Лоу. "Быстро Аппроксимируйте Самых близких Соседей Автоматической Настройкой Алгоритма". В Продолжениях Четвертой Международной конференции по вопросам Теории Компьютерного зрения и Приложений, 331-40. Лиссабон, Португалия: SciTePress - Публикации Науки и техники, 2009. https://doi.org/10.5220/0001787803310340.

[2] Чжоу, Цянь-И, парк Jaesik и Владлен Кольтун. "Быстрая глобальная регистрация". На европейской Конференции по Компьютерному зрению, стр 766-782. Спрингер, Хан, 2016.

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

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

Смотрите также

Функции

Введенный в R2020b
Для просмотра документации необходимо авторизоваться на сайте