如何使用python进行坐标仿射变换?第2部分

2023-11-28

我有与这里描述的相同的问题:如何使用python进行坐标仿射变换?

我试图使用所描述的方法,但由于某些原因我会收到错误消息。 我对代码所做的更改是替换主系统和辅助系统点。我通过使用不同的原点创建了辅助坐标点。在我正在研究这个主题的实际情况中,测量坐标时会出现一些错误。

primary_system1 = (40.0, 1160.0, 0.0)
primary_system2 = (40.0, 40.0, 0.0)
primary_system3 = (260.0, 40.0, 0.0)
primary_system4 = (260.0, 1160.0, 0.0)

secondary_system1 = (610.0, 560.0, 0.0) 
secondary_system2 = (610.0,-560.0, 0.0) 
secondary_system3 = (390.0, -560.0, 0.0)
secondary_system4 = (390.0, 560.0, 0.0)

执行时出现的错误如下。

*Traceback (most recent call last):
  File "affine_try.py", line 57, in <module>
    secondary_system3, secondary_system4 )
  File "affine_try.py", line 22, in solve_affine
    A2 = y * x.I
  File "/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.py", line 850, in getI
    return asmatrix(func(self))
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 445, in inv
    return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 328, in solve
    raise LinAlgError, 'Singular matrix'
numpy.linalg.linalg.LinAlgError: Singular matrix*

可能是什么问题?


问题是你的矩阵是奇异的,这意味着它是不可逆的。既然你试图取它的逆,那就是一个问题。您链接到的线程是您问题的基本解决方案,但它并不是真正的最佳解决方案。您真正想要做的不仅仅是反转矩阵,而是解决最小二乘最小化问题,为可能存在噪声的数据找到最佳仿射变换矩阵。这样做的方法如下:

import numpy as np

primary = np.array([[40., 1160., 0.],
                    [40., 40., 0.],
                    [260., 40., 0.],
                    [260., 1160., 0.]])

secondary = np.array([[610., 560., 0.],
                      [610., -560., 0.],
                      [390., -560., 0.],
                      [390., 560., 0.]])

# Pad the data with ones, so that our transformation can do translations too
n = primary.shape[0]
pad = lambda x: np.hstack([x, np.ones((x.shape[0], 1))])
unpad = lambda x: x[:,:-1]
X = pad(primary)
Y = pad(secondary)

# Solve the least squares problem X * A = Y
# to find our transformation matrix A
A, res, rank, s = np.linalg.lstsq(X, Y)

transform = lambda x: unpad(np.dot(pad(x), A))

print "Target:"
print secondary
print "Result:"
print transform(primary)
print "Max error:", np.abs(secondary - transform(primary)).max()

原始矩阵是奇异的原因是您的第三个坐标始终为零,因此无法知道该坐标上的变换应该是什么(零乘以任何值都为零,因此任何值都可以工作)。

打印的值A告诉您最小二乘法发现的变换:

A[np.abs(A) < 1e-10] = 0  # set really small values to zero
print A

结果是

[[  -1.    0.    0.    0.]
 [   0.    1.    0.    0.]
 [   0.    0.    0.    0.]
 [ 650. -600.    0.    1.]]

这相当于x2 = -x1 + 650, y2 = y1 - 600, z2 = 0 where x1, y1, z1是原始系统中的坐标,x2, y2, z2是新系统中的坐标。正如您所看到的,最小二乘只是将与第三维相关的所有项设置为零,因为您的系统实际上是二维的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用python进行坐标仿射变换?第2部分 的相关文章

  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • Pandas DataFrame 具有 X、Y 坐标到 NumPy 矩阵

    我有一个包含列的 DataFrameX Y and value e g X Y value 1 1 56 2 1 13 3 1 25 1 2 7 2 2 18 1 123 91 50 123 32 我需要将其转换为 DataFrame 到
  • 来自 io.BytesIO 流的 numpy.load

    我将 numpy 数组保存在 Azure Blob 存储中 并将它们加载到如下所示的流中 stream io BytesIO store get blob to stream container cat npy stream 我知道从str
  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 更改 3D 图形颜色 (matplotlib)

    我使用以下代码在 matplotlib 中绘制了 3D 图形 Previously defines lists of data to plot fig plt figure ax fig add subplot 111 projection
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas
  • 在 python 中使用 pandas 计算行的出现次数

    我有一个包含数千行和 4 列的 pandas 数据框 IE A B C D 1 1 2 0 3 3 2 1 3 1 1 0 有没有办法统计某一行出现了多少次 例如 可以找到多少次 3 1 1 0 并返回这些行的索引 如果你只寻找一行 那么我
  • Numpy vectorize() 正在展平整个数组

    我的输入是一个 numpy 元组数组 values np array 4 5 2 18 4 7 3 8 我的功能如下 def outerFunc values print values def innerFunc values print
  • Numpy 安装运行时错误:工具链损坏:无法链接简单的 C 程序

    MacBook 空气 我花了一段时间尝试安装这个 首先 我无法使用 Homebrew 因为我安装了它 但随后 网络连接 断开 现在我的计算机找不到 brew 命令 但它说 homebrew 已安装 所以我不知道如何在不使用brew命令的情况
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 求列表中某列的总和,出现“TypeError:无法使用灵活类型执行reduce”

    所以我对 python 很陌生 并且已经搜索过这个答案 但大多数答案都超出了我的理解范围 我有一个这样的列表 right point point 1 76999998093 right fear fear 1 62700009346 rig
  • 将 2D 数组追加到 3D 数组,扩展第三维

    我有一个数组A有形状的 480 640 3 和一个数组B有形状 480 640 如何将这两个附加为一个具有形状的数组 480 640 4 I tried np append A B 但它不保留维度 而axis选项导致ValueError a
  • 将 scipy 稀疏矩阵的几行采样到另一个中

    如何对 scipy 稀疏矩阵的某些行进行采样 并从这些采样的行中形成一个新的 scipy 稀疏矩阵 例如 如果我有一个 10 行的 scipy 稀疏矩阵 A 并且我想创建一个新的 scipy 稀疏矩阵 B 其中 A 的第 1 3 4 行 该
  • 如何将平面上的 3D 点转换为 UV 坐标?

    我有一个 3d 点 定义为 x0 y0 z0 该点属于一个平面 定义为 a b c d normal a b c and ax by cz d 0 如何将 3d 点转换或映射为一对 u v 坐标 这一定是非常简单的事情 但我无法弄清楚 首先
  • 判断点是否在截锥体内

    我正在尝试找出确定一个点是否在截锥体内的最佳方法 我有一些工作 但不确定它是否太麻烦 也许我应该有一种更优雅 有效的方法来做到这一点 假设我想查明点 x 是否在截锥体内 一旦我知道了平截头体的 8 个点 4 个近点 4 个远点 的位置 我就
  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • 可以使用哪些技术来衡量 pandas/numpy 解决方案的性能

    Question 如何简洁全面地衡量下面各个功能的性能 Example 考虑数据框df df pd DataFrame Group list QLCKPXNLNTIXAWYMWACA Value 29 52 71 51 45 76 68 6

随机推荐

  • 数据库中的继承?

    有没有办法在数据库中使用继承 特别是在 SQL Server 2005 中 假设我有很少的领域创建于 由 制作我想将其添加到我的所有实体中 我正在寻找一种替代方法 而不是将这些字段添加到每个表中 SQL Server 2005 中的表之间不
  • 将复杂对象存储在 TempData 中

    我一直在尝试使用 TempData 在重定向后将数据传递给操作 如下所示 if ModelState IsValid TempData ErrorMessages ModelState return RedirectToAction Pro
  • StdAfx + 头文件 - MFC 应用程序中的包含顺序

    我正在使用 Visual Studio 2005 我创建了一个基于 MFC 的控制台应用程序 名为 StdAfx dependency IDE 为我创建了以下文件 资源 h StdAfx 依赖项 h stdafx h StdAfx 依赖项
  • 调用 EditorFor(...) 时隐藏公共属性的编辑器标签?

    打电话时Html EditorFor m gt m where m是具有公共属性的公共类 隐藏输入和一个标签显示带有以下属性的属性 HiddenInput 属性 如何隐藏标签而不将其设为私有或创建编辑器模板 Example public c
  • 使用Object.create(null)创建JS对象和{}一样吗?

    我知道很多创建 JS 对象的方法 但我不知道Object create null s one 问题 它是否与以下完全相同 var p vs var p2 Object create null 它们并不等同 constructor proto
  • MySQL:将另一个表中的值插入到一列中

    我想使用 MySQL 将项目从一个表移动到另一个表中 这是我目前使用的 INSERT INTO items rooms item id room id x y n SELECT id room id x y z FROM items pho
  • 从三个 1D numpy 数组填充 2D numpy 数组

    是否有一种有效的方法可以在不使用循环的情况下从未排序的坐标点 即并非所有经度和 或纬度都升序或降序 创建值的二维数组 示例数据 lats np array 45 5 45 5 45 5 65 3 65 3 65 3 43 2 43 2 43
  • Chrome Devtools 专用 Node.js 检查器不会在断点处停止

    有几篇关于这个问题的旧帖子 但从 2013 年和 2014 年提出的问题来看 其中的答案对我的情况没有帮助 我有debugger关键字放置在我的文件中的多个位置 甚至在检查器 UI 中添加了手动断点 尽管如此 执行该文件不会在任何断点处停止
  • 使用 node.js 监视文件夹的更改,并在更改时打印文件路径

    我正在尝试编写一个 node js 脚本来监视文件目录中的更改 然后打印更改的文件 如何修改此脚本 以便它监视目录 而不是单个文件 并在目录中的文件名称发生更改时打印它们 var fs require fs sys require sys
  • 平衡拼接图像之间的对比度和亮度

    我正在从事一个图像拼接项目 并且我知道处理图像的对比度和亮度有不同的方法 我当然可以在缝合图像之前处理这个问题 但结果并不像我希望的那样一致 所以我的问题是 在拼接完成后是否有可能 平衡 或更确切地说 均衡 彩色图片的对比度和亮度 您希望不
  • ArrayList 限制保存 10 个值

    我正在使用一个ArrayList在我的代码中 它由一个填充EditText领域 但我想限制ArrayList所以它只能保存 10 个值 添加 10 个值后 如果另一个值尝试添加 我只需要它不添加到Array 有人知道如何做到这一点吗 pri
  • 在什么情况下应该使用实例变量而不是其他变量类型?

    我正在使用 Ruby on Rails 3 我想知道在什么情况下应该使用实例变量而不是其他变量类型 以及是否存在安全原因 Example Using an instance variable accounts Account find Us
  • Windows 下 GNU C/C++ 的内存泄漏检测 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 哪些内存泄漏检测工具可用于 Windows 上的开源 C C 我一直在使用 VLD 视觉检漏仪 有时 它对于好的代码和更复杂的代码都效果很好 它并不完美
  • C# 中的批量更新

    为了在数据库中插入大量数据 我曾经将所有插入信息收集到一个列表中 并将该列表转换为DataTable 然后我通过以下方式将该列表插入数据库SqlBulkCopy 我将生成的列表发送到哪里LiMyList其中包含我要插入数据库的所有批量数据的
  • 删除数据帧行的简单方法对没有行匹配删除条件的实例具有鲁棒性

    R 中数据操作的一项常见任务是通过删除与特定条件匹配的行来对数据帧进行子集化 然而 在 R 中执行此操作的简单方法在逻辑上似乎不一致 对于没有经验的人 例如我自己 来说甚至是危险的 假设我们有一个数据框 我们想要排除属于 G1 处理的行 T
  • 适合特定宽度的字符串长度

    我确信我错过了一些明显的东西 我有一个我打算在其中绘制文本的区域 我知道它 区域 的高度和宽度 我想知道宽度可以容纳多少个字符 单词 最好是字符 第二个问题 如果该行太长 我想绘制第二条线 所以我想我还需要获取文本的高度 包括它认为正确的垂
  • AutoIt 类似于 Java 的 GUI 自动化工具 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要对我的模块插入的软件进行自动化 UI 测试 我无权访问主机的代码 所以我需要像 AutoIt 这样的东西 由于 AutoIt 不能与 Swin
  • ArraySegment 类有什么用?

    我刚刚遇到ArraySegment
  • 标记未出现在传单中的连续世界上

    当我设置选项时continuousWorld true标记不会显示在克隆图块上 仅显示在主世界上 这是设计好的行为吗 可能是其他选项 我没有注意到 来显示这些标记的存在 UPD My aim to repeat markers on eve
  • 如何使用python进行坐标仿射变换?第2部分

    我有与这里描述的相同的问题 如何使用python进行坐标仿射变换 我试图使用所描述的方法 但由于某些原因我会收到错误消息 我对代码所做的更改是替换主系统和辅助系统点 我通过使用不同的原点创建了辅助坐标点 在我正在研究这个主题的实际情况中 测