В Matlab R2015b и выше, Вы можете использовать pcfitcylinder
, чтобы соответствовать цилиндр к pointCloud
объекта. Давайте начнем с получения в качестве примера данные, чтобы увидеть, как это работает:
[theta, r, h] = meshgrid(0:.1:6.28, 1, 0:.2:4); % making a cylinder
r = r + 0.05 * randn(size(r)); % adding some radial noise
[x, y, z] = pol2cart(theta, r, h); % transforming the coordinate system
P = (rotx(60) * [x(:), y(:), z(:)]')'; % rotating the data points around x axis
figure;
scatter3(P(:, 1), P(:, 2), P(:, 3))
axis equal
точка объекта облако создается следующим образом:
ptCloud = pointCloud(P);
Тогда модель может быть оборудована:
maxDistance = 0.02;
model = pcfitcylinder(ptCloud, maxDistance);
hold on
plot(model)
В зависимости от ваших данных, чтобы получить разумный цилиндр, вам может потребоваться посмотреть pcfitcylinder
и рассмотреть возможность включения других входных аргументов.
Не имейте опыта, но посмотрели ли вы ссылки на странице Matlab [страница с поверхностью] (http://uk.mathworks.com/help/curvefit/surface-fitting.html)? – Steve