【问题标题】:How to find corresponding points in two images?如何在两张图像中找到对应点?
【发布时间】:2016-05-12 03:44:21
【问题描述】:

我正在处理图像配准。我正在使用 OpenCV。我有两个图像 I1(参考图像),I2(当前图像)。我确定它们之间的仿射运动,然后扭曲 I1 以查看它与当前图像 I2 对齐的程度。此时我有 3 个图像 I1、I1'(失真)和 I2。

现在我需要在当前图像 I2 上设置 4 个点(这是为了在 GUI 上显示)并且需要在初始参考图像 I1 上找到相应的 4 个点(在应用运动之前)。 GUI 突出显示了一些功能差异,需要在 I1 和 I2 上来回切换,以便用户了解差异。

这四个点基本上是图像中的任意矩形。例如:

cv::Point P1, P2, P3, P4;
P1.x = I2.cols / 4;
P1.y = I2.rows / 4;
P2.x = I2.cols * 3 / 4;
P2.y = I2.rows / 4;
P3.x = I2.cols * 3 / 4;
P3.y = I2.rows * 3 / 4;
P4.x = I2.cols / 4;
P4.y = I2.rows * 3 / 4;

我需要在参考图像 I1 上找到 P1、P2、P3、P4 的对应点。 关于如何使用 OpenCV 做到这一点的任何想法?还是有什么其他方式?

【问题讨论】:

  • 由于您从未告诉我们 I2 与 I1 的关系,我们无法帮助您进行转型。
  • I1 和 I2 是在不同时间拍摄的静态背景(白色或黑色背景)上相同信息的单色图像。

标签: c++ opencv image-processing


【解决方案1】:

你写的是你有仿射矩阵,它把 l1 扭曲到 l2。

您只需要通过invertAffineTransform 对仿射变换M 进行反演得到矩阵M'

然后将这个 2x3 矩阵 M' 应用于点:

(pseudocode)

P1_onL1 = M' * [P1.x, P1.y, 1].t()

其中 .t() 表示转置,因此需要将矩阵乘以列向量。

【讨论】:

  • 谢谢!我试试这个
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多