精华内容
下载资源
问答
  • 3D 空间中拟合曲线

    千次阅读 2019-10-25 15:46:33
    // 3D 空间中拟合曲线 void fittingPolynomial3D(const pcl::PointCloud<pcl::PointXYZI>::Ptr &cloud, double &a, double &b, double &c) { // 获取点的总数 int num_point = cloud->...

    算法来源:C++/PCL:最小二乘拟合平面直线,平面多项式曲线,空间多项式曲线

    以下是我改写的算法,未经验证正确性!!!

    // 3D 空间中拟合曲线
    void fittingPolynomial3D(const pcl::PointCloud<pcl::PointXYZI>::Ptr &cloud, double &a, double &b, double &c) {
        // 获取点的总数
        int num_point = cloud->points.size();
        Eigen::MatrixXd A_(3, 3), B_(3, 1), A123(3, 1);
        double A01(0.0), A02(0.0), A12(0.0), A22(0.0), B00(0.0), B10(0.0), B12(0.0);
        for (int i = 0; i < num_point; ++i) {
            double x_y = std::sqrt(std::pow(cloud->points[i].x, 2) + std::pow(cloud->points[i].y, 2));
            A01 += x_y;
            A02 += std::pow(x_y, 2);
            A12 += std::pow(x_y, 3);
            A22 += std::pow(x_y, 4);
            B00 += cloud->points[i].z;
            B10 += x_y * cloud->points[i].z;
            B12 += std::pow(x_y, 2) * cloud->points[i].z;
        }
    
        A_ << num_point, A01, A02,
              A01, A02, A12,
            A02, A12, A22;
        B_ << B00,
              B10,
              B12;
        A123 = A_.inverse() * B_;
        a = A123(2, 0);
        b = A123(1, 0);
        c = A123(0, 0);
    
    }
    
    展开全文
  • 对于使用fmincon的非线性约束优化,首先需要定义一个确定fmincon的函数(即,预测z和x的结果:]y请注意,所有乘法和幂都是元素级的(function z = poly_model(x, y, p)% extract parametersp00 = p(1);...

    对于使用fmincon的非线性约束优化,首先需要定义一个确定fmincon的函数(即,预测z和x的结果:]y

    请注意,所有乘法和幂都是元素级的(function z = poly_model(x, y, p)

    % extract parameters

    p00 = p(1);

    p10 = p(2);

    p01 = p(3);

    p20 = p(4);

    p11 = p(5);

    p02 = p(6);

    p21 = p(7);

    p12 = p(8);

    p03 = p(9);

    % poly23 model

    z = p00 + p10 .* x + p01 .* y + p20 .* x.^2 + p11 .* x .* y + ...

    p02 .* y.^2 + p21 .* x.^2 .* y + p12 .* x .* y.^2 + p03 .* y.^3;

    end和.*)。这允许评估.^和x的矩阵输入函数,这是计算要在实验数据范围内施加的约束所必需的。

    约束已在单独的函数中定义。从文档:非线性约束,指定为函数句柄或函数名称。 nonlcon是一个接受向量x或数组x并返回两个数组c(x)和ceq(x)的函数。c(x)是x处的非线性不等式约束的数组。 fmincon试图满足

    c(x)<= 0对于c的所有条目。

    ceq(x)是x处的非线性等式约束的数组。 fmincon试图满足

    ceq(x)= 0对于ceq的所有条目。因此,在您的情况下,约束函数可以定义为:y

    接下来,您需要定义一个优化函数,以最小化实验数据与模型预测之间的误差:function [c, ceq] = constraint_eq(x, y, p)

    % evaluate the model for required x and y

    z_model = poly_model(x, y, p);

    % and constrain z to be positive:

    c = -z_model; % z_model >= 0, c(p) <= 0, hence c = -z_model

    % no inequality constraint needed

    ceq = [];

    end

    最后,调用function err = cost_function(x, y, z, p)

    z_model = poly_model(x, y, p); % determine model prediction z for x and y

    ev = z_model - z; % error vector

    err = norm(ev, 2)^2; % sum of squared error

    end例程:fmincon

    clc

    clear

    close all

    % data

    Experiment = [1.5 0.2 0.4 0.4 0.2 0.2 2.0 0.2 0.4 0.4 0.2 0.2];

    Time = [0 5 10 0 5 10 0 5 10 0 5 10];

    Concentration = [0 0 0 1 1 1 2 2 2 3 3 3];

    % short notation for readability

    x = Time;

    y = Concentration;

    z = Experiment;

    % define XV and YV to fulfil constraint over the entire x and y domain

    xv = linspace(min(x), max(x), 20);

    yv = linspace(min(y), max(y), 20);

    [XV, YV] = meshgrid(xv, yv);

    % initial guess parameters?

    p0 = rand(9, 1);

    p_final = fmincon(@(p) cost_function(x, y, z, p), p0, [], [], [], [], [], [], @(p) constraint_eq(XV, YV, p));

    %% check result:

    ZV = poly_model(XV, YV, p_final); % evaluate points in poly23 plane

    % plot result

    figure(1); clf;

    scatter3(x, y, z, 200, 'b.');

    hold on;

    surf(XV, YV, ZV)

    初始参数eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9vcjJpVS5wbmcifQ==的影响

    正如@James Philips在评论中指出的那样,您还可以将无约束优化的解决方案用作约束优化的起点。对于提供的实验数据和选择的模型,您将看到并没有真正的区别:p0

    哪个会给:% The random initial guess:

    p0 = rand(9, 1);

    % Optimal solution for random p0

    p_rand = fmincon(@(p) cost_function(x, y, z, p), p0, [], [], [], [], [], [], @(p) constraint_eq(XV, YV, p));

    % first running unconstrained optimization and use p_unc

    % as start point for constrained optimization

    p_unc = fmincon(@(p) cost_function(x, y, z, p), p0, [], []);

    p_con= fmincon(@(p) cost_function(x, y, z, p), p_unc, [], [], [], [], [], [], @(p) constraint_eq(XV, YV, p));

    % Compare errors:

    SSE_unc = cost_function(x,y,z,p_unc)

    SSE_con = cost_function(x,y,z,p_con)

    SSE_rand = cost_function(x,y,z,p_rand)

    % compare poly23 parameters

    p_all = [p_unc, p_con, p_rand]

    在这种情况下,发现的参数差异很小,但是求解器很可能需要较少的迭代次数才能获得该解决方案。通过调整求解器设置(最优容差和约束容差),SSE_unc =

    1.0348

    SSE_con =

    1.1889

    SSE_rand =

    1.1889

    p_all =

    1.3375 1.2649 1.2652

    -0.3425 -0.2617 -0.2618

    -1.6069 -1.0620 -1.0625

    0.0258 0.0187 0.0187

    0.0175 -0.0018 -0.0016

    1.5708 1.0717 1.0721

    -0.0042 -0.0018 -0.0018

    0.0125 0.0094 0.0094

    -0.3722 -0.2627 -0.2628和p_rand的解将更接近。

    然而,通常最好检查多个随机初始猜测,以确保您没有找到局部最小值(例如,使用p_con)。

    展开全文
  • PointCloud_B-Spline 将3d点云拟合曲线
  • 今天小编就为大家分享一篇python实现三维拟合的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • matlab三维曲线拟合

    热门讨论 2009-11-02 10:00:06
    曲线拟合 三维曲线(非线性)拟合步骤 二维曲线(非线性)拟合步骤
  • 对直线、曲线、及3维平面进行拟合,实现所需的拟合功能,仅供参考
  • 使用math.net,最小二乘法进行平面拟合3D线拟合,C#源码
  • 采用最小二乘法,辨识系统模型为椭圆或者椭球参数,可以用来校正加速度传感器和地磁传感器等。
  • 外推法是通过曲线拟合完成的。请参阅以下具有不同x&y大小的数据。在x = np.array([740,760,780,800,820,840,860,880,900,920,940,960]) # Presssure in mBary = np.array([1500,1800,2100,2400,2700,3000,33...

    我想在python中使用numpy/scipy推断3d绘图。外推法是通过曲线拟合完成的。请参阅以下具有不同x&y大小的数据。在x = np.array([740,760,780,800,820,840,860,880,900,920,940,960]) # Presssure in mBar

    y = np.array([1500,1800,2100,2400,2700,3000,3300,3600,3900]) # Rpm

    # Fuel Amount in micro seconds

    z = np.array([[1820,1820,1820,1820,2350,2820,3200,3440,3520,3600,3600,3600],

    [1930,1930,1930,2170,2700,2880,3240,3580,3990,3990,3990,3990],

    [1900,1900,2370,2680,2730,3050,3450,3760,3970,3970,3970,3970],

    [2090,2090,2240,2410,2875,3180,3410,3935,4270,4270,4270,4270],

    [1600,2180,2400,2700,2950,3290,3780,4180,4470,4470,4470,4470],

    [2100,2280,2600,2880,3320,3640,4150,4550,4550,4550,4550,4550],

    [2300,2460,2810,3170,3400,3900,4280,4760,4760,4760,4760,4760],

    [2170,2740,3030,3250,3600,4100,4370,4370,4370,4370,4370,4370],

    [2240,2580,2870,3275,3640,4050,4260,4260,4260,4260,4260,4260]])

    我想外推y轴点900和1200以及x轴720点处的曲线。在

    ^{pr2}$

    因为我没有z=f(x,y)的函数。如何在python中对上述情况进行曲线拟合,得到所需点的曲线值。

    展开全文
  • X=[83 83 83 113 113 83.5 113.5 113.5 113.5 114 114.5 115 117.5 117.5 100 71 100 100.5 101 101.5 101.5 102 102.5 103 103.5 104.5 104.5 105.5 103.5 71.5 104.5 106.5 107 107.5 106 107 109 110 107.5 108 1...

    X=[83 83 83 113 113 83.5 113.5 113.5 113.5 114 114.5 115 117.5 117.5 100 71 100 100.5 101 101.5 101.5 102 102.5 103 103.5 104.5 104.5 105.5 103.5 71.5 104.5 106.5 107 107.5 106 107 109 110 107.5 108 107.5 115 115.5 116 121.5 121.5 121.5 130 132.5 132.5 149 149 149 149 148 161 175 186.5 188.5 198.5 216.5 216.5 216.5 216.5 244.5 244.5 244.5 244.5 287 287 287 294.5 286.5 318.5 330.5 330.5 330.5 352 364 377 388 385 384.5 384.5 405 405 405 404.5 420 420 432 435.5 435.5 438 439.5 439.5 437.5 438.5 439 440]';

    Y=[275 276.5 278 276 277.5 282.5 281 283 285.5 287.5 289.5 292 294.5 296.5 312.5 280.5 303 306 308 310 308 310.5 312 312 313.5 316.5 316.5 319 313.5 293.5 316 320.5 322.5 323.5 320 322.5 327 329 323.5 324.5 323.5 339.5 339.5 340.5 349 349 349 360.5 363.5 363.5 380 380 380 380 379 389.5 398.5 404.5 405.5 410 416 416 416 416 421.5 421.5 421.5 421.5 421.5 421.5 421.5 420.5 421.5 415 411 411 411 401.5 394.5 385.5 376.5 379 379.5 379.5 359 359 359 359.5 338.5 338.5 315 306.5 306.5 299 294 294 300.5 297.5 295.5 292]';

    Z=0:1:99;  Z = Z';

    plot3(X,Y,Z,'b');

    xlabel('x');

    ylabel('y');

    zlabel('z');

    hold on;

    N = size(X,1);

    t = 1 : N;

    t = t';

    t3 = t.^3;

    t2 = t.^2;

    t1 = t;

    t0 = ones(N,1);

    C = [t3,t2,t1,t0];

    Ax = pinv(C)*X;

    Ay = pinv(C)*Y;

    Az = pinv(C)*Z;

    x0 = Ax(1)*t.^3 +Ax(2)*t.^2 + Ax(3)*t + Ax(4);

    y0 = Ay(1)*t.^3 +Ay(2)*t.^2 + Ay(3)*t + Ay(4);

    z0 = Az(1)*t.^3 +Az(2)*t.^2 + Az(3)*t + Az(4);

    plot3(x0,y0,z0,'r');

    hold on

    展开全文
  • 在python中一般采用matplotlib库的hist来绘制直方图,至于如何给直方图添加拟合曲线(密度函数曲线),一般来说有以下两种方法。 方法一:采用matplotlib中的mlab模块 mlab模块是Python中强大的3D作图工具,立体感...
  • 利用matlab将三维数据拟合成三维曲线

    万次阅读 多人点赞 2019-06-08 01:18:09
    拟合三维曲线貌似可以用相信回归做,但是matlab有一个自带的polyfit函数,可以直接算出二维数据的拟合曲线,用的是最小二乘法的思想。 思路其实很简单,将两条拟合的二维曲线组合在一起就是三维曲线了。 先上...
  • B样条曲线拟合(B_Spline_Approximation)

    千次阅读 热门讨论 2020-07-06 23:44:24
    B样条曲线拟合主要是一个LSQ(least squares) 拟合问题,主要思想也是最小二乘法的思想,这与B-Spline曲线插值不同,拟合曲线是尽量接近数据点,而不是完全通过。主要的方法可以参考cs3621 这里我定义了一个BS_...
  • python实现三维坐标曲线拟合

    千次阅读 2021-07-27 19:47:56
    已知一些三维点坐标,拟合经过这些点的曲线。废话不多说,直接上代码: import csv import numpy as np from matplotlib import pyplot as plt filename = './dataset/Realdata.csv' with open(filename, 'U') as ...
  • Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线 性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是 y=A*x*x + B*x, ...
  • 高斯牛顿法的曲线拟合实验

    千次阅读 2018-11-26 19:40:34
    高博十四讲中第六讲提供了用Ceres和g2o实现曲线拟合的程序,这篇博客是要手写一个高斯牛顿法实现这个拟合曲线的程序,同时最小二乘法的理论基础也可以在第六讲找到,相信大家也都了解。 1、构建最小二乘问题: ...
  • 手写高斯牛顿曲线拟合(c++)

    千次阅读 2019-08-17 21:13:15
    拟合曲线: 取100个带有高斯噪声的数,利用高斯牛顿法进行拟合求取估计值 a ,b ,c; 主要步骤: 1.构造误差项; 2,求雅克比,以及cost 3,判断cost是否小于上次cost,小:执行4,大:输出结果; 4,求H g; 5求...
  • 看着 Matlab 的综合曲线拟合工具箱,这些 mfile 似乎微不足道,但我为学生提供了这些 mfile。 它可以是一种无需花哨工具箱即可进行快速曲线拟合的好方法。 事实证明,显式微分方程求解器在拟合React工程动力学模型...
  • 三维点云最小二乘拟合球面的python代码实现
  • plotunevenData 允许您将 3D 表面拟合到 XYZ 数据,即使数据在 XY 平面中可能没有均匀分布。 请注意,TriScatteredInterp 用于 Z 值插值而不是网格数据。 plotunevenData 最多需要 9 个参数,其中 8 个是可选的。 ...
  • g2o 曲线拟合

    2020-11-05 09:46:13
    G2O曲线拟合Introduction二级目录三级目录 Introduction 图优化,是把优化问题表现成图的一种方式。这里的图是图论意义上的图。一个图由若干个顶点(Vertex),以及连接着这些顶点的边(Edge)组成。进而,用顶点...
  • 图像二值化之后,可以用cv2.CHAIN_APPROX_NONE或者cv2....再对上面保存的csv文件读取,进行B样条曲线拟合。可以修改拟合点的数量。 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d
  • 我正致力于在scipy中拟合三维分布函数。我有一个numpy数组,在x和y-bin中有计数,我正试图将其与一个相当复杂的三维分布函数相匹配。数据适合26(!)描述其两个组成种群形状的参数。我在这里了解到,当我调用leatsq时...
  • 允许用户从 Excel 导入数据并在 Matlab 中轻松创建 3D 图形。... 使用最小二乘拟合算法,混乱的数据变成一个直观的 3D 表面,可以旋转和最佳尺寸/速度/等。 可以选择。 在几分钟内从 excel 到 Matlab 再到 .png 图片。
  • PCL 点云最小二乘拟合多项式曲线
  • 激光雷达数据采集或读取、显示、直线拟合、角点提取、圆弧拟合、位姿解算等
  • 平滑曲线生成是一个很实用的技术 很多时候,我们都需要通过绘制一些折线,然后让计算机...这里介绍利用一种贝塞尔曲线拟合的方法,先给出我们最终的效果 图1 、折线拟合 图2、多边形拟合(封闭的折线) 继续...
  • Prism使用一个(X)独立变量执行非线性回归,但稍微聪明一点,也可用两个独立变量来拟合数据,有三种不同情况:拟合曲线族上图显示了竞争性酶动力学的样本数据,并显示了如何拟合曲线族。在此,每条曲线显示了酶活性是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,226
精华内容 2,090
关键字:

3d曲线拟合

友情链接: ATM.rar