利用多点图像构建3D模型(Kinect)
如果从各个角度收集了各种图像以及深度数据,我认为将构造一个静态物体的3D模型,我认为的是有一种圆形的传送带,放置了一个kinect皮带虽然要在3D空间中重建的真实物体位于中间.此后,输送带以圆圈围绕图像旋转,并捕获了许多图像(也许每秒10张图像),这将使Kinect从每个角度(包括深度数据)中捕获图像,从理论上讲这是可能的.该模型还必须通过纹理重新创建. 我想知道的是,是否已经有任何类似的项目/软件,任何链接都将不胜感激 这是否可能在6个月内 我该如何继续这样做?例如任何类似的算法,您都可以指出我和这样的 谢谢 Milindad 解决方案 绝对有可能,那里有很多3D扫描仪,或多或少具有立体镜的原理. 您可能知道这一点,但只是要上下文化:想法是从同一点获得两个图像,并使用三角剖分计算场景中点的3D坐标.尽管这很容易,但最大的问题是找到2个图像中的点之间的对应关系,这是您需要一个好的软件来提取和识别类似点的地方. 有一个开源项目,称为 3D重建*算法.我不知道
4 2024-01-22
编程技术问答社区
基本的空间雕刻算法
我有以下问题,如图所示.我有四面体算法产生的点云和网格.我如何使用该算法雕刻网格?地标是点云吗? 算法的伪代码: for every 3D feature point convert it 2D projected coordinates for every 2D feature point cast a ray toward the polygons of the mesh get intersection point if zintersection
28 2024-01-22
编程技术问答社区
带有立体三维重建的OpenCV
说我计划使用立体声方法使用OpenCV进行3D重建...而且我没有任何特殊的立体声摄像头,而只有网络摄像头. 1.)如何使用一组Web摄像头构建便宜的立体声设置? 2.)是否可以使用Web Cams拍摄两个图像,并使用OpenCV API转换为立体声? 我将使用下面链接的立体声算法 with opencV 使用这种方法,我想创建室内环境的详细映射. (我不想使用任何项目之类的项目,而没有分发源代码就无法用于商业目的) 解决方案 您可以在这里找到很多资源资源/" rel =" noreferrer">教程和立体声摄像机 其他解决方案 首先,确保您的网络摄像头没有任何内置自动对焦技术.由于相机应具有固定焦距. 1)在规范配置中与基线距离变化的摄像机对齐.然后使用OpenCV的stereo_calib.cpp程序对其进行校准.通常,距离为20-60厘米.对于某些网络摄像机,甚至10厘米都可以为您带来更好的结果.如果RMS错误和再投影错误小于0.5,则可以
42 2024-01-08
编程技术问答社区
从点创建OOBB
如何为给定点创建最小的OOBB?创建AABB或Sphere非常容易,但是我遇到了很少的OOBB. [编辑] 第一个答案并没有给我带来好成绩.我没有巨大的积分云.我几乎没有积分.我正在做碰撞几何.例如,立方体有36分(6个侧面,每个三角形2分,每个三角形为3分).第一帖子中的算法给多维数据集带来了不良结果.立方体的示例点: http://nopaste.dk/download/3382 /p> 解决方案 PCA/协方差/特征向量方法基本上找到了近似对象顶点的椭圆形的轴.它应该适用于随机对象,但会给多维数据集等对称对象提供不良结果.那是因为立方体的近似椭圆形是球体,并且球体没有明确定义的轴.因此,您不会得到您期望的标准轴. 也许如果您事先知道一个对象,例如一个立方体,您可以使用专用方法,并将PCA用于其他所有方法. 另一方面,如果要计算真正的OBB,则可以使用现有的实现,例如引用该页面: contminbox3文件实现 用于计算的算法 最小体积盒包含 点.此
8 2024-01-08
编程技术问答社区
三维重建-如何从二维图像创建三维模型?
如果我用相机拍照,所以我知道从相机到对象的距离,例如房屋的比例模型,我想将其变成我可以操纵的3D模型,所以我可以评论房屋的不同部分. 如果我坐下来考虑拍一张以上的图片,标记方向和距离,我应该能够弄清楚如何做到这一点,但是,我想我会问我是否有一些纸可能有助于解释更多. 您用哪种语言没关系,因为我正在寻找最好的方法. 现在,我正在考虑展示房屋,然后用户可以为高度提供一些帮助,例如从相机到模型的顶部的距离,并且给出了足够的距离计算其余的高度,尤其是在有自上而下的图像时,然后从四个侧面的角度进行图片来计算相对高度. 然后,我希望零件也需要不同的颜色来帮助分开模型的各个部分. 解决方案 研究取得了重大进展,如今,可以从2D图像中获得漂亮的3D形状.例如,在我们最近的研究工作中,标题为" 合成3D形状,通过建模多视图深度图和深度生成图和silhouettes网络"在解决从2D图像中获得3D形状的问题迈出了重要一步.在我们的工作中,我们表明您不仅可以直接从2D到3D并获
26 2024-01-08
编程技术问答社区
在MATLAB中绘制体积数据图
我在Matlab工作,我有一个带有384x512x160尺寸的3D矩阵,该矩阵由384x512片制成. 如何绘制这样的数据? 解决方案 您真正拥有的是体积数据. 我想您的值是每个x,y,z的值. 实际上,这在很大程度上取决于您拥有的数据类型.您需要为特定答案提供更多信息. 通常可以看一下体积数据可视化技术,但不仅有一种方法可以做到这一点.以后,我会给您一些您可能想尝试的例子. slidatomic 一个选项是使用 sliceomatic sliceomatic Fe: 绘制切片 如果您有医疗数据(或大范围内的数据) 您可能需要使用仅绘制某些切片的典型方法.您可以使用subplot()和imshow(squeeze(:,:, slice))进行操作,也可以将所有切片(例如img=[squeeze(:,:, slice1)) squeeze(:,:, slice2)); squeeze(:,:, slice3)) squeeze(:,:, s
6 2024-01-08
编程技术问答社区
相应图像中的摄像机运动
我正在尝试根据相应图像的运动来计算新的相机位置. 图像符合针孔摄像机模型. 事实上,我没有有用的结果,所以我尝试描述我的程序并希望有人可以帮助我. i将相应图像的功能与SIFT匹配,将它们与OpenCV的FlannBasedMatcher匹配,并使用OpenCV的FindFundAmentalMat(方法RANSAC)计算基本矩阵. 然后,我通过摄像机固有矩阵(K)计算必需矩阵: Mat E = K.t() * F * K; i将基本矩阵分解为旋转和翻译的奇异值分解: SVD decomp = SVD(E); Matx33d W(0,-1,0, 1,0,0, 0,0,1); Matx33d Wt(0,1,0, -1,0,0, 0,0,1); R1 = decomp.u * Mat(W) * decomp.vt; R2 = decomp.u * Mat(Wt) * decom
26 2023-10-25
编程技术问答社区
你能推荐一个基本矩阵计算的参考数据来源吗?
特别是,我理想地想要具有点对应关系的图像以及f和左和右骨的"金标准"计算值.我也可以使用必需的矩阵以及内在和外在的相机属性. 我知道我可以从两个投影矩阵中构建F,然后从3D实际点生成左右投影点坐标,并应用高斯噪声,但我真的很想与别人的参考数据一起工作,因为我正在尝试测试我的代码的功效并编写更多代码以测试第一批(可能是坏)代码似乎并不聪明. 感谢您的任何帮助 问候 dave 解决方案 您应该使用地面真相数据集进行多视图重建.我建议使用也许,结果不是由Hartley和Zisserman中提出的"黄金标准算法"计算的,但是您可以使用它来计算您在两个视图之间需要的基本矩阵. . 要计算两个投影矩阵P1和P2的基本矩阵F请参阅代码 andrew zisserman 提供.
12 2023-08-03
编程技术问答社区
如何用一系列二维图像创建三维图像
我有样本的一系列2D TIFF图像,我想使用这些2D图像进行3D可视化创建或重现3D图像/音量. 我发现此链接重建来自2D图像的3D图像,但是有类似的问题它讨论了使用反射算法的CT重建.但是我已经有图像形式的样本的2D视图. 我想知道如何使用Python或Matlab从这些2D片(TIFF图像)中复制3D图像. 解决方案 我想检查一下这是您要寻找的东西,然后再对可能无关紧要的事物进行解释. 我有一系列肿瘤的2D图像.我正在从图像切片中构造3D外壳,并从该外壳创建一个.ply文件. 2D切片 3D重建 这是您要寻找的东西吗? 编辑: 我下载了数据集并通过程序运行. 我将图像的分辨率设置为100x100,以减少.ply文件中的点数.您可以增加它或减少它. 用于创建.ply文件的程序 import cv2 import math import numpy as np import os # creates a point
18 2023-07-21
编程技术问答社区
Open3d: 如何在窗口运行期间更新点云?
上下文 我正在尝试从差距图可视化3D点云.它与一张地图完美搭配. 发行 我想更新窗口中的内容.当我调用run()方法时,新线程将打开,并且在窗口关闭之前,我无法做任何事情.我想清除窗口中的内容并显示新的云而不会关闭窗口,所以它会像动画一样. 代码 我已经创建了可视化器对象,并且在此上做了所有事情. vis = open3d.visualization.Visualizer() vis.create_window() cloud = open3d.io.read_point_cloud(out_fn) # out_fn is file name vis.add_geometry(cloud) vis.run() 解决方案 类Open3D.Visualization.Visualizer具有.update_geometry()和.remove_geometry()函数,您可以用来实现这一目标. 您可以尝试的另一
22 2023-07-21
编程技术问答社区
用基线和单相机校准从2张图像中进行三维重建
我的学期项目是用大基线(〜2m)校准立体相机. 因此,我的方法是在没有精确定义的校准模式的情况下运行,例如棋盘,因为它必须很大并且很难处理. 我的问题与此相似:来自2张图像的3D重建,而没有信息 到现在为止: 转角检测左图goodFeaturesToTrack 精制角cornerSubPix 在右图像中查找角落位置calcOpticalFlowPyrLK 计算基本矩阵F findFundamentalMat 计算H1,H2整流同构矩阵stereoRectifyUncalibrated 纠正图像warpPerspective 计算差距sgbm 到目前为止,它可以通过,但是如果我更改角数,则可以在透视上"跳跃". 不知道如果形式不精确或错误是我疯狂的,还是由于没有已知的相机参数或没有镜头扭曲补偿而无法计算的(但也发生在tsukuba图片上.) 欢迎建议:) 但不是我的主要问题,现在我想重建3D点. 但是reprojectImageTo3D
96 2023-07-17
编程技术问答社区
如何从结构光三维扫描中获取点云数据?
我试图使用3D结构化照明扫描仪理解对象的3D重建,并且我被卡在解码相机和投影仪对应的方法中,用于重建3D点云.从这些信件中获得的信息中获取了3D点云信息如何?我想了解数学实现,而不是代码实现. 解决方案 假设您使用了使用某种线条(垂直或水平 - 二进制编码或de -brujin)的结构光方法,则想法如下: 一个光平面穿过投影仪的透视中心和图案中的线. 相对于摄像机(或世界取决于校准),需要使用投影仪旋转矩阵旋转光平面.如果将投影仪的透视中心视为系统起源,则可以避免光平面的旋转部分. 使用对应关系,您在图像中找到一个像素匹配的像素.现在,您需要定义一个从相机透视中心到图像中像素的向量,然后通过摄像机旋转(相对于投影仪或世界)旋转该向量.再次取决于校准). 将光平面与发现的矢量相交.如何计算可以在Wikipedia中找到的: org/wiki/line%e2%80%93plane_intersection 您可以看到的数学问题(3D重建)非常简单.困难的
54 2023-07-13
编程技术问答社区
OpenCV用已知的深度`Z`将2D点解压为3D点
问题语句 我试图将2D点重点重点为他们的原始3D坐标,假设我知道每个点的距离.跟随使用零距离.但是,当存在扭曲时,结果是不正确的. 当前方法 因此,这个想法是扭转以下内容: 进入以下内容: : 使用cv::undistortPoints 摆脱任何扭曲 使用内在来逆转上面的第二个方程 乘以z逆转归一化. 问题 为什么我需要减去f_x和f_y才能回到归一化的相机坐标(测试时经验发现)?在下面的代码中,在步骤2中,如果我不减去 - 即使未延迟的结果也没有,这是我的错误 - 我把索引弄乱了. 如果我包括失真,结果是错误的 - 我在做什么错? 示例代码(C ++) #include #include #include #include #incl
12 2023-06-26
编程技术问答社区
什么原因会导致三角测量的3D点出现扭曲(抛物面)的图?试图使用SFM进行三维重建
我正在尝试使用SFM(运动结构)进行3D重建.我对计算机愿景很陌生,并将其作为一种爱好,因此,如果您使用首字母缩写词,请让我知道它的含义,所以我可以查找. 明智地学习,我一直在遵循此信息: 7WG1E62A和列表= plgnqpqtftftogryjqjdzxteqpzufhqa7o7y&ab_channel = cyrillstachniss 加上以下来自快速问题的链接. 我的最终目标是在人的脸上使用它,以创建3D面重建.如果人们对此主题有建议,请告诉我. 我执行以下步骤: 使用OpenCV.使用单个相机拍摄的视频. 使用Zhangs方法找到相机的内在参数和失真系数. 使用SIFT查找框架1和框架2的功能. 使用cv2.FlannBasedMatcher(). 进行功能匹配 使用cv2.findEssentialMat()来计算必需矩阵. 框架1的投影矩阵设置为numpy.hstack((numpy.eye(3), numpy.zeros((3
16 2023-06-21
编程技术问答社区
转换从三焦点张量计算出来的投影矩阵以估计三维点
我正在使用此遗产代码:http ://opencv-users.1802565.n2.nabble.com/trifocal-tensor-icvcomputeprojectmatrices6points-icvcomputeprojectmatricesnpoints-td2423108.html i可以使用 iCvComputeProjectMatrices6points 成功计算投影矩阵.我使用了3个视图中的6组相应点.结果如下所示: projMatr1 P1 = [-0.22742541, 0.054754492, 0.30500898, -0.60233182; -0.14346679, 0.034095913, 0.33134204, -0.59825808; -4.4949986e-05, 9.9166318e-06, 7.106331e-05, -0.00014547621] projMatr2 P2 = [-0.17060626, -0.007
8 2023-06-16
编程技术问答社区
如何在摄像机处于固定位置的情况下合并两个三维点云。
我有四个位于固定位置的摄像机.因此,我可以使用标尺(物理上)测量它们之间的距离(甚至旋转).相机一号和第二个给我一个点云和相机的三和四,给了我另一个点云.我需要合并这些点云. 到目前为止,我已经理解,ICP和其他此类算法对一个点云进行了严格的变换以匹配另一个云.我的问题是,我如何使用额外的知识(以厘米为单位的相机之间的距离)进行这种转变. 我对这样的工作很陌生,所以如果我误解了某些东西,请纠正我.预先感谢. 解决方案 首先,您要寻找哪种准确性,以及空间的数量?在0.5 m的桌面场景上实现0.1 mm的注册精度是一个完全不同的问题(就机械设计和约束而言),与在宽几十米的地板上的几毫米​​相比. 一般来说,具有重建且明确的对象形状,ICP始终为您提供比手动测量更好的解决方案. 如果摄像机是静态的,那么您实际上是一个校准问题,并且您需要仅在设置时校准4摄像机的钻机,而其配置出于任何原因进行更改. 我建议使用精确已知的大小和几何形状的校准对象,例如一个机械的
24 2023-06-09
编程技术问答社区
opencv sgbm在物体边缘产生异常值
我正在使用OpenCV SGMB进行立体声差异计算,以重建放在表上的一些简单对象.一切或多或少都奏效了,除了在对象的边缘上,我发现一些离群值以背景的颜色粘附.问题是我认为SGBM不匹配该背景点,这些点是对象边缘边缘的邻居,并且它们具有与这些边缘相同的差异值. 这是一个例子 您可以看到地板上的一些图像被卡在对象上.我正在使用SGBM参数的标准值: int sgbmWinSize = 3;//size of the window to be matched int numberOfDisparities = 256; //number of different disparity values in pixels int cn = inputImage1.channels(); sgbm.minDisparity = -128; //minimum possible disparity value in pixels sgbm.SADWindowSize = sgbmWinS
40 2023-05-10
编程技术问答社区
校准后的相机获得了3D重建的匹配点,理想测试失败
我以前曾问过"使用校准的相机获得3D重建的匹配点",但该问题尚未清楚地描述.因此,在这里,我在每个步骤中使用一个细节案例.希望有人可以帮助弄清楚我的错误在哪里. 首先,我用坐标做了10个3D点: >> X = [0,0,0; -10,0,0; -15,0,0; -13,3,0; 0,6,0; -2,10,0; -13,10,0; 0,13,0; -4,13,0; -8,17,0] 这些要点在此图片中显示的同一平面上: 我的下一步是使用3D-2D投影代码获得2D坐标.在此步骤中,我使用了Caltech校准工具箱中的MATLAB代码,称为" Project_Points.m".另外,我使用OpenCV C ++代码来验证结果并结果相同. (我使用了cvprojectpoints2()) 对于第一个投影,参数为: >
28 2023-05-10
编程技术问答社区
检索从扭曲的图像中提取的像素的原始坐标
我从A sourceImage 中提取了四个角落: src_vertices[0] = corners[upperLeft]; src_vertices[1] = corners[upperRight]; src_vertices[2] = corners[downLeft]; src_vertices[3] = corners[downRight]; 这四个角落被扭曲到 destination图像喜欢的: dst_vertices[0] = Point(0,0); dst_vertices[1] = Point(width, 0); dst_vertices[2] = Point(0, height); dst_vertices[3] = Point(width, height); Mat warpPerspectiveMatrix = getPerspectiveTransform(src_vertices, dst_vertices); cv::Size
14 2023-05-10
编程技术问答社区
undistortPoints, findEssentialMat, recoverPose。它们的参数之间有什么关系?
希望对更广泛的受众群体,我在这里重新提出问题,我在 ansys.opencv.org . tl; dr :传递给undistortPoints,findEssentialMat和recoverPose的参数之间应保持什么关系?? 我在程序中具有以下代码,K和dist_coefficients是相机内在的,imgpts.匹配的特征点来自2个图像. Mat mask; // inlier mask undistortPoints(imgpts1, imgpts1, K, dist_coefficients, noArray(), K); undistortPoints(imgpts2, imgpts2, K, dist_coefficients, noArray(), K); Mat E = findEssentialMat(imgpts1, imgpts2, 1, Point2d(0,0), RANSAC, 0.999, 3, m
100 2023-05-10
编程技术问答社区