有没有一种算法可以解决这种投影重建的几何问题?
我们有一个带有红色正方形的网格.这意味着我们有一个3个正方形(具有角度== 90度)的阵列,众所周知,它具有相同的尺寸,躺在同一平面上,相对于它们所在的平面相同,并且不在同一条线上飞机. 我们有一个空间的投影,该空间包含平方的平面. 我们想用正方形转动飞机投影,以便我们看到它就像面对我们一样,通常我们需要一个公式来转动原始平面投影的每个点,以便它会像下面的图像一样面对我们. 可以使用哪些公式来解决此类问题,如何解决它,以前有人面对这样的问题? 解决方案 这是在保持直线的四边形之间查找映射的特殊情况.这些通常称为同源变换.在这里,其中一个四边形是一个正方形,所以这是一个受欢迎的特殊情况.您可以搜索这些术语(" Quad to Quad"等)来查找说明和代码,但是这里有一些适合您的. 在 游戏论坛讨论 将四边形图像提取到矩形 数学并不是特别令人愉快,但这也不是那么困难.您还可以从上述链接之一中找到一些代码.
26 2024-01-23
编程技术问答社区
创建一个基于立方体的三维游戏
我正在尝试创建一个三维游戏,该游戏完全基于完全相同的立方体.我想学习如何仅使用二维游戏库制作自己的三维游戏.目前,我的工作方式是,我有一个数组存储游戏中每个立方体的所有中心的位置.然后,当绘制一个立方体时,我找出我需要绘制哪个三个侧面(因为您不需要绘制立方体的所有3个侧面).然后,知道立方体所有角落的三维点,我使用相机位置,摄像头和我投射的点将这些点投射到2维空间上. 现在我真正的问题是:现在我可以画一个立方体,如何绘制多个立方体,考虑到需要按一定顺序绘制立方体(即,更远的立方体需要先绘制离我们更近的立方体出现在离我们很远的立方体上)吗?我该如何确定立方体及其尺寸列表以及相机位置/角度的列表? 解决方案 我学会了很多年 3D 图形... 我使用的所有网站现在都消失了(像网络上一样,但是有很多新网站).我是 OpenGL 用户,因此我建议使用它.我的许多学生都喜欢 nehe 教程,所以请在这里.还要查看4x4转换矩阵(同质坐标). z-buffer 在 OpenG
20 2024-01-08
编程技术问答社区
如何将一个由4个点确定的任意平面投影到一个二维平面上?
我们试图解决在平面两个不同表示中找到一个点的问题.我们拥有的第一架平面是旋转以创建透视图.第二个是同一平面的2D视图.我们对我们所知道的等效计划的每个计划有4分.问题是,如果我们在平面1中有一个任意点,如何在平面2中找到相应点? ? 最好说明用例以最好地澄清该问题.我们在左侧有一个图像. 投射平面 空间的2D布局图 所以我们拥有的是两张图片的红色正方形.请注意,如果可能的话,我希望2D空间不一定是正方形.这些都可以提前并已知.我还在第一个图像上放置了飞机上的绿色点.我希望能够对图像1中的点进行投影. 中的空间. 还要注意图像1我没有定义的窗户或眼睛位置.我只知道图像1的红色正方形是红色正方形形式图像2的变换,图像2在2D空间中. 解决方案 这是在保持直线的四边形之间查找映射的特殊情况.这些通常称为同型或投射变换.在这里,其中一个四边形是一个正方形,所以这是一个受欢迎的特殊情况.您可以搜索这些术语(" Quad to Quad"等)来查找说明和代码,但
24 2024-01-08
编程技术问答社区
计算一个投射变换,对一个任意四边形进行纹理处理
我想计算一个投射转换以质感WebGL中的任意四分之一(如果可能的(如果可能/必要/必要),则使用三分和着色器). 帖子中的一切都很好地描述了,所以我想我可以解决问题.这是解决方案的伪代码: precompute A matrix (should be trivial since texture coordinates are in [0,1] interval) compute B matrix according to the vertex positions (not possible in the vertex shader since we need the four coordinates of the points) use B in the fragment shader to compute the correct texture coordinate at each pixel 但是,我想知道是否有一种更简单的方法可以在WebGL中执行此操作. -
40 2023-11-30
编程技术问答社区
三点的法向量
嘿,数学怪胎,我遇到了一个问题,现在困扰着我一段时间了.这是一个个人项目. 我有三个点:红色,绿色和蓝色.它们放在纸板滑动上,使红点在左下(0,0),蓝点在右下(1,0),绿色点位于左上方.想象一下,逐渐退缩,从角度拍摄卡片.如果要在图片中找到每个点的中心(假设单元是像素),那么您如何在图片中找到卡片的正常向量(相对于相机)? 现在,我已经对这个问题提出了一些事情: (在"现实生活"中)的点总是正确的角度.在图片中,如果相机沿着"轴"旋转围绕红色点旋转(轴是由红色,蓝色或红色和绿色点创建的线). 卡的一侧只有点.因此,您知道您永远不会看它的背面. 卡与相机的距离无关紧要.如果我知道每个点的深度,这将变得容易得多(只是一个简单的跨产品,不?). 卡的旋转与我想要的东西无关.在我一直在尝试解决这个问题的修补时,可以在正常向量的帮助下找到旋转.旋转是否是找到正常矢量的(或产物)的一部分. 希望那里有人要么这样做,要么是数学天才.我有两个朋友在这里帮助我,我们已经
34 2023-11-17
编程技术问答社区
计算一个矩阵,将一个四边形转换为另一个四边形的二维图形
在下图中,目标是计算同型矩阵H,该矩阵H将点A1 A2 A3 A4转换为其对应物B1 B2 B3 B4. 那就是: [b1 b2 b3 b4] = H * [a1 a2 a3 a4] 您建议哪种方法是计算H(3x3)的最佳方法. A1 ... B4是2D中的点,在均匀坐标系统中表示(即[A1_X A1_Y 1]',...). 编辑: 对于这些类型的问题,我们使用SVD,因此我想看看如何简单地在MATLAB中完成. 编辑: 这是I 最初试图在麦芽胶条中使用SVD(H = Q/P)来解决它. cosider给定示例的以下代码 px=[0 1 1 0]; % a square py=[1 1 0 0]; qx=[18 18 80 80]; % a random quadrangle qy=[-20 20 60 -60]; if (DEBUG) fill(px,py,'r'); fill(qx,qy,'r'); end Q=[qx;qy;ones(
32 2023-08-12
编程技术问答社区
你能推荐一个基本矩阵计算的参考数据来源吗?
特别是,我理想地想要具有点对应关系的图像以及f和左和右骨的"金标准"计算值.我也可以使用必需的矩阵以及内在和外在的相机属性. 我知道我可以从两个投影矩阵中构建F,然后从3D实际点生成左右投影点坐标,并应用高斯噪声,但我真的很想与别人的参考数据一起工作,因为我正在尝试测试我的代码的功效并编写更多代码以测试第一批(可能是坏)代码似乎并不聪明. 感谢您的任何帮助 问候 dave 解决方案 您应该使用地面真相数据集进行多视图重建.我建议使用也许,结果不是由Hartley和Zisserman中提出的"黄金标准算法"计算的,但是您可以使用它来计算您在两个视图之间需要的基本矩阵. . 要计算两个投影矩阵P1和P2的基本矩阵F请参阅代码 andrew zisserman 提供.
20 2023-08-03
编程技术问答社区
投影几何:如何将3D中的矩形投影变成2D视图?
因此,问题在于我有一个要变成2D的矩形的3D投影.那就是我有一张纸张的照片,上面放在桌子上,我想转换为那张纸的2D视图.因此,我需要的是通过恢复所有3D/投影变换并从顶部获得纸张的透视图,从而获得未呈现的2D图像.我碰巧找到了有关该主题的一些指示,但他们并没有立即就如何实现这一目标进行指示.逐步指导需要做什么真的很有帮助.或者,或者是将其分解为小细节的资源的链接. 解决方案 您需要更多信息才能做到这一点. 例如,纸的大小. 假设你有. 您需要学习的内容称为"同型". 这基本上是以下情况: 您的平面表面(您的纸张纸),然后从两个不同的摄像机拍摄照片(例如一个是您拥有的实际图像,另一个是您想要获得的图像 - 一个摄像机正好在纸纸上). 存在从一个图像的2D空间转换为另一个图像的2D空间(同型),而您的目标是找到它.找到它后,只需将其应用于您的图像以获取顶视图. 为了找到所需的均匀矩阵(至少)4点,您在这两个图像中都知道其坐标. 当然,这些点的一个明显选择
24 2023-06-16
编程技术问答社区
三维相机坐标到世界坐标(改变基础?)
假设我具有相对于摄像机的对象的坐标x,y,z和方向rx,ry,rz. 此外,我还有坐标u,v,w和entirentation ru,rv,rw of thit hy the In the In the In the In the In the In the In the In the In the In the In the In the In the In sumage. 如何将对象的位置(位置和旋转)转换为世界的位置? 对我来说,这听起来像是基础的改变,但我还没有找到清晰的来源. 解决方案 我找到了该文档,这很清楚. http://www.cse.psu.edu/~rcollins/~rcollins/~rcollins/cse486/lecture12 .pdf 它可以对待反向操作,即从世界到相机3D坐标. pc = r(pw -c) 在哪里,PC是相机世界中的一个点,PW是正常世界中的一个点,R是旋转矩阵,C是相机翻译. 不幸的是,添加乳胶公
44 2023-05-09
编程技术问答社区
使用控制点对图像进行变形
我想根据此方案从 A和B包含源的坐标. 我正在计算转换矩阵为: A = [51 228; 51 127; 191 127; 191 228]; B = [152 57; 219 191; 62 240; 92 109]; X = imread('rectangle.png'); info = imfinfo('rectangle.png'); T = cp2tform(A,B,'projective'); 到这里似乎可以正常工作,因为(使用归一化坐标)源顶点产生其目标顶点: H = T.tdata.T; > [51 228 1]*H ans = -248.2186 -93.0820 -1.6330 > [51 228 1]*H/ -1.6330 ans = 152.0016 57.0006 1.0000 问题是imtransform产生意外结果: Z = imtransform(X,T,'XData',[1 i
30 2023-05-07
编程技术问答社区
来自相同投影矩阵的不同基本矩阵
我使用两个投影矩阵P1和P2(例如,我正在使用恐龙数据集),我需要计算基本矩阵F. 因此,我使用两个MATLAB函数: Peter Kovesi的功能: wwwwww.csse. uwa.edu.au/~pk/research/matlabfns/projective/fundfromcameras.m Zisserman: 这些功能应该做同样的事情,但是我有不同的f值!怎么可能?哪个正确的功能? 如果两个不同的图像中的两个点x1和x2是"相同",则x2^t f x1 = 0 ... 因此,我通过冲浪从两个旋转图像(5度)中发现了两个相应的点,但是x2^t f X1与这两个函数永远不等于零. 有什么想法吗? 相反,如果我使用此功能,该函数从匹配点计算F: ransac fit fundamental matrix by Peter Kovesi: ransacfitfundmatrix.m 我有x2^t f x1 = 0 ....显然,f与我在其他两个函
背面投射3D世界点到新的视图图像平面
编辑: 我拥有的:摄像机内在,校准的外部设备,2D图像和深度图 我需要的:2D虚拟查看图像 我正在尝试生成一种新颖的视图(正确的视图),以实现基于深度图像的渲染.原因是,仅在接收方可用左图和深度图可用,该图必须重建正确的视图我想知道这些步骤是否会给我带来所需的结果还是我应该做的事, 首先,通过使用Caltech的MATLAB使用摄像机校准工具箱,可以获得内在的外部矩阵. 然后,可以使用此方法使用校准参数将它们映射到3D世界点" http://nicolas.burrus.name/index.php/research/kinectcalibration#toclink2 " 现在,我想将其备份到新的图像平面(正确的视图)中.右视图仅仅是左而没有旋转的翻译. 我该如何进行重建? 另外,我可以使用MATLAB立体声校准工具估算R和T P1和P2是相应平面中3D世界点P的图像点. 高度赞赏任何想法和帮助,如果问题不清楚,将重新显示/添加详细信息.
16 2023-03-24
编程技术问答社区
多视图几何学
我已经从同一摄像机捕获的两张图像使其相距一定距离,从而捕获了同一场景.我想计算两个相机之间的现实世界旋转和翻译.为了实现这一目标,我首先提取了这两个图像的筛分功能并匹配它们. i现在具有基本矩阵以及同构矩阵.但是无法进一步进行,很多混乱.有人可以帮助我估计两个摄像机之间的旋转和翻译吗? 我正在使用openCV进行特征提取和匹配,同型计算. 解决方案 如果您具有同型,那么您也有旋转.一旦您拥有统计,很容易旋转和翻译矩阵. 例如,如果您使用的是OpenCV C ++: param[in] H param[out] pose void cameraPoseFromHomography(const Mat& H, Mat& pose) { pose = Mat::eye(3, 4, CV_32FC1); // 3x4 matrix, the camera pose float norm1 = (float)norm(H.col(0));
52 2023-03-24
编程技术问答社区
透视变形的矩形的比例
给定矩形扭曲的矩形的2D图片: 我知道这种形状最初是矩形,但我不知道它的原始大小. 如果我知道这张图中角落的像素坐标,我该如何计算原始比例,即矩形的商(宽度/高)? (背景:目标是自动不在矩形文档的照片,边缘检测可能会在霍夫变换中完​​成) 更新: 已经讨论过是否有可能确定宽度:高度比与给出的信息.我天真的想法是,这是可能的,因为我可以想到没有办法投影,例如1:4矩形到上面描述的四边形上.该比率明显接近1:1,因此应该有一种方法来数学确定它.但是,除了直觉的猜测之外,我没有证据. 我尚未完全理解下面提出的论点,但是我认为必须有一些隐含的假设,即我们在这里缺少这一点,并且对此进行了不同的解释. 但是,经过数小时的搜索,我终于找到了一些与该问题有关的论文. 到目前为止,我正在努力理解那里使用的数学,没有成功.尤其是第一篇论文似乎完全讨论了我想做的事情,不幸的是没有代码示例和非常密集的数学. Zhengyou Zhang,Li-Wei He,"白
如何在opencv中使用矩阵R和T(外在参数矩阵)来变换图像?
i具有旋转 - 翻译矩阵[r t](3x4). OPENCV中是否有一个函数执行[R T]? 描述的旋转翻译 解决方案 我认为这个问题的许多解决方案是隐藏的假设.我将尝试简单地总结我如何看待这个问题(过去我必须经常考虑).两个图像之间的翘曲是由称为同构象的3x3矩阵完成的2维过程.您拥有的是一个3x4矩阵,该矩阵定义了3个维度的转换.您可以通过将图像视为3维空间的平面平面来转换.然后,诀窍是决定图像平面世界空间中的初始位置.然后,您可以将其位置转换为带有相机内在矩阵的新图像平面上的位置. 第一步是确定您的初始图像在世界空间中的位置,请注意,这不必与您的初始R和T矩阵指定相同.这些是在世界坐标中,我们正在谈论那个世界所创造的图像,图像中的所有对象都被扁平化为飞机.这里最简单的决定是将图像设置为Z轴上的固定位移,而无旋转.从这一点开始,我将不假定旋转.如果您想看到一般案例,我可以提供它,但是它更复杂. 接下来,您将在3D空间中的两个图像之间定义转换.由于您都相对于相同
88 2023-03-06
编程技术问答社区
从两个Kinect深度映射中提取投影单应性
给定两个连续的3D点云1和2(不是整个云,例如从openCV的goodfeaturestomatch中选择的100点),从kinect depthramap中获得,我想计算1到2的摄像头的同源物.这是一个投影的转变,并且已经由许多人完成:摄像机位于Z方向上,在不规则的五角体[A,B,C,D,E,F]: 摄像机向左移动-90mm(x),向上 +60mm(y), +50mm向前(z)移动,并向下旋转5°,右10°和-3°逆时针: 旋转整个场景,以使相机恢复原始位置,使我可以在2:2:确定顶点的位置: 用于准备此目的的3DS Max文件是这是前后的顶点位置,内在的等等: 请注意,Camera2的顶点不是100%准确,有点刻意的噪音. 我需要的代码,必须容易翻译成vb.net或c#,在必要时使用eMGUCV和OPENCV使用2集的顶点和内在的,并产生此输出: : Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y,
32 2023-02-24
编程技术问答社区
计算一个矩阵,将一个四边形转化为另一个四边形的二维图形
在下图中,目标是计算将点a1a2a3a4转换为其对应物b1b2b3b4的单应性矩阵H. 即: [b1 b2 b3 b4] = H * [a1 a2 a3 a4] 你建议什么方法是计算H(3x3)的最佳方法。 a1 ... b4是在均匀坐标系(即[a1_x a1_y 1]',...)中表示的2D中的点。 EDIT : 对于这些类型的问题,我们使用SVD,所以我想看看这可以简单地在Matlab中完成。 EDIT : 这是我最初尝试使用svd = Q / P)。请考虑给定示例的以下代码 px = [0 1 1 0]; %a square py = [1 1 0 0]; qx = [18 18 80 80]; %a随机四边形 qy = [ - 20 20 60 -60]; if(DEBUG) fill(px,py,'r'); fill(qx,qy,'r'); end Q = [qx; qy;
1338 2022-07-19
编程技术问答社区
如何在三维空间的平面上投影一个平面的多边形
我想沿着向量投影我的多边形到3D空间的平面.我最好使用单个转换矩阵来执行此操作,但我不知道如何构建这种矩阵. 给定 平面的参数(ax + by + cz + d), 我多边形的世界坐标.如标题所示,我多边形的所有顶点都位于另一个平面中. 将多边形投影的方向矢量(目前多边形的平面正常矢量) 目标 -a 4x4转换矩阵,执行所需投影, 或 一些关于如何构建一个自己 的洞察力 更新 谢谢你的答案,它按预期工作. 一个谨慎的人来找这个问题:如果投影的平面正常是平行于投影向量的,则分母D将变成(几乎)0,因此避免奇怪的事情发生,某种处理需要这种特殊情况.通过检查D 解决方案 假设多边形的顶点中的一个是(x0, y0, z0),并且方向向量是(dx,dy,dz). 投影线上的点为:(x,y,z) = (x0 + t*dx, y0 + t*dy, z0 + t*dz). 要查找与平面此线的交集,使将其插入平面方程ax+by+cz+d
430 2022-07-17
编程技术问答社区