问题标签 [affinetransform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1286 浏览

java - Java,假3D效果

如何在下面的图片上使用AffineTransform或其他东西达到效果AffineTransform?或者我可以在 Java 中使用的任何其他效果/转换BufferedImage

在此处输入图像描述

0 投票
2 回答
4461 浏览

python - numpy/scipy 中的快速 2D 刚体转换

我想将刚体变换应用于大量 2D 图像矩阵。理想情况下,我希望能够提供一个仿射变换矩阵,同时指定平移和旋转,一次性应用它,然后对输出进行三次样条插值。

不幸的是,似乎affine_transforminscipy.ndimage.interpolation不做翻译。我知道我可以使用 and 的组合shiftrotate但这有点混乱,并且涉及多次插值输出。

我也尝试过使用这样的泛型geometric_transformation

这可行,但速度非常慢,因为它本质上是在像素坐标上循环!有什么好方法可以做到这一点?

0 投票
1 回答
3277 浏览

c++ - 使用单应性围绕 x/y 轴旋转

该项目

我正在为移动设备开发纹理跟踪项目。它专门跟踪平面,所以我一直在使用 openCV 的 cv::FindHomography() 来计算两帧之间的单应性。然而,该功能运行非常缓慢,是我管道中的主要瓶颈。我决定可以对单应性进行初始估计的算法运行得更快,因为我在帧之间的单应性变化非常小。此外,我的异常值百分比非常小,因此稳健的方法是可选的。不幸的是,据我所知,open CV 不包括进行初步估计的单应性查找器。然而,它确实包含solvePnP(),它获取场景的原始3d 世界坐标、当前2d 图像坐标、相机矩阵、失真参数,最重要的是初始估计。我正在尝试用solvePnP替换FindHomography。由于我在整个管道中仅使用 2d 坐标,并且 solvePnP 要求提供 3d 坐标,因此我试图从 2d->3d->3d_transform->2d_transform 移动。现在,如果给定一个好的初始猜测,但它有问题,该过程的运行速度比 FindHomography() 快 6 倍。

问题

我的转换方式有问题。我的理论是,由于不需要相机矩阵来找到单应性,因此此过程不需要它,因为我只想要最终包含在单应性中的信息。我还假设,由于我最终丢弃了所有 z 信息,因此我如何初始化 z 应该无关紧要。我的流程如下

首先,我将所有初始 2d 坐标转换为 3d,方法是给它们 1 的 az pos。我可以假设我的原始坐标平放在 xy 平面上。然后

此处转换为单应性很简单。单应性的前两列来自 3x3 旋转矩阵,最后一列是平移向量。一个技巧是单应性(2,2) 对应于比例,而 pnp_tran(2) 对应于 z 轴上的移动。鉴于我将 z 坐标初始化为 1,比例为 z_translation + 1。此过程适用于 6 个自由度中的 4 个。Translation_x、translation_x、缩放和围绕 z 的旋转都有效。然而,关于 x 和 y 的旋转显示出明显的错误。我相信这是由于在 z = 1 处初始化了我的点,但我不知道如何解决它。

问题

我假设我可以通过使用伪造的相机矩阵和初始 z 坐标从 solvePnP 中获得良好的结果吗?如果是这样,我应该如何设置我的相机矩阵和 z 坐标以使 x 和 y 旋转工作?此外,如果有人知道我在哪里可以获得一个单应性查找算法,该算法需要初始猜测并且只能在 2d 中工作,或者有关编写我自己的技术的信息,这将非常有帮助。一旦我开始工作,我很可能会朝着这个方向前进。

更新

我自己构建了一个测试程序,它采用单应性,从该单应性生成一组共面点,然后通过solvePnP运行这些点以恢复指定的单应性。在这样做的过程中,我意识到我从根本上误解了单应性是如何构建的某些部分。我一直假设单应性构造如下。

我假设的前两列是 3x3 旋转矩阵的前两列。这基本上相当于进行 3x4 变换并丢弃列 (2)。然而,我发现这不是真的。向我展示我的方式错误的测试用例试图制作一个单应性,它将点围绕 y 轴旋转一些小角度。

上面的单应性根本不起作用。以 x > 58 的点 x,y,1 为例。结果将是 x,y,some_negative_number。当我从齐次坐标转换回笛卡尔坐标时,我的 x 和 y 值都会翻转符号。

也就是说,我现在有一个更简单的问题,我认为它可以让我解决所有问题。如何构建一个单应性,将点围绕 x 和 y 轴旋转某个角度?

0 投票
2 回答
177 浏览

java - Java2D API 中的转换

我正在尝试测试与 Rectangle2D.Float 和 Point2D.Float 的碰撞。我有一个包含相机的 2D 世界(它根据相机的 AffineTransform 转换 graphics2D 画布)。然后我有一个包含子对象 Y 的对象 X 的列表。画布在相机转换为 X 的 AffineTransformation 的基础上进行转换,因此对象被渲染在正确的位置。我可以成功测试与对象 X 内的鼠标的碰撞,但我在测试子对象 Y 时遇到问题,因为 Y 对象“认为”它们位于位置 (0,0),即使它们位于其他位置,因为他们的父对象 X 被重新定位为 (200,200)。所以换句话说,对象 X 和 Y 出现在位置 (200,200),但碰撞发生在 (0,0) 而不是 (200,

我相信这与调用 AffineTransform.transform 和 AffineTransform.inverseTransform 的正确组合有关,但我无法将我的大脑包裹在正确的组合上。

0 投票
1 回答
775 浏览

opencv - 在 C++ 中使用 OpenCV 计算仿射运动模型系数

为了正确表示摄像机运动特征,我必须在视频中找到不同的摄像机操作(例如缩放、平移、旋转和倾斜)。这些相机操作可以通过基于精细运动模型的系数设置阈值来确定。
参考: 用于 MPEG 视频索引的高效摄像机运动表征

下面是运动向量 (u,v) ,一个 2 x 1 矩阵表示为宏块 (x, y) 的位置,一个 2x1 矩阵。(a1, a4) 是另一个 2x1 矩阵, (a2, a3, a, a6) 是一个 2x2 矩阵。

所以我的问题是可以使用哪些 OpenCV API/函数来确定这些参数。谢谢

0 投票
3 回答
1842 浏览

java - 无法获取我的坐标 graphics2D mouseclick java

我有一个扩展JLabel类,我使用下面的代码绘制我的地图:这new AffineTransform()是留下我的图像的身份(0,0,w,h)

现在,当我单击我的JLabel使用此事件时:

我想检索我尝试过的新坐标“缩放、旋转...坐标”

但是 ptDst 与(缩放,旋转,..)坐标不同,请帮助!

0 投票
0 回答
389 浏览

java - 创建具有平移和缩放以及用户交互支持的图像查看画布

我正在创建一个类似于 Adob​​e Illustrator 的程序,但要简单得多,并且生成代码而不是图像。

我遇到的问题是 AffineTransform 无法正常工作。很可能是因为误用。是的,我知道有很多 AffineTransform 线程,但它们不能回答我的问题。

目前我正在尝试使用三个变量(scale、centerX、centerY)来控制图像的查看。centerX 和 centerY 是相对于图像的,而不是屏幕坐标。它们的目的是使放大和缩小从 JPanel 的中心而不是左上角。

我已经进行了几次不同的尝试以非常接近,但对于我正在做的事情还不够准确。完成此操作后,我不知道如何处理用户交互,因为 AfflineTransform.createInverse() 会引发 NoninvertibleTransformException。这方面的建议也很好。

我已经尝试了很多没有配置,但没有运气。这是我最后的方法,也许可以让您了解我正在尝试做的事情。

我希望我能很好地解释自己。这个 AffineTransform 的东西让我很困惑,我几乎无法解释我正在尝试做什么。

0 投票
2 回答
10412 浏览

java - AffineTransform.rotate() - 我如何同时移动、旋转和缩放?

我有以下代码(第一部分)我想要绘制一个带有一些棋子的棋盘。

也就是说,它获取一个棋子的图像和图像的高度,它将该图像的绘图转换为棋子所在的正方形,并将图像缩放到正方形的大小。

假设我想将黑色部分旋转 180 度。我希望在某个地方有类似的东西:

但我不知道该放什么作为 X 和 Y。如果我什么都不放,图像会很好地围绕其棋盘正方形的 0,0 点旋转,将棋子倒置在正方形的东北方它应该是。我已经猜到了 x,y 的各种其他组合,但还没有运气。

我已经在使用平移将块放在正确的正方形中,旋转变换需要另一个 x,y 围绕它旋转东西,但我不知道如何告诉变换围绕一个 x,y 旋转块并写图像到不同的 x,y。有人可以帮助我了解旋转参数,或者指出一些解释这些事情如何工作的东西吗?我发现了一些不能解释它们如何工作的例子,到目前为止我还没有想出如何根据我的情况改变它们......


主要编辑:添加工作代码。抱歉,我不知道如何发布图片,请替换您自己的图片。

当我运行以下命令时,我得到一个 2x2 棋盘,左上角有一个车,右下角有一个马。

如果我进入 SmallChessboardComponent 并从第一个旋转变换语句中删除注释 delims,我将把车倒置在原来的位置,而骑士不会出现。如果我改为从第二个转换语句中删除注释 delims,则根本不会出现任何一块。

我正在寻找一种方法将这些碎片倒置在它们无论如何都会出现的广场上。我想把每一块都画到板上;我不想要翻转电路板的代码。

主程序:

棋盘类:

棋盘组件类:

片断.java

和 PieceImages.java

0 投票
2 回答
1821 浏览

c++ - 测试opencv warpAffine异常值的数量

我正在使用 opencv 来估计两个图像之间的仿射变换(我们称之为 A 和 B,我想从 A 估计到 B),我需要实现 RANSAC 以获得可能的最佳估计。到目前为止,我的 RANSAC 框架(考虑到我已经有了两个图像的关键点以及它们之间的匹配):

1:选择3个随机匹配,将A和B的匹配点作为getAffineTransform函数的输入;

2:使用函数warpAffine对A的点进行warp,并将结果与​​B的点进行比较,得到异常值率:e;

3:考虑到我的样本大小是 3 个点(getAffineTransform 需要 3 个点才能找到变换),并且我有异常值 e 的比率,我可以找到我需要运行 RANSAC 的次数才能找到一个很高的概率好的估计,是N次;

4:重新运行第 1 步和第 2 步 N 次,保持具有最小异常值率的变换;

虽然基本的想法似乎很好,但我在执行时遇到了一些问题,特别是第 2 步。我的问题是,我不确定如何测试异常值的数量。我考虑过使用 warpAffine 将 A 的点映射到 B,但我几乎可以肯定它不会起作用,因为我相信该函数会解释我的点垫(这是一个 Mx2 垫,M 是点数,每个将点的坐标 x 和 y 列为图像,而不是我要映射的一组点。我怎样才能做到这一点?

我正在使用带有 c++ 的 opencv 2.4.2。

0 投票
0 回答
345 浏览

objective-c - 根据边界框扭曲顶点(多边形)数组

我在 Objective-C 中工作,并将我的顶点存储在一个 NSArray 中。

我有一个带有边界框的二维顶点数组,我称之为“多边形”。

我想根据我如何移动边界框的角点来扭曲整个多边形。我想我必须根据我拖动的角计算一些比例。但是,我不知道从哪里开始计算,以及是否有一个简单快速的算法。我不想使用外部库,直接在我的程序中执行计算。

这里的图像是通过使用图像软件“扭曲”功能产生的,这正是我想要的。如果在位图图像上是可能的,我想在任何点矩阵上都是可能的。

歪曲