Matlab - подбор кривой для данных облака точек - PullRequest
3 голосов
/ 06 февраля 2012

У меня есть 10000 наборов данных (x, y), для которых мне нужно подогнать кривую.Как только я смогу подогнать кривую, мне нужно получить точки на кривой с равномерным интервалом.Затем я приступил бы к исправлению .. и затем к stl для моей конечной цели.Прямо сейчас я поражен кривой примеркой.Пожалуйста, помогите мне.

Ссылка для описания: https://docs.google.com/open?id=0BxIgxUb0m51-ZDA2ZWU0NzItM2JkZS00MWI4LTg0ZTMtNTI0ZjQzMzIxMzU3

1 Ответ

3 голосов
/ 06 февраля 2012

Одним из подходов будет подгонка кривой наименьших квадратов.

Вам нужно будет соответствовать параметризованной кривой [x(t), y(t)], а не простой кривой y(x). По вашей ссылке похоже, что вы пытаетесь подогнать простую кривую y(x).

Существует удобный инструмент для подгонки сплайнов по методу наименьших квадратов SPLINEFIT, доступный на бирже файлов MATLAB здесь .

Используя этот инструмент, ниже приведен простой пример того, как можно использовать подбор сплайнов методом наименьших квадратов для подгонки плавной кривой к набору зашумленных данных. В этом случае я сгенерировал 10 случайно выбранных наборов данных окружности, а затем подгонил сплайн порядка 5 к данным методом наименьших квадратов. enter image description here

function spline_test

%% generate a set of perturbed data sets for a circle
   xx = [];
   yy = [];
   tt = [];
   for iter = 1 : 10
   %% random discretisation of a circle
      nn = ceil(50 * rand(1))
   %% uniform discretisation in theta
      TT = linspace(0.0, 2.0 * pi, nn)';
   %% uniform discretisation
      rtemp = 1.0 + 0.1 * rand(1);
      xtemp = rtemp * cos(TT);
      ytemp = rtemp * sin(TT);
   %% parameterise [xtemp, ytemp] on the interval [0,2*pi]
      ttemp = TT;
   %% push onto global arrays
      xx = [xx; xtemp];
      yy = [yy; ytemp];
      tt = [tt; ttemp];    
   end

%% sample the fitted curve on the interval [0,2*pi]
   ts = linspace(0.0, 2.0 * pi, 100);

%% do the least-squares spline fit for [xx(tt), yy(tt)]
   sx = splinefit(tt, xx, 5, 'p');
   sy = splinefit(tt, yy, 5, 'p');

%% evaluate the fitted curve at ts
   xs = ppval(sx, ts);
   ys = ppval(sy, ts);

%% plot data set and curve fit
   figure; axis equal; grid on; hold on;
   plot(xx, yy, 'b.');
   plot(xs, ys, 'r-');

end      %% spline_test()

Ваши данные, очевидно, более сложны, чем эта, но это может помочь вам начать.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...