【问题标题】:View results of affine transform查看仿射变换的结果
【发布时间】:2012-10-24 13:03:16
【问题描述】:

我试图找出原因当我在 OpenCV 中对图像应用仿射变换时,它的结果在预览窗口中不可见,但整个窗口都是黑色的。如何找到解决此问题的方法这样无论应用什么变换,我都可以始终在窗口中查看变换后的图像(仿射变换的结果)?
更新:我认为这是因为所有的变换都是相对于坐标系的原点(图像的左上角)计算的。虽然对于旋转,我可以指定旋转的中心,并且我可以查看结果,但当我执行缩放时,我无法控制转换后的图像的去向。是否可以以某种方式移动坐标系以使图像适合窗口?

Update2:我有一张图像,其中某个位置仅包含 ROI(图像的其余部分为黑色),我需要对其应用一组仿射变换。为了让事情变得更简单并查看每个单独变换的效果,我一个一个地应用了每个变换。我注意到的是,每当我移动(平移)图像以使 ROI 的中心位于坐标系的中心(视图窗口的左上角)时,所有仿射变换都会在不移动的情况下正确执行。但是,通过在坐标系中心平移 ROI 的中心,ROI 的上半部分和左半部分仍然被切出当前视图窗口。 如果我将 ROI 的中心点移动到视图窗口中的另一个点(例如窗口中心),则类型为仿射变换: A=[a 0 0; 0 b 0](A是2x3矩阵,warpAffine函数的参数) 将图像 (ROI) 移动到视图窗口之外(如果 ROI 的中心位于左上角,则不会发生这种情况)。如何修改仿射变换以使图像不会移出其位置(与 ROI 中心位于坐标系中心时的行为相同)?

【问题讨论】:

  • 如果您希望能够应用任何仿射变换,您将无法始终查看它。一个更好的主意可能是手动将您的变换应用于正方形的 4 个角,然后查看这 4 个点最终的坐标。这将告诉您图像的去向。
  • 好的,但是如果我需要连续应用多个仿射变换怎么办?黑色图像的仿射变换是黑色图像。就好像信息被浪费了一样。就我而言,我需要转换后的图像进行进一步处理。如果我将仿射变换应用于正方形,我将如何计算新坐标,以便查看它们的位置?
  • 是的,您始终可以以某种方式移动坐标系,以使图像适合窗口。如果您想要一个好的答案,请添加细节。一个很好的问题可能是。 “我有这个形状(显示图像或指定坐标),当我对它应用这个缩放变换时,它会移出屏幕,我希望它在不移动的情况下就地缩放,我该如何修改这个变换来实现呢?”尽可能具体。
  • 感谢您的帮助,我修改了我的问题。希望现在清楚了。

标签: opencv affinetransform


【解决方案1】:

如果您希望能够应用任何仿射变换,您将无法始终查看它。一个更好的主意可能是手动将您的变换应用于正方形的 4 个角,然后查看这 4 个点最终的坐标。这将告诉您图像的去向。

如果您有多个变换,只需将它们组合成一个变换即可。如果你有 3 个变换

[A],[B],[C]

通过A,然后B,然后C变换图像相当于将图像变换一次

[C]*[B]*[A]

如果您的变换是 2x3 矩阵,只需添加

将它们转换为 3x3 矩阵
[0,0,1]

作为新的底行,然后将 3x3 矩阵相乘,完成后底行将保持不变,然后将其放下以获得新的组合仿射变换

更新 如果您想对对象应用变换,就好像该对象在其他地方一样。您可以组合 3 个变换。首先使用仿射变换 [A] 将对象转换到您想要转换的位置(在您的情况下为坐标系的中心)。然后应用您的缩放变换 [B],然后平移回到您开始的位置。翻译回来应该是[A]的倒数。这意味着您的最终转换将是

final_transform = [A].inv()*[B]*[A]

在进行矩阵乘法时,运算顺序从右到左。

【讨论】:

  • 谢谢,我知道我应该一起应用所有转换,但是如果它的结果​​不可见怎么办?转换后的图像丢失了吗?如果它没有丢失,那么我如何使用图像进行进一步处理?例如,如何找到我看不到的图像的 ROI?
  • 如果我对一个正方形应用仿射变换,它的新位置不会取决于应用的仿射变换吗?
  • 如果转换后的图像丢失了,那么我假设您应用了错误的转换,为什么要对图像应用转换以将图像完全移出屏幕?
  • 如果我应用相同的变换(在矩阵中具有相应的元素)并且对于一个图像,最终结果是可见的,而对于另一个则不是,那么仿射变换怎么会出错?这就是我想要理解的。
  • 现在我很困惑。相同的变换应该对相同大小的两个不同图像具有完全相同的效果。请澄清问题。也许添加图像?或者显示您正在使用的这些转换之一的值。清楚地说明您的目标并准确说明问题所在
猜你喜欢
  • 2018-09-07
  • 2010-12-17
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多