exponenta event banner

pcmedian

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

Описание

пример

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

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

пример

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.

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

Укажите дополнительные пары, разделенные запятыми 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++ с помощью MATLAB ® Coder™

.

См. также

Функции

Объекты

Представлен в R2020b