如果相机平移也在 Z 方向,单应性在平面场景的两个图像之间是否成立?

2024-04-27

我正在尝试计算两个图像之间的相对姿势:并且我正在使用单应性来过滤特征匹配。我有一个相当平面的场景,只要两个图像之间的平移仅限于 X 和 Y 轴(opencv 约定),基于单应性的相对姿态估计就可以非常准确地工作。

一旦我开始使用另一个相机沿 Z 方向移动(第一个相机保持不变),相对姿势估计就无法正常工作,它会继续以非常低的 Z 平移估计姿势。尽管场景是平面的,但当沿 Z 方向平移时,单应性是否不适用?

在这里附上一张图片:我将第二个相机移动到两个正方形中:一个在 XY 平面上,一个在 XZ 平面上。红十字是相机平移的实际姿势(将其视为地面实况),蓝色圆圈是通过基于单应性的 RANSAC 估计的相对姿势。请注意 X 和 Y 方向移动时的精度,以及 Z 方向上的完全失败:所有估计值都接近 z=0 平面。

我将单应矩阵分解为旋转和平移的代码取自这个 StackExchange 答案 https://dsp.stackexchange.com/a/2571/25498

void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1));
    float tnorm = (norm1 + norm2) / 2.0f;

    Mat v1 = H.col(0);
    Mat v2 = pose.col(0);

    cv::normalize(v1, v2); // Normalize the rotation

    v1 = H.col(1);
    v2 = pose.col(1);

    cv::normalize(v1, v2);

    v1 = pose.col(0);
    v2 = pose.col(1);

    Mat v3 = v1.cross(v2);  //Computes the cross-product of v1 and v2
    Mat c2 = pose.col(2);
    v3.copyTo(c2);      

    pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}

这准确吗?单应性矩阵的第三列是否编码完整的 3D 翻译?


尽管场景是平面的,但当沿 Z 方向平移时,单应性是否不适用?

  • 如果你有一个平面场景all它的图像使用 透视相机(无镜头畸变)将与以下关系相关: 同形异义词。这与相机是否旋转或 翻译。

  • 如果存在明显的镜头畸变,则图像将不会 通过同形异义相关。

  • 如果场景是非平面的,那么图像将通过以下方式关联 仅当没有镜头畸变且没有相机平移(仅旋转)时才单应性。

相对位姿估计无法正常工作,它一直以非常低的 Z 平移来估计位姿

使用单应性分解计算的 3D 平移是符合比例的。这意味着返回的平移向量t两个相机之间的平移与真实平移存在比例因子的差异s。很遗憾s是不可恢复的。通常,单目图像的 3D 重建称为metric为此原因进行重建(而不是欧几里得解决了真实比例的重建)。解决s还需要更多信息,例如了解平面上某个点的深度或相机在图像之间移动的距离。

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

如果相机平移也在 Z 方向,单应性在平面场景的两个图像之间是否成立? 的相关文章

  • CustomVision:操作返回无效状态代码:“NotFound”

    我正在使用 NuGet 包Microsoft Cognitive CustomVision Prediction版本1 2 0 我创建了 1 个试验项目并用一些图像对其进行了训练 现在 当我尝试使用 API 调用 API 进行预测时Pred
  • 如何在Python中的二值图像上使用kmeans聚类?

    我试图对两个不同的人采取二元面具 其他一切都是黑色的 现在我想使用将每个人分组到他们自己的集群中K means这样我最终就可以在它们周围绘制边界框 这是我到目前为止的代码 def kmeans img k values range 1 5
  • 使用高斯混合模型进行皮肤检测

    我正在根据以下进行皮肤检测算法本文 http www cc gatech edu rehg Papers SkinDetect IJCV lowres pdf 第 21 页有两个模型 高斯皮肤混合模型和非皮肤颜色模型 第一个皮肤检测模型效果
  • 将四边形(四边形)拟合到斑点

    应用不同的过滤和分割技术后 我最终得到如下图像 我可以访问一些轮廓检测函数 这些函数返回该对象边缘上的点列表 或者返回一个拟合的多边形 尽管有很多边 远多于 4 个 我想要一种将四边形适合该形状的方法 因为我知道它是应该是四边形的鞋盒的正面
  • 在 TensorFlow 中将多个字节读取到单个值中

    我尝试以 TensorFlow 中 cifar10 示例中描述的类似方式读取标签 label bytes 2 it was 1 in the original version result key value reader read fil
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • 如何在opencv python中为图像添加边框

    如果我有如下图所示的图像 如何在图像周围添加边框 以便最终图像的整体高度和宽度增加 但原始图像的高度和宽度保持在中间 下面的代码添加了一个大小恒定的边框10像素到原始图像的所有四个边 对于颜色 我假设您想要使用背景的平均灰度值 这是我根据图
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • HoughLinesP后如何合并线?

    My task is to find coordinates of lines startX startY endX endY and rectangles 4 lines Here is input file 我使用下一个代码 img c
  • 相机校准:如何正确进行

    我正在尝试使用棋盘格通过众所周知的张氏方法进行校准 然后进行捆绑调整 该方法在 Matlab 和 OpenCV 中都可用 有很多经验指南 但从我个人的经验来看 准确性是相当随机的 它有时可能非常好 但有时也可能非常糟糕 实际上 只需将棋盘放
  • 在 opencv 中一次性将旋转和平移结合起来

    我有一段用于旋转和平移图像的代码 Point2f pt 0 in rows double angle atan trans c trans b 180 M PI Mat r getRotationMatrix2D pt angle 1 0
  • Pytorch TypeError:eq() 收到无效的参数组合

    num samples 10 def predict x sampled models guide None None for in range num samples yhats model x data for model in sam
  • 去除图像背景并提取图像中的对象

    I know that there are many threads here about this issue but I m not able to solve my problem with those answers I tried
  • 结果显示图像上有衬里

    我正在使用 opencv 和 android ndk 下面是我的 jni 代码 void Vignete Mat img1 Mat img2 Mat out resize img1 img1 img2 size img1 convertTo
  • 如何下载和使用对象检测数据集(例如 coco 或 pascal)

    我对物体检测领域非常陌生 我想知道是否有人可以帮助我下载和使用对象检测数据集 例如 coco 或 pascal 当我下载数据集后访问他们的网站时 我觉得我不知道应该如何处理它们 我知道这个问题很愚蠢 但是开始的提示可能非常有用 谢谢 我正在
  • 边缘检测和透明度

    使用在一致背景下拍摄的服装图像 我希望使图像中除服装之外的所有像素都透明 解决这个问题的最佳方法是什么 我研究了这个常见的算法和开源库opencv http opencv willowgarage com wiki 除了自己动手或使用 op
  • 使用 ImageMagick 有效地将线扫描图像拼接在一起

    我正在寻找线扫描相机的替代品 用于体育计时 或者更确切地说 用于需要确定位置的部分 我发现普通工业相机可以轻松与商业相机解决方案的速度相匹配 每秒 gt 1000 帧 对于我的需求来说 通常计时的准确性并不重要 重要的是运动员的相对位置 我

随机推荐

  • 为什么 Google 使用内联 JavaScript 和 CSS? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何通过 CSharp 以编程方式设置输入元素的值?

    你好 我正在尝试让 IE 自动登录网站 但问题是输入元素没有 HTML ID 属性 例如
  • Grid.Mvc.Ajax扩展网格初始化

    您好 我对使用 JQuery 和 Ajax 的 Web GUI 开发非常陌生 我正在尝试让 nuget 包 Grid MVC Ajax 正常工作 自述文件指出以下内容 Follow thse steps to use Grid Mvc Aj
  • Eclipse CDT 内置包含目录

    Under Eclipse CDT gt Project Settings gt C C General gt Paths and Symbols gt Includes gt GNU C 有一个包含路径的列表 有些是粗体的并且是特定于项目
  • 迁移到 Qt6/PyQt6:Qt5 中所有已弃用的短格式名称是什么?

    我正在尝试从以下位置迁移代码库PyQt5 to PyQt6 我读过这篇文章 参见https www pythonguis com faq pyqt5 vs pyqt6 https www pythonguis com faq pyqt5 v
  • 一个电子邮件地址中可以有多少个@符号?

    是否有任何规则要求在任何电子邮件 ID 中包含指定数量的 符号 如果我们要使用 PHP 检查电子邮件 ID 是否有效 我就会想到 如果引用多个 被允许 我必须问你为什么需要这些信息 拜托拜托please不要尝试编写正则表达式 函数或其他任何
  • 最好的分布式暴力对抗措施是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 首先 有一点背景知识 众所周知 我正在为 CodeIgniter 实现一个 auth auth 系统 并且到目前为止我正在获胜 可以这么说 但我
  • 请解释为什么以及如何 +new Date();在 IE8 或更低版本中作为 Date.now() 的“解决方法”

    我正在看书 面向 Web 开发人员的专业 JavaScript 给出有关此问题的背景信息 特别是有关引用类型的第 5 章 我想知道为什么以及如何var start new Date 用于获取 now 的当前毫秒表示 作为不支持 ECMASc
  • 从 Google AppEngine 切换到另一台服务器

    目前 我正在 Google AppEngine GAE 上构建我的 Java Web 应用程序 但由于它们有很多限制 我担心我必须从 GAE 切换到运行 Glassfish 或如果需要 我可以设置任何其他服务器 我还计划运行 Oracle
  • 为什么我不能返回通用“T”来满足 Partial

    我用 TypeScript 写了一些代码 type Point x number y number function getThing
  • 所有原始包装类都是不可变对象吗?

    Java 中的所有原始包装类都是不可变对象吗 字符串是不可变的 其他不可变对象是什么 Any type which doesn t give you any means to change the data within it is imm
  • 使用 Bash 比较 PHP 版本号?

    我有这个脚本 应该确保用户当前的 PHP 版本在某个范围内 尽管它应该可以工作 但某个地方有一个错误 使它认为版本超出范围 有人可以看一下并告诉我我能做什么来解决它 function version echo gawk F printf d
  • SVG 元素绕圆旋转

    所以我有一个 SVG 元素 大圆圈 和里面的一组元素 我想围绕这个大圆圈旋转这些元素 代码非常简单 但我已经开始担心如何在正确的路径 大圆圈 上设置这个圆圈 graph skils 正如您在下面的链接中看到的 这个小圆圈在大圆圈上旋转不正确
  • 调试严重的 SIGILL 崩溃:文本段损坏

    我们的系统是基于 PowerPC 的运行 Linux 的嵌入式系统 我们遇到了随机的 SIGILL 崩溃 这种情况在各种应用程序中都会出现 崩溃的根本原因是将要执行的指令归零 这表明内存中的文本段已损坏 由于文本段是以只读方式加载的 因此应
  • openpyxl 图表误差线样式

    我被分配了一项 简单 的任务 即将一系列数据列收集到结果工作簿中 结果工作簿包含分析结果所需的公式和图表 这些数据是由我用 python 编写的图像分析应用程序生成的 作为一系列 Excel 工作簿 现在的问题是 openpyxl 会删除
  • 如何验证当前用户 ASP.net mvc Identity

    当用户访问我的网站时 他们会看到登录页面 一旦他们成功登录 他们就可以注销并且其他用户可以登录 但是 如果用户在登录时单击后退按钮 则会转到登录页面 此时新用户无法再登录 我收到防伪令牌错误 我尝试注销任何进入登录页面的用户 我尝试过不同的
  • 在 CodeIgniter 会话中存储具有相同名称的多个输入

    我已经发布了这个在 CodeIgniter 论坛中 http codeigniter com forums viewthread 155508 并且也耗尽了论坛搜索引擎 所以如果交叉发帖不被允许 我们深表歉意 本质上 我有一个输入 设置为
  • 如何将基于 Qt4.6 Phonon 的媒体应用程序移植到 Qt 5.1?

    我有一个基于 Qt 4 6 的应用程序 它使用 QtWebView 加载带有标签的 HTML 页面 以便在 Windows 平台上播放网络多媒体源 我没有使用默认的 PHONON 播放引擎 而是构建了另一个 PHONON 后端引擎来处理媒体
  • 帮助手册中的锚点不起作用

    我已经仔细检查了所有内容 希望有人能发现我没有看到的愚蠢错误 我正在尝试为我的应用程序构建一个 Apple 帮助部分 它可以正确地转到登录页面 但是没有一个锚点起作用 登陆页面称为index html另一个页面称为test html它位于p
  • 如果相机平移也在 Z 方向,单应性在平面场景的两个图像之间是否成立?

    我正在尝试计算两个图像之间的相对姿势 并且我正在使用单应性来过滤特征匹配 我有一个相当平面的场景 只要两个图像之间的平移仅限于 X 和 Y 轴 opencv 约定 基于单应性的相对姿态估计就可以非常准确地工作 一旦我开始使用另一个相机沿 Z