exponenta event banner

pcnormals

Оценка нормалей для облака точек

Описание

пример

normals = pcnormals(ptCloud) возвращает матрицу, которая сохраняет нормаль для каждой точки на входе ptCloud. Функция использует шесть соседних точек для размещения локальной плоскости для определения каждого вектора нормали.

normals = pcnormals(ptCloud,k) дополнительно указывает k, количество точек, используемых для фитинга локальной плоскости.

Примеры

свернуть все

Загрузка облака точек.

load('object3d.mat');

Оцените нормальные векторы.

normals = pcnormals(ptCloud);

figure
pcshow(ptCloud)
title('Estimated Normals of Point Cloud')
hold on

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

x = ptCloud.Location(1:10:end,1:10:end,1);
y = ptCloud.Location(1:10:end,1:10:end,2);
z = ptCloud.Location(1:10:end,1:10:end,3);
u = normals(1:10:end,1:10:end,1);
v = normals(1:10:end,1:10:end,2);
w = normals(1:10:end,1:10:end,3);

Постройте график нормальных векторов.

quiver3(x,y,z,u,v,w);
hold off

Figure contains an axes. The axes with title Estimated Normals of Point Cloud contains 2 objects of type scatter, quiver.

Переверните нормали, чтобы указать на расположение датчика. Этот шаг необходим только для определения внутреннего или внешнего направления поверхности. Центр датчика устанавливается в координатах x, y, z.

sensorCenter = [0,-0.3,0.3]; 
for k = 1 : numel(x)
   p1 = sensorCenter - [x(k),y(k),z(k)];
   p2 = [u(k),v(k),w(k)];
   % Flip the normal vector if it is not pointing towards the sensor.
   angle = atan2(norm(cross(p1,p2)),p1*p2');
   if angle > pi/2 || angle < -pi/2
       u(k) = -u(k);
       v(k) = -v(k);
       w(k) = -w(k);
   end
end

Постройте график скорректированных нормалей.

figure
pcshow(ptCloud)
title('Adjusted Normals of Point Cloud')
hold on
quiver3(x, y, z, u, v, w);
hold off

Figure contains an axes. The axes with title Adjusted Normals of Point Cloud contains 2 objects of type scatter, quiver.

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

свернуть все

Объект для хранения облака точек, возвращаемый как pointCloud объект.

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

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

свернуть все

Нормали, используемые для соответствия локальной плоскости, возвращаемой в виде M-by-3 или вектора M-by-N-by-3. Нормальные векторы вычисляются локально с использованием шести соседних точек. Направление каждого вектора нормали может быть задано в зависимости от способа получения точек. В примере Оценка нормалей облака точек показано, как задать направление, когда нормальные векторы направлены к датчику.

Ссылки

[1] Хоппе, Х., Т. ДеРоуз, Т. Дюшан, Дж. Макдональд и В. Стуэцл. «Реконструкция поверхности из неорганизованных точек». Компьютерная графика (SIGGRAPH 1992 Proceedings). 1992, стр 71–78.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2015b