估计两组二维点之间的比例、旋转和平移,例如多点触控手势或校准
nudged的Python项目详细描述
python库,用于估计两组二维点之间的比例、旋转和平移。例如,当一个人想要用多个手指移动物体,或者需要基于几个校准点校正来自眼睛跟踪器设备的大量点时,适用。通常,您可以在任何希望基于几个采样点移动多个点的情况下应用微移。
从数学上讲,微位移是affine transformation matrices的最优最小二乘估计量,具有均匀的标度、旋转和平移,并且没有反射或剪切。该估计具有O(^ {EM1}$nEEE>)的时间复杂度,其由^ {EM1} $ 6n+1 22 eEM>乘法和^ {EM1} $11n+19 eEE>加法组成,其中^ {EM1}$nEEE>是点集的基数(大小)。换言之,nudged在线性时间内解决了仿射二维到二维点集的配准问题。
也提供in JavaScript。
安装
$ pip install nudged
用法
您有要估计的转换函数的domain和range的点列表:
dom = [[0,0], [2,0], [ 1,2]] ran = [[1,1], [1,3], [-1,2]]
根据以下各点计算最佳变换:
trans = nudged.estimate(dom, ran);
将转换应用于其他点:
trans.transform([2,2]) # [-1,3]
要探索估计的转换,您可以:
trans.get_matrix() # [[0,-1, 1], # [1, 0, 1], # [0, 0, 1]] trans.get_rotation() # 1.5707... = π / 2 (radians) trans.get_scale() # 1.0 trans.get_translation() # [1, 1]
API
轻推估算(域,范围)
参数
- domain:点的列表
- range:点列表
domain和range的长度应该相等。允许不同的长度,但会忽略较长列表中的其他点。
return一个新的nudged.transform(…)实例。
估计误差(变换、域、范围)
计算给定变换后域的点对与范围之间的均方距离。如果使用给定的域和范围估计变换,则结果是估计的均方误差(mse)。
参数
- transform:anudged.transform实例
- domain:点的列表
- range:点列表
return浮点,范围与转换域点对之间的均方距离。
用法示例:
dom = [[0, 0], [1, 1], [2, 2]] ran = [[0,-1], [1, 2], [2,-1]] t = nudged.estimate(dom, ran) mse = nudged.estimate_error(t, dom, ran) # mse == 2.0
轻推版本
包含与setup.py中的版本相同的模块版本字符串。
轻推变换(s,r,tx,ty)
由nudged.estimate(…)返回的实例。
除了下面的方法之外,它还有定义augmented transformation matrix:
的属性s,r,tx,ty。|s -r tx| |r s ty| |0 0 1|
微移.变换变换(点)
return如果只给定一个点,则为转换点或单点的列表。例如:
trans.transform([1,1]) # [2,2] trans.transform([[1,1]]) # [[2,2]] trans.transform([[1,1], [2,3]]) # [[2,2], [3,4]]
轻推.transform获取矩阵()
return以下列表格式的3x3扩展转换矩阵:
[[s,-r, tx], [r, s, ty], [0, 0, 1]]
轻推.transform获取旋转(
return以弧度表示的旋转。
轻推.transform获取缩放(
return缩放倍增,例如0.333用于三倍收缩。
轻推.transform\get\u translation()
^ {STR 1 } $返回<强> ^ tT3}$,其中{tT4}$和^ {tT5}$表示相应于x轴和y轴的移动。
对于开发人员
按照说明安装pyenv <;http://sqa.stackexchange.com/a/15257/14918>;``然后运行快速测试:
^{公关九}$或者在tox.ini:
中对多个python版本进行全面测试$ eval "$(pyenv init -)" $ pyenv rehash $ tox