跳转到主要内容

一个用于解决非线性最小二乘优化问题的Python模块

项目描述

请参阅模块API页面

https://engineering.purdue.edu/kak/distNonlinearLeastSquares/NonlinearLeastSquares-2.0.2.html

以获取有关此模块的所有信息,包括有关代码最新更改的信息。上述URL所示的页面列出了您可以在自己的代码中调用的所有模块功能。

关于此模块的基本目的,它提供了一种适用于所有域的非线性最小二乘算法(梯度下降和Levenberg-Marquardt)实现,用于拟合观测数据。通常,一个模型涉及多个参数,每个观测数据元素都可以表示为这些参数加上噪声的函数。非线性最小二乘的目标是在给定所有观测数据的情况下估计参数的最佳值。为了说明如何使用NonlinearLeastSquares类,该模块还包含两个额外的类:OptimizedSurfaceFitProjectiveCamera。

OptimizedSurfaceFit的任务是在XY平面上拟合最佳表面以适应噪声高度数据。在这种情况下,模型将是高度表面的解析表达式,非线性最小二乘的目标将是估计模型中参数的最佳值。

ProjectiveCamera的任务是演示如何使用非线性最小二乘估计场景结构。基本思路是使用相机对场景进行多次拍摄——这可以通过ProjectiveCamera来模拟。您将记录的像素输入到NonlinearLeastSquares类中以估计场景结构点的坐标,并且在未校准的相机中使用时,还可以估计相机在每个位置的外部参数。

从版本2.0.0开始,该模块包含Levenberg-Marquardt算法稀疏捆绑调整变体的代码。

以下示例显示了通过自己的领域特定类(如OptimizedSurfaceFit或ProjectiveCamera)调用领域无关的非线性最小二乘法的典型用法语法

optimizer =  NonlinearLeastSquares(
                 max_iterations = 200,
                 delta_for_jacobian = 0.000001,
                 delta_for_step_size = 0.0001,
             )

surface_fitter = OptimizedSurfaceFit(
                     gen_data_synthetically = True,
                     datagen_functional = "7.8*(x - 0.5)**4 + 2.2*(y - 0.5)**2",
                     data_dimensions = (16,16),
                     how_much_noise_for_synthetic_data = 0.3,
                     model_functional = "a*(x-b)**4 + c*(y-d)**2",
                     initial_param_values = {'a':2.0, 'b':0.4, 'c':0.8, 'd':0.4},
                     display_needed = True,
                     debug = True,
                 )

surface_fitter.set_constructor_options_for_optimizer(optimizer)

result = surface_fitter.calculate_best_fitting_surface('lm')
or
result = surface_fitter.calculate_best_fitting_surface('gd')


                               OR


optimizer =  NonlinearLeastSquares.NonlinearLeastSquares(
                                     max_iterations = 400,
                                     delta_for_jacobian = 0.000001,
                                     delta_for_step_size = 0.0001,
             )

camera = ProjectiveCamera.ProjectiveCamera(
                     camera_type = 'projective',
                     alpha_x = 1000.0,
                     alpha_y = 1000.0,
                     x0 = 300.0,
                     y0 = 250.0,
         )
camera.initialize()

world_points = camera.make_world_points_for_triangle()
world_points_xformed = camera.apply_transformation_to_generic_world_points(world_points, ..... )

##  Now move the camera to different positions and orientations and then

result = camera.get_scene_structure_from_camera_motion('lm')

                               OR

result = camera.get_scene_structure_from_camera_motion_with_bundle_adjustment()

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

NonlinearLeastSquares-2.0.2.tar.gz (127.1 kB 查看散列值)

上传时间

由以下组织支持