标签: least-squares

图像的曲率估计

我有像这样的图像:

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

在这张图片中,红线是我想从图像中得到的.原始图像没有那条红线,只有那条绿色的道路.

我想要的是以等式的系数来估计图像中的曲线:A x ^ 2 + B x + C = 0.在图像中可能存在噪声(如上所示,边缘上有黑洞).

我试图通过使用最小二乘法(LSM)来解决这个问题,但这种方法存在两个问题:

  1. 即使在PC上,该方法也太慢,因为点数量很高.

  2. 在下列情况下,道路太宽:

左图像上的曲线被正确识别,但右侧不正确.我想,原因是道路太宽太短. 输入图像

作为两种情况的解决方案,我想缩小道路.在理想情况下,它是上图中的红线.或者我想使用LSM进行线路检测(A x + B = 0)以优化处理时间.

我试过侵蚀图像 - 这是错误的方法.骷髅也不是正确的解决方案.

关于如何实现预期结果的任何想法(缩小道路)?或者针对这个问题的另一种方法的想法?

algorithm estimation computer-vision least-squares

6
推荐指数
1
解决办法
673
查看次数

OpenCV中的加权线性最小二乘法

OpenCV cvSolve可以解决这样的线性最小二乘问题:

// model: y = a1*x1 + a2*x2 + a3
CvMat *y = cvCreateMat(N, 1, CV_64FC1);
CvMat *X = cvCreateMat(N, 3, CV_64FC1);
CvMat *coeff = cvCreateMat(3, 1, CV_64FC1);

// fill vector y and matrix X
for (int i=0; i<N; ++i)
{
    cvmSet(y, i, 0, my_y_value(i) );
    cvmSet(X, i, 0, my_x1_value(i) );
    cvmSet(X, i, 1, my_x2_value(i) );
    cvmSet(X, i, 2, 1 );
} 

cvSolve(X, y, coeff, CV_SVD);
// now coeff contains a1, a2, a3
Run Code Online (Sandbox Code Playgroud)

但是,我想对我的数据点应用不同的权重.我如何应用权重?

c opencv least-squares

6
推荐指数
1
解决办法
4576
查看次数

Python/Scipy - 将optimize.curve_fit的sigma实现到optimize.leastsq中

我使用逻辑模型拟合数据点.由于我有时会有ydata错误的数据,我首先使用curve_fit及其sigma参数来包含我在拟合中的各个标准偏差.

现在我切换到了最小化,因为我还需要一些曲率拟合无法提供的拟合优度估计.一切都运作良好,但现在我错过了权衡最小平方的可能性,因为"sigma"与curve_fit有关.

有人一些代码示例关于我如何在最小方格中加权最小二乘?

谢谢,Woodpicker

python curve-fitting scipy least-squares

6
推荐指数
2
解决办法
2948
查看次数

最小二乘最小化复数

我一直在使用我的Matlab,但我的愿景是最终切换到用Python完成所有分析,因为它是一种实际的编程语言和其他一些原因.

我一直试图解决的最近问题是对复杂数据进行最小二乘最小化.我是一名工程师,我们经常处理复杂的阻抗,我正在尝试使用曲线拟合将简单的电路模型拟合到测量数据中.

阻抗方程如下:

Z(w)= 1 /(1/R + j*w*C)+ j*w*L.

然后我试图找到R,C和L的值,以便找到最小二乘曲线.

我已经尝试使用优化包,例如optimize.curve_fit或optimize.leastsq,但它们不适用于复数.

然后我尝试使我的残差函数返回复杂数据的大小,但这也不起作用.

python numpy curve-fitting scipy least-squares

6
推荐指数
2
解决办法
4188
查看次数

如何使用 scipy.optimize.least_squares 计算标准偏差误差

我将拟合与 optimize.curve_fit 和 optimize.least_squares 进行比较。使用曲线拟合,我将协方差矩阵 pcov 作为输出,我可以通过以下方式计算拟合变量的标准偏差误差:

perr = np.sqrt(np.diag(pcov))
Run Code Online (Sandbox Code Playgroud)

如果我使用least_squares 进行拟合,则不会得到任何协方差矩阵输出,并且无法计算变量的标准偏差误差。

这是我的例子:

#import modules
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.optimize import least_squares

noise = 0.5
N = 100
t = np.linspace(0, 4*np.pi, N)

# generate data
def generate_data(t, freq, amplitude, phase, offset, noise=0, n_outliers=0, random_state=0):
    #formula for data generation with noise and outliers
    y = np.sin(t * freq + phase) * amplitude + offset
    rnd = np.random.RandomState(random_state)
    error = …
Run Code Online (Sandbox Code Playgroud)

python scipy least-squares

6
推荐指数
2
解决办法
4405
查看次数

使用奇异值分解对 3D 点进行平面拟合

亲爱的 stackoverflow 用户,

我正在尝试计算由一组 3D 点定义的任意(但光滑)表面上的法线向量。为此,我使用平面拟合算法,该算法根据计算法向量的点的 10 个最近邻点找到局部最小二乘平面。

然而,它并不总能找到看起来最好的飞机。因此,我想知道我的实现或算法是否存在缺陷。我正在使用奇异值分解,正如我在有关平面拟合主题的几个链接中发现的推荐的那样。这是在我的机器上重现该行为的代码:

#library imports
import numpy as np
import math
import matplotlib.pyplot    as     plt
from   mpl_toolkits.mplot3d import Axes3D

#values used for best plane fit
xyz = np.array([[-1.04194694, -1.17965867,  1.09517722],
[-0.39947906, -1.37104542,  1.36019265],
[-1.0634807 , -1.35020616,  0.46773962],
[-0.48640524, -1.64476106,  0.2726187 ],
[-0.05720509, -1.6791781 ,  0.76964551],
[-1.27522669, -1.10240358,  0.33761405],
[-0.61274031, -1.52709874, -0.09945502],
[-1.402693  , -0.86807757,  0.88866091],
[-0.72520241, -0.86800727,  1.69729388]])

''' best plane fit'''
#1.calculate centroid of points and make points relative to it
centroid         = …
Run Code Online (Sandbox Code Playgroud)

plane least-squares python-2.7

6
推荐指数
1
解决办法
5892
查看次数

使用MATLAB优化工具箱进行最小二乘圆拟合

我想实现以下最小二乘圆拟合纸(抱歉,我不能发布).通过计算几何误差作为特定点(Xi)与圆上对应点(Xi')之间的欧氏距离(Xi''),本文指出我们可以拟合一个圆.我们有三个参数:Xc(坐标为圆心的矢量)和R(半径).

圆形配件 方程

我提出了以下MATLAB代码(注意我正在尝试拟合圆圈,而不是图像上显示的球体):

function [ circle ] = fit_circle( X )
    % Kör paraméterstruktúra inicializálása
    %   R  - kör sugara
    %   Xc - kör középpontja
    circle.R  = NaN;
    circle.Xc = [ NaN; NaN ];

    % Kezdeti illesztés
    % A köz középpontja legyen a súlypont
    % A sugara legyen az átlagos négyzetes távolság a középponttól
    circle.Xc = mean( X );
    d = bsxfun(@minus, X, circle.Xc);
    circle.R  = mean(bsxfun(@hypot, d(:,1), d(:,2)));
    circle.Xc = circle.Xc(1:2)+random('norm', 0, 1, size(circle.Xc));

    % Optimalizáció
    options = …
Run Code Online (Sandbox Code Playgroud)

matlab mathematical-optimization least-squares bsxfun

5
推荐指数
1
解决办法
7818
查看次数

R中非线性最小二乘内的样条

考虑R中的非线性最小二乘模型,例如以下形式:

 y ~ theta / ( 1 + exp( -( alpha + beta * x) ) )
Run Code Online (Sandbox Code Playgroud)

(我的真正的问题有几个变量,外部函数不是逻辑但更多涉及;这个更简单,但我想如果我能做到这一点,我的情况应该几乎立即跟随)

我想用(例如)自然三次样条替换术语"alpha + beta*x".

这里有一些代码用于在逻辑内部创建一些非线性函数的示例数据:

set.seed(438572L)
x <- seq(1,10,by=.25)
y <- 8.6/(1+exp( -(-3+x/4.4+sqrt(x*1.1)*(1.-sin(1.+x/2.9))) )) + rnorm(x, s=0.2 )
Run Code Online (Sandbox Code Playgroud)

如果我在lm中不需要逻辑,我可以轻松地用样条项替换线性项; 所以线性模型是这样的:

 lm( y ~ x ) 
Run Code Online (Sandbox Code Playgroud)

然后成为

 library("splines")
 lm( y ~ ns( x, df = 5 ) )
Run Code Online (Sandbox Code Playgroud)

生成拟合值很简单,并借助于(例如)rms包得到预测值似乎很简单.

实际上,将原始数据与基于lm的样条拟合拟合并不是太糟糕,但我有理由在逻辑函数中需要它(或者更确切地说,在我的问题中等效).

nls的问题是我需要为所有参数提供名称(我很高兴他们称之为(b1,...,b5)为一个样条拟合(并说c1,...,c6为另一个变量) - 我需要能够制作其中的几个).

是否有一种合理的方法来生成nls的相应公式,以便我可以用样条函数替换非线性函数内的线性项?

我能想到的唯一方法就是可以做到这一点有点尴尬和笨重,如果不编写一大堆代码就不能很好地概括.

(编辑以供澄清)对于这个小问题,我当然可以手工完成 - 写出由ns生成的矩阵中每个变量的内积的表达式,乘以参数的向量.但是,我必须为每个其他变量中的每个样条再次逐个编写整个项目,并且每次我更改任何样条曲线中的df时再次,并且如果我想使用cs而不是ns,则再次.然后,当我想尝试做一些预测(/插值)时,我们会得到一系列新的问题需要处理.我需要一遍又一遍地继续这样做,并且可能需要大量的结和几个变量,以便在分析后进行分析 - 我想知道是否有一种比写出每个单独术语更简洁,更简单的方法,无需编写大量代码.我可以看到一个相当牛逼的方式,这将涉及到相当多的代码,但是作为R,我怀疑有更简洁的方式(或更可能是3或4个更简洁的方式)只是躲避我.因此问题.

我以为我曾经看到有人在过去以相当不错的方式做过这样的事情,但对于我的生活,我现在找不到它; 我已经尝试了很多次来找到它.

[更具体地说,我通常希望能够尝试适合每个变量中的几个不同样条曲线 - 尝试几种可能性 - 以便看看我是否能找到一个简单的模型,但仍然适合这个目的是足够的(噪音真的非常低;合适的偏差可以达到很好的平滑效果,但只能达到一定程度).它更像是"找到一个漂亮的,可解释的,但足够的拟合函数",而不是任何接近推理和数据挖掘的东西都不是这个问题的真正问题.

或者,如果这比gnm或ASSIST或其他包装更容易,那将是有用的知识,但是关于如何继续上述玩具问题的一些指示将有所帮助.

r spline nonlinear-functions least-squares

5
推荐指数
1
解决办法
1230
查看次数

如何在r中设置异方差数据的加权最小二乘?

我正在对人口普查数据进行回归,其中我的因变量是预期寿命,我有八个自变量.数据汇总为城市,因此我有数千个观测值.

我的模型虽然有些异方差.我想运行加权最小二乘法,其中每个观测值都按城市人口加权.在这种情况下,这意味着我想通过人口平方根的倒数来加权观察.然而,我不清楚什么是最好的语法.目前,我有:

Model=lm(…,weights=(1/population))
Run Code Online (Sandbox Code Playgroud)

那是对的吗?或者应该是:

Model=lm(…,weights=(1/sqrt(population)))
Run Code Online (Sandbox Code Playgroud)

(我在这里发现了这个问题:加权最小二乘 - R但它没有说明R如何解释权重参数.)

regression r least-squares

5
推荐指数
1
解决办法
1万
查看次数

python中的最小二乘法

我有两个数据列表,一个是x值,另一个是y值.我怎样才能找到最合适的?我试过搞乱,scipy.optimize.leastsq但我似乎无法做到正确.

任何帮助是极大的赞赏

python math numpy scipy least-squares

5
推荐指数
1
解决办法
4761
查看次数