【问题标题】:Get homography matrix from rotation or orientation matrix从旋转或方向矩阵中获取单应矩阵
【发布时间】:2021-07-17 15:51:21
【问题描述】:

我在 Android 设备中获取旋转矩阵和方向(欧拉角)using a sensor。我想在opencv中使用这些进行仿射变换。仿射变换使用单应矩阵来完成它的工作。我的问题是如何将旋转矩阵或方向数组转换为可用于仿射变换的单应矩阵?

Android 代码获取旋转矩阵和方向:

final float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerReading, magnetometerReading);

final float[] orientationAngles = new float[3];
SensorManager.getOrientation(rotationMatrix, orientationAngles);

opencv 代码到仿射变换:

homographtMatrix = ... # to calc from rotation matrix or orientation angls
warped = cv2.warpPerspective(img, homographtMatrix, (cols, 600))

样本旋转矩阵:

[
    [-0.39098227, -0.24775778, 0.8864249], 
    [0.9200034, -0.07699536, 0.38427263], 
    [-0.026955934, 0.96575755, 0.2580418]
]

欧拉角示例:

[1.3097044  0.0269592  1.97264932]

图像将进行仿射变换:

所需的变换(从左边剪切没关系,我可以修复它):

然后我将在分段图像中平铺地板。

【问题讨论】:

  • 您想如何从 3d 旋转中扭曲 2d 图像?假设是什么?
  • 我想用分段图像替换 3d 旋转图像。现在我只需要来自旋转矩阵或方向的单应矩阵。 @米卡
  • 我编辑了@Micka 的帖子
  • 如果您能够从这些角度构建 3D 对象旋转 (R),则图像单应性将类似于 K^-1 * R * K 与 K = 相机内在函数。必须阅读/尝试哪些边必须倒置。
  • 对不起,没有 python 脚本。随意自己实现并添加答案。

标签: python android opencv computer-vision affinetransform


【解决方案1】:

单应矩阵是将世界中的一个点(Pw)投影到图像平面中的一个点(Px)的矩阵。例如:

Px = H . Pw

这可以通过original equation 来完成:

Px = K . (R . Pw + t)

K 是相机内参函数,由一个称为焦距 (f) 的数字和一个称为主点 (c) 的点创建,该点大部分时间都是图像的中心。

K = [
      [f, 0, cx],
      [0, f, cy],
      [0, 0, 1 ],
]

R 是 3d rotaion matrix。为了解释这一点,我们假设世界上的点 z = 0(位于 z 平面上)。要将其移动到相机坐标,应使用旋转矩阵。 z = 0 导致删除 R 矩阵的一列。点坐标到相机坐标的距离K,去掉一列R ant t 的组合称为单应矩阵。

TL;DR

数学概念很难理解。我从 github 找到了 an implementation 的相机校准,这使得投影变得容易:

import cv2
from vcam import vcam, meshGen

img = cv2.imread("chess.png")

c1.focus = 390
c1.sx = 101/100
c1.sy = 101/100
c1.KpCoeff[0] = 0
c1.KpCoeff[1] = 0
c1.KpCoeff[2] = 0
c1.KpCoeff[3] = 0

c1.set_tvec(0, 0, -500)
c1.set_rvec(0, 0, -180)

pts2d = c1.project(pts3d)
map_x, map_y = c1.getMaps(pts2d)
output = cv2.remap(img, map_x, map_y, interpolation=cv2.INTER_LINEAR)

它有一个有趣的 GUI 来测试它们如何影响输出的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2016-04-06
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多