问题标签 [projective-geometry]
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.
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?
algorithm - 从映射在球体上的单个视图插入任何视图的算法
我正在尝试创建一个图形引擎来显示点云数据(目前为第一人称)。我的想法是从我们正在查看的空间中的不同点预先计算单个视图并将它们映射到一个球体中。是否可以插入该数据以确定空间上任何点的视图?
我为我的英语和我糟糕的解释道歉,但我想不出另一种解释方式。如果您不理解我的问题,如果需要,我很乐意重新制定它。
编辑:
我将尝试用一个例子来解释它
图 1:
图 2:
在这些图像中,我们可以看到南瓜的两个不同视图(假设我们在这两种情况下都有一个 360 度视图的球面图)。在第一种情况下,我们有一个南瓜的远景,我们可以看到它的周围环境,并想象我们在角色身后有一个箱子(如果我们向后看,我们会有一个箱子的详细视图)。
所以,第一个视图:南瓜的环境和低细节图像以及胸部的良好细节,但没有环境。
在第二个视图中,我们有完全相反的情况:南瓜的详细视图和胸部的非详细视图(仍在我们身后)。
这个想法是结合来自两个视图的数据来计算它们之间的每个视图。所以走向南瓜意味着拉伸第一张图像的点并用第二张填补空白(忘记所有其他元素,只是南瓜)。同时,我们会考虑胸部的图像,并用来自第二个整体视图的数据填充周围环境。
我想要的是有一种算法来指示像素的拉伸、压缩和组合(不仅是向前和向后,还有对角线,使用两个以上的球体贴图)。我知道这很复杂,我希望这次我表达得足够好。
编辑:
(我经常使用视图这个词,我认为这是问题的一部分,这是我对“视图”的含义的定义:“彩色点矩阵,其中每个点对应于屏幕上的一个像素。屏幕每次只显示矩阵的一部分(矩阵将是 360 球体,并显示该球体的一小部分)。视图是通过旋转相机而不移动其位置可以看到的所有可能点的矩阵。 ")
好吧,看来你们还是不明白它周围的概念。这个想法是能够通过在实时显示之前“预先计算”最大数量的数据来显示尽可能详细的环境。我现在将处理数据的预处理和压缩,我不是在问这个问题。最“预先设定”的模型是在显示的空间上的每个点存储 360 度视图(例如,如果角色以每帧 50 个点移动,那么每 50 个点存储一个视图,事情是预先计算照明和阴影并过滤不会看到的点,以便它们不会被白处理)。基本上计算每个可能的屏幕截图(在完全静态的环境中)。但当然,这很荒谬,
另一种方法是只存储一些战略观点,不那么频繁。如果我们存储所有可能的点,则大多数点在每一帧中都会重复。屏幕上点的位置变化在数学上也是有规律的。我要问的是,一种基于几个战略观点来确定视图上每个点的位置的算法。如何使用和组合来自不同位置的战略观点的数据来计算任何地方的观点。
android - 如何获取全图的像素大小?
我有部分世界地图(如美国或非洲)。我需要根据部分/裁剪的地图像素大小的大小来了解世界地图的像素大小。
我有部分地图的像素大小(如480x256
),我有minLongitude,maxlongitude,minlatitude,maxlatitude
(又名左、右、上、下边缘)
我知道经度很容易,因为线性:
FULL_CIRCLE_DEG = 360
longitudeDelta = (maxLongitude-minLongitude)/FULL_CIRCLE_DEG
MapFullSize = mapCroppedWidth/longitudeDelta
但对于纬度,情况有所不同:
FULL_LATITUDE_DEG = MAX_LAT_ON_EARTH - MIN_LAT_ON_EARTH
(如 85.7543...-(-85.7543...))
latitudeDelta = (maxLatitude-minLatitude)/FULL_LATITUDE_DEG
MapFullHeight = ????
请有人可以帮助我吗?
我找到了很多算法来获得 GPScoordinateToPixel 转换,但在平方计算上却没有。
谢谢你。
image-processing - 从单应性中去除极端失真
我有一张从任意相机角度拍摄的棋盘的照片。我找到了对应于形成棋盘格网格的两组线的两个消失点。从这两个消失点,我计算从棋盘平面到图像平面的单应性。
然后我应用逆单应性从顶视图重新渲染棋盘。但是,对于某些图像,重新渲染的顶视图非常大。也就是说,由于相机角度,逆单应性将图像的某些部分(即非常接近消失点之一的图像区域)拉伸到非常大。
这占用了不必要的大量内存,并且大部分高度拉伸的区域都是我不需要的东西。因此,在应用逆单应性时,我想避免渲染图像的高度拉伸区域。有什么好方法可以做到这一点?
(我在 MATLAB 中编码)
matrix - 你能推荐一个基本矩阵计算的参考数据来源吗
具体来说,理想情况下,我希望图像具有点对应关系以及 F 和左右极点的“黄金标准”计算值。我也可以使用基本矩阵以及内在和外在的相机属性。
我知道我可以从两个投影矩阵构造 F,然后从 3D 实际点生成左右投影点坐标并应用高斯噪声,但我真的很想使用其他人的参考数据,因为我正在尝试测试功效我的代码并编写更多代码来测试第一批(可能是坏的)代码似乎并不聪明。
谢谢你的帮助
问候戴夫
opencv - 3D相机坐标到世界坐标(改变基础?)
假设我有一个物体相对于相机的坐标 X、Y、Z 和方向 Rx、Ry、Rz。另外,我还有这台相机在世界上的坐标U、V、W和方向Ru、Rv、Rw。
如何将对象的位置(位置和旋转)转换为其在世界中的位置?
这对我来说听起来像是基础的改变,但我还没有找到明确的来源。
opencv - 如何从透视变换系数中找到旋转角度(俯仰、偏航、滚动)
我有两个二维四边形(每个用 4 xy 对表示),其中一个是另一个的透视变换。如何使用这些四边形来推断导致透视失真的旋转(俯仰、偏航、滚动)?
请注意,我使用了 cvGetPerspectiveTransform(),它以 3x3 矩阵的形式返回透视变换系数。我能够使用这些系数将一个点从一个空间映射到另一个空间。但是,我关心的是旋转角度。
有任何想法吗?
谢谢,哈桑。
webgl - 计算投影变换以纹理任意四边形
我想计算一个投影变换来纹理 webgl 中的任意四边形(如果可能/必要,使用三个.js 和着色器)。
帖子中的所有内容都很好地描述了,所以我想通过一些工作我可以解决问题。这是解决方案的伪代码:
但是我想知道在 webgl 中是否有更简单的方法可以做到这一点。
---- 相关主题的链接 ----
有一种类似的方法可以解决此处以数学方式描述的问题,但由于它是一种计算多对多点映射的解决方案,因此对我来说似乎有点矫枉过正。
我认为这是 OpenGL 中的一个解决方案,但意识到这是一个执行简单透视正确插值的解决方案,幸运的是默认情况下启用。
我在梯形上发现了很多东西,这是我要解决的更普遍问题的简单版本:1、2和3。我首先认为这些会有所帮助,但相反,它们导致我阅读和误解很多。
最后,此页面描述了解决问题的解决方案,但我怀疑它是否是最简单和最常见的解决方案。现在我认为它可能是正确的!
- - 结论 - -
我一直在寻找解决方案,不是因为它是一个特别复杂的问题,而是因为我正在寻找一个简单且典型/常见的解决方案。我虽然在许多情况下(每个视频映射应用程序)都是一个容易解决的问题,并且会有微不足道的答案。
opencv - 如何将相机的运动“翻译”为图像?
我正在使用 OpenCV 进行相机和视频稳定工作。
假设我确切地知道(以米为单位)我的相机从一帧移动到另一帧的距离,我想用它来返回第二帧应该在的位置。
我确定在制作翻译矩阵之前我必须对这个数字进行一些数学运算,但我对此有点迷茫......有什么帮助吗?
谢谢。
编辑:好的,我会尝试更好地解释它:我想从视频中删除相机的移动(抖动),并且我知道相机从一帧到另一帧移动了多少(和方向)。所以我想做的是将第二帧移回它应该使用我拥有的信息的地方。我必须为每两帧制作一个平移矩阵并将其应用于第二帧。但这是我怀疑的时候:由于我拥有的信息是米并且是相机的移动,现在我正在处理图像和像素,我想我必须做一些操作,所以翻译是正确的,但是我不确定它们到底是什么
matlab - 如何使用立体对计算基本矩阵?
关于基本矩阵的问题,如果我有一个立体声对(2 jpeg)并且我想应用 Peter Kovesi 或 Zisserman 的函数来获得 F,我该如何检索 P1 和 P2?这两个矩阵是来自两个图像的 3x4 矩阵,但我不知道它们是如何相关的......如果我从灰度第一张图像中获取随机 3x4 矩阵并在第二张图像中获取对应的 3x4 矩阵,是否正确?第一个使用一些匹配技术,例如相关性?如果是,您是否认为 3x4 矩阵不够详细?