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-канала в интервале (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. 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++ с помощью MATLAB® Coder™.

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

Функции

Объекты

Введенный в R2020b