pcmedian

Медианная фильтрация 3-D данных облака точек

Описание

пример

ptCloudOut = pcmedian(ptCloudIn) выполняет медианную фильтрацию данных 3-D облаков точек. Функция фильтрует каждый канал облака точек индивидуально. Выходы - отфильтрованное облако точек. Каждое значение свойства выходного местоположения является медианой окрестности вокруг соответствующего значения свойства входного местоположения. pcmedian функция не заполняет нули на ребрах. Скорее он действует только на доступных соседних значениях.

Если входное облако точек является организованным облаком точек, pcmedian функция использует метод N -by N neighborhood. Если облако точек неорганизовано, функция использует метод радиального соседства.

пример

ptCloudOut = pcmedian(___,Name,Value) задает опции, используя один или несколько аргументы пары "имя-значение". Для примера, 'FilterSize',3 устанавливает размер медианного фильтра для организованных облаков точек равным 3.

Примеры

свернуть все

Используйте медианный фильтр, чтобы удалить шум из облака точек. Во-первых, добавьте случайный шум в облако точек. Затем используйте pcmedian функция для фильтрации шума.

Создайте облако точек.

gv = 0:0.01:1;
[X,Y] = meshgrid(gv,gv);
Z = X.^2 + Y.^2;
ptCloud = pointCloud(cat(3,X,Y,Z));

Добавьте случайный шум вдоль оси Z.

temp = ptCloud.Location;
count = numel(temp(:,:,3));
temp((2*count) + randperm(count,100)) = rand(1,100);
temp(count + randperm(count,100)) = rand(1,100);
temp(randperm(count,100)) = rand(1,100);
ptCloudA = pointCloud(temp);

Примените медианный фильтр и отобразите три облака точек (исходное, шумное и отфильтрованное).

ptCloudB = pcmedian(ptCloudA);

subplot(1,3,1)
pcshow(ptCloud)
title('Original Data')
subplot(1,3,2)
pcshow(ptCloudA)
title('Noisy Data')
subplot(1,3,3)
pcshow(ptCloudB)
title('Filtered Data')

Figure contains 3 axes. Axes 1 with title Original Data contains an object of type scatter. Axes 2 with title Noisy Data contains an object of type scatter. Axes 3 with title Filtered Data contains an object of type scatter.

Загрузите данные облака точек в рабочую область.

ptCloud = pcread('highwayScene.pcd');
roi = [0 20 0 20 -5 15];
indices = findPointsInROI(ptCloud,roi);
ptCloud = select(ptCloud,indices);
ptCloud = pcdownsample(ptCloud,'gridAverage',0.2);

Отображение данных облака точек. Каждая точка кодируется цветом на основе ее x-координаты.

figure
pcshow(ptCloud.Location,ptCloud.Location(:,1))
view(-90,2)
title('Original Point Cloud')

Figure contains an axes. The axes with title Original Point Cloud contains an object of type scatter.

Добавьте шум по z-каналу в интервале (a, b). Значения a и b выбираются так, чтобы шум появлялся близко к земле.

temp = ptCloud.Location;
count = numel(temp(:,3));
a = -2.5;
b = -2;
temp((2*count)+randperm(count,200)) = a+(b-a).*rand(1,200);
ptCloudA = pointCloud(temp);

Отобразите шумное облако точек. Каждая точка кодируется цветом на основе ее x-координаты.

figure
pcshow(ptCloudA.Location,ptCloudA.Location(:,1))
view(-90,2)
title('Noisy Point Cloud')

Figure contains an axes. The axes with title Noisy Point Cloud contains an object of type scatter.

Применить медианный фильтр к облаку точек.

ptCloudB = pcmedian(ptCloudA,'Dimensions',3,'Radius',1);

Отображение отфильтрованного облака точек. Каждая точка кодируется цветом на основе ее x-координаты.

figure
pcshow(ptCloudB.Location, ptCloudB.Location(:,1))
view(-90,2)
title('Filtered Point Cloud')

Figure contains an axes. The axes with title Filtered Point Cloud contains an object of type scatter.

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

свернуть все

Облако точек, заданное как pointCloud объект с по крайней мере одной допустимой точкой. Если облако точки ввода организовано, размер облака точек должен составить по крайней мере 3 на 3 на 3.

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

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

Пример: 'FilterSize', 3 задает средний размер фильтра 3.

Интересующие вас размерности облака точек, заданные как вектор из целых чисел в области значений [1 3]. Значения 1, 2 и 3 соответствуют x -, y - и z - оси соответственно. Необходимо задать размерности в порядке возрастания.

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

Размер медианного фильтра для организованного облака точек, заданный как нечетное целое число в области значений [3, N]. N канал является наименьшим из размерностей в облаке точек.

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

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

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

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

свернуть все

Отфильтрованное облако точек, возвращенное как pointCloud объект.

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

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

.

См. также

Функции

Объекты

Введенный в R2020b