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 вектор. Векторы normal вычисляются локально с помощью шести соседних точек. Направление каждого вектора нормали может быть задано исходя из того, как вы получили точки. Нормали Estimate Облака точек примера показов, как задать направление, когда векторы normal указывают на датчик.

Ссылки

[1] Hoppe, H., T. DeRose, T. Duchamp, J. Mcdonald, and W. Stuetzle. «Реконструкция поверхности из неорганизованных точек». Компьютерная графика (SIGGRAPH 1992 Processions). 1992, стр 71–78.

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

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

.
Введенный в R2015b