问题标签 [perspectivecamera]
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.
python - 透视单应性问题
我正在尝试使用 OpenCV 和 Python 中的透视扭曲来纠正图像。我知道相机的方向(X、Y、Z 角度)参考需要翘曲的平面。我知道最简单的方法是根据已知点计算单应矩阵,但是当该信息不可用时,我正在尝试做同样的事情。我正在使用的代码创建了一个旋转矩阵,然后结合了平移矩阵和内在矩阵。目前,该代码仅适用于对 z 轴的操作。对 x 和 y 轴的任何操作都会导致图像出现奇怪的失真。我的代码基于以下帖子底部的答案:基于已知相机方向的 OpenCV 中的透视变形
附件是标准单应性方法的原始图像和扭曲图像。
c# - 无法在 C# 中访问超类的属性
我是 C# 新手,实际上我正在创建 PerspectiveCamera 的子类
我的问题是我无法访问 LookDirection,它是 PerspectiveCamera 的公共属性。 http://msdn.microsoft.com/en-US/library/system.windows.media.media3d.perspectivecamera.aspx
是不是因为 LookDirection 继承自 ProjectionCamera!?我不明白...
提前致谢。
opencv - 将像素从一个图像重新投影到另一个图像
我有许多校准过的相机拍摄平面场景的照片。为简单起见,我们假设有 3 个摄像头。这些相机正在进行一般运动,但主要是平移加上一些温和的旋转。相机位置示例
任务是将它们完全缝合。我对 3D 坐标一无所知,只是使用校准相机拍摄的一组图像。
我所做的:
我通过在每对图像(1->2、2->3、1->3)之间使用findHomography来检测 OpenCV 中的 SURF/SIFT 实现的特征以获得初始单应性。从这些单应性中,我得到了每个相机姿势的初始估计(与此类似的过程)
然后我尝试使用捆绑调整技术来最小化每个匹配对的重投影误差。优化的参数是三个平移值和三个旋转值(从 Rodrigues 的旋转公式获得),尽管我可以稍后添加内在参数(焦点、主点等)。
假设图像#2 将是参考帧(通过与其他两个图像有最多的匹配),它的旋转和平移矩阵分别是恒等矩阵和零矩阵。
我计算从图像#2到图像#1的关键点(在图像#2和图像#1中都可见)的重投影为(伪代码)
或者
其中 r__ 是 R1 矩阵的元素,两个内在矩阵的形式为
我假设参考系的 Z2 坐标为 1。
下一阶段是使用获得的相机矩阵(K1、R1、T1、K3、R3、T3)将图像#1 和#3 扭曲到图像#2 的公共坐标系中。
问题是我不知道正确重投影到图像#2的参考帧所需的Z1和Z3,因为从图像#1->#2的反转重投影看起来像这样:
其中 R__ 是 inv(R1) 矩阵的元素。
有没有更好的方法来计算束调整(2d->2d)的重投影误差,然后将图像扭曲到公共坐标系中?我注意到 OpenCV 在他们的拼接模块中有非常相似的框架,但它是在纯旋转运动的假设下运行的,这不是这里的情况。
opengl - 平铺渲染 glFrustum 剪裁平面计算
我试图让一个平铺渲染器工作(这个想法是通过将它分解成块并单独渲染来渲染一个大视图平截头体)。
我有代码可以将具有视角的标准透视投影转换为左、右、上和下剪切平面,然后可以将其传递给 glFrustum。
我被困在正确地打破这一点。
directx - SlimDX 相机设置
请告诉我我做错了什么:那是我的相机课
那是我的常量缓冲区结构:
在这里我正在绘制三角形并设置相机:
请,如果你能看到什么是错的,告诉我!:) 我已经花了两天时间写这个了..
尝试第二个:
@paiden 我现在初始化了 fov(非常感谢 :))但仍然没有效果(现在是 fov = 1.5707963267f;)和@Nico Schertler,也谢谢你,我把它投入使用了
但仍然没有效果......可能我的 .fx 文件是错误的?我需要这个有什么目的:
尝试第三次:@MHGameWork 也非常感谢,但仍然没有效果;)如果有人有 5 分钟的时间,我可以将源代码放到他/她的电子邮件中,然后我们将发布答案......我猜这对像我这样的新手会有很大帮助:)
现在的问题 - 我看到了我的三角形,但相机没有移动
graphics - 对齐相机的观察方向以查看特定方向
我正在使用点云和多个图像。我知道相机的内在和外在参数。我想要的是找到旋转矩阵,它将旋转我的相机(不改变位置)以在某个方向上查看。更具体地说,我会将平面拟合到点云,然后我想将相机的观察方向对齐以垂直于平面查看(不改变其位置)。
因此,给定相机的旋转矩阵,我也会找到图像的单应变换。
请有人帮我解决这个问题。
android - 如何估计给定点之间的距离?
我的值 P1,P2,P3,P4 带有屏幕点 (x,y) 和经度、纬度。除此之外,我还有一个摄像头(带纬度、经度)、摄像头的高度(1.6m(常数))和摄像头的方向(轴承、俯仰、滚动)。我也有相机的水平视角和垂直视角:)
现在我想计算 PX(lat,long) 在我的显示器上的估计位置(如果它可见)。
对于给定的 PX(lat,long),如何获得 P(?,?)?(图中的紫色点)这似乎是可能的,因为我知道我的相机的角度并且我有所有四个顶点。但我不知道如何解决这个问题。
我需要一个基于这四个顶点的函数,它可以将 (lat,long) 转换为 (screenX, screenY)。
我有一个公式,可以将 (screenX, screenY) 转换为 (lat,long),但我无法反转这个公式。因此,如果需要除顶点之外的其他点,我可以计算它们(但我不能简单地对屏幕中的每个像素使用这个公式......那将是每 100 毫秒一百万次方法调用......)
opencv - 使用 OpenCV 手动标记对应点的图像配准
- 我有一个尺寸为 300x300的已处理二进制图像。此处理后的图像包含很少的对象(人或车辆)。
- 我还有另一个640x480 维度的相同场景的RGB 图像。它取自不同的位置
注意:两个相机不一样
我可以使用背景减法在第一张图像中检测到某种程度的对象。我想检测第二张图像中的相应对象。我经历了opencv函数
所有这些功能都需要两个图像中的对应点(坐标)
在第一张二值图像中,我只有对象存在的信息,它没有与第二张图像(RGB)完全相似的特征。
我认为传统的特征匹配来确定可用于估计变换参数的相应控制点是不可行的,因为我认为我无法确定和匹配来自二进制和 RGB 图像的特征(对吗??)。
如果我错了,我可以取什么特征,我应该如何进行特征匹配,找到对应点,估计转换参数。
我尝试了更多手动标记来估计转换参数的解决方案(如果我错了请纠正我)
注意:两台摄像机都没有移动。
- 已处理图像中对象周围的手动标记矩形(二进制)
- 记下矩形的坐标
- 手动标记第二个 RGB 图像中对象周围的矩形
- 记下矩形的坐标
- 对第一个二进制和第二个 RGB 图像的不同样本重复上述步骤
现在我有大约 20 个对应点,我在函数中将它们用作:
findHomography(src_pts, dst_pts, 0) ;
所以一旦我在第一张图片中检测到一个物体,
我在它周围画了一个边界框,
使用上面找到的变换变换顶点的坐标,
最后在第二个 RGB 图像中绘制一个框,转换后的坐标为顶点。
但这并没有将第二个 RGB 图像中的框标记在人/对象上。相反,它被绘制在其他地方。虽然我拿了几张二值和RGB的样本图像,并使用了几个对应点来估计变换参数,但似乎它们不够准确..
CV_RANSAC 和 CV_LMEDS 选项的含义是什么,ransacReprojecThreshold 以及如何使用它们?
我的方法好吗...我应该修改/做什么以使注册准确?
可以使用任何替代方法吗?
opencv - What is the difference between the fundamental, essential and homography matrices?
I have two images that are taken from different positions. The 2nd camera is located to the right, up and backward with respect to 1st camera.
So I think there is a perspective transformation between the two views and not just an affine transform since cameras are at relatively different depths. Am I right?
I have a few corresponding points between the two images. I think of using these corresponding points to determine the transformation of each pixel from the 1st to the 2nd image.
I am confused by the functions findFundamentalMat and findHomography. Both return a 3x3 matrix. What is the difference between the two?
Is there any condition required/prerequisite to use them (when to use them)?
Which one to use to transform points from 1st image to 2nd image? In the 3x3 matrices, which the functions return, do they include the rotation and translation between the two image frames?
From Wikipedia, I read that the fundamental matrix is a relation between corresponding image points. In an SO answer here, it is said the essential matrix E is required to get corresponding points. But I do not have the internal camera matrix to calculate E. I just have the two images.
How should I proceed to determine the corresponding point?