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 objects. Axes object 1 with title Original Data contains an object of type scatter. Axes object 2 with title Noisy Data contains an object of type scatter. Axes object 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 object. The axes object with title Original Point Cloud contains an object of type scatter.

Добавьте шум вдоль z-канала в интервале (aB). Значения 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 object. The axes object 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 object. The axes object with title Filtered Point Cloud contains an object of type scatter.

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

свернуть все

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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