小编lim*_*i44的帖子

直接椭圆拟合后椭圆系数的非标准化

我试图理解由Fitzgibbon,Pilu和Fisher(由Halir和Flusser改进)开发的直接最小二乘椭圆拟合算法中的归一化和"非标准化"步骤.

编辑:关于理论的更多细节补充.特征值问题是否源于混淆?

简短理论:

椭圆由隐式二阶多项式(一般圆锥方程)表示:

椭圆

哪里:

vector_a
vector_x

要将此一般圆锥约束为椭圆,系数必须满足二次约束:

约束

这相当于:

equivconstraint

其中C是零的矩阵,除了:

C13
C22
C31

设计矩阵D由所有数据点x sub i组成.
DMAT
喜

圆锥和数据点之间距离的最小化可以用广义特征值问题表示(某些理论已被省略):

EIG

表示:

SMAT

我们现在有了这个系统:

分散
equivconstraint

如果我们求解该系统,则对应于单个正特征值的特征向量是正确答案.

代码:

这里的代码片段直接来自作者提供的MATLAB代码:http: //research.microsoft.com/en-us/um/people/awf/ellipse/fitellipse.html

数据输入是一系列(x,y)点.通过减去平均值并除以标准偏差来归一化这些点(在这种情况下,计算为范围的一半).我假设这种规范化允许更好地拟合数据.

% normalize data
% X and Y are the vectors of data points, not normalized
mx = mean(X);
my = mean(Y);
sx = (max(X)-min(X))/2;
sy = (max(Y)-min(Y))/2; 

x = (X-mx)/sx;
y = (Y-my)/sy;

% Build design matrix
D = [ x.*x  x.*y  y.*y  x  y  ones(size(x)) ];

% Build scatter matrix
S = D'*D;   %'

% Build …
Run Code Online (Sandbox Code Playgroud)

matlab normalization linear-algebra least-squares

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

使用 KeyboardInterrupt 终止子进程

我正在使用 Python 使用 subprocess 模块调用 C++ 程序。由于程序需要一些时间来运行,我希望能够使用 Ctrl+C 来终止它。我在 StackOverflow 上看到了一些关于此的问题,但似乎没有一个解决方案对我有用。

我想要的是在 KeyboardInterrupt 上终止子进程。这是我拥有的代码(类似于其他问题中的建议):

import subprocess

binary_path = '/path/to/binary'
args = 'arguments' # arbitrary

call_str = '{} {}'.format(binary_path, args)

proc = subprocess.Popen(call_str)

try:
    proc.wait()
except KeyboardInterrupt:
    proc.terminate()
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行它,代码会挂起,等待进程结束并且永远不会注册 KeyboardInterrupt。我也尝试了以下方法:

import subprocess
import time

binary_path = '/path/to/binary'
args = 'arguments' # arbitrary

call_str = '{} {}'.format(binary_path, args)

proc = subprocess.Popen(call_str)
time.sleep(5)
proc.terminate()
Run Code Online (Sandbox Code Playgroud)

此代码片段在终止程序时工作正常,因此问题不是发送到终止的实际信号。

如何更改代码以便子进程可以在 KeyboardInterrupt 上终止?

我正在运行 Python 2.7 和 Windows 7 64 位。提前致谢!

我尝试过的一些相关问题:

Python子进程Ctrl+C

在 KeyboardInterrupt 后杀死 subprocess.call

当python进程被杀死时杀死子进程?

python windows subprocess interrupt terminate

4
推荐指数
1
解决办法
5110
查看次数