问题标签 [structure-from-motion]

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.

0 投票
0 回答
433 浏览

c++ - 使用 OpenCV 对平面标记进行 3D 重建

我正在尝试从平面标记的多个图像执行 3D 重建(运动结构)。我对 MVG 和 openCV 很陌生。

据我了解,我必须执行以下步骤:

  1. 识别一个图像中相应的 2D 角点。
  2. 使用 cv::solvePNP 计算第一张图像的相机姿势(假设原点是标记的中心)。
  3. 对第二张图像重复 1 和 2。
  4. 通过 Rot_relative = R2 - R1, Trans_relative = T2-T1 估计相机的相对运动。
  5. 现在假设第一个摄像机是原点,为两个视图构建 3x4 投影矩阵,P1 =[I|0]*CameraMatrix(由校准已知)和 P2 = [Rot_relative |Trans_relative]。
  6. 使用创建的投影矩阵和 2D 角点使用 cv::triangulatePoints(P1,P2,point1,point2,OutMat) 对 3D 坐标进行三角测量
  7. 可以通过将 OutMat 的每一行除以第 4 行来找到 3D 坐标。
  8. 我希望将我的“第一个视图”作为我的起源并遍历 n 个视图,重复从 1 到 7 的步骤(我想它称为 Global SFM)。

我希望通过“第一个视图作为原点”获得拐角的 (n-1)3D 点,我们可以使用 Bundle Adjustment 对其进行优化。

但是我得到的结果非常令人失望,计算出的 3D 点被一个巨大的因素所取代。

这些是问题:

1.我执行的步骤有问题吗?

2.我应该使用 cv::findHomography() 和 cv::decomposeHomographyMat() 来查找相机的相对运动吗?

3. cv::triangulatePoints(P1,P2,point1,point2,OutMat) 中的point1和point2是否应该归一化且不失真?如果是,应该如何解释“Outmat”?

请任何对该主题有见解的人,您能指出我的错误吗?

PS我在阅读“计算机视觉中的多视图几何”后得到了以上理解

请在下面找到代码片段:

0 投票
0 回答
346 浏览

opencv - 使用网络摄像头实现 sfm/slam

我想使用我的网络摄像头实现 Structur from Motion (SfM) / 同时定位和映射算法。我对这个话题很陌生,所以我需要互联网专家的建议。我现在可以为此目的构建 OpenCV opencv sfm 教程,我查看了 OpenSFM,但它似乎只是一个 GUI。我可以使用哪些其他开放库/程序来完成此任务?任何建议/建议/教程表示赞赏。

0 投票
0 回答
332 浏览

computer-vision - 如何合并两个具有不同尺度的点云?

我们现在正在使用 SFM 来重建我们的教学楼。但是我们学校太大了,一次都无法重建。所以我们决定把它们分成几个块并重建它们,然后合并这些点云。

由于 SFM 的尺度不明确,所以点云的尺度不同。

而点云合并算法,如ICP,只能估计旋转和平移变换矩阵,而不能估计相似变换矩阵。

那么,是否存在一种算法来合并两个不同尺度的点云或任何论文?

0 投票
1 回答
473 浏览

computer-vision - 平均 SIFT 特征进行姿态估计

我使用 SfM 创建了一个不规则(非平面)复杂对象的点云。这些 3D 点中的每一个都在多个图像中查看,因此它具有与其关联的多个 (SIFT) 特征。

现在,我想使用 PnP 算法将新图像中检测到的特征与与点云中的 3D 点关联的特征相匹配,从而在一组新的不同图像中求解该对象的姿势。

所以我的问题是:我将哪个描述符与 3D 点相关联以获得最佳结果?

到目前为止,我已经提出了许多可能的解决方案......

  1. 平均与 3D 点关联的所有描述符(取自 SfM 管道)并使用该“平均描述符”在 PnP 中进行匹配。这种方法对我来说似乎有点牵强 - 我对特征描述符(特别是 SIFT)了解不足,无法评论这种方法的优点和缺点。
  2. 将在 SfM 管道期间计算的所有描述符“固定”到其关联的 3D 点。在 PnP 期间,您基本上会有重复的点来匹配(每个描述符一个重复)。这显然是密集的。
  3. 找到特征出现的“中心”视点(来自 SfM 管道),并使用该视图中的描述符进行 PnP 匹配。因此,如果特征出现在以 、 和 度(从表面法线)拍摄的图像中-301040使用10度图像中的描述符。对我来说,这似乎是最有希望的解决方案。

有这样做的标准方法吗?我无法在网上找到任何关于这个问题的研究或建议,所以我真的很好奇是否有最好的解决方案,或者它是否取决于对象/情况。

0 投票
0 回答
338 浏览

python-3.x - 如何在visualSFM管道中使用自己的特征,在openCV中计算

我尝试从多个图像进行 3D 重建。我目前正在使用将 Lowe SIFT 功能作为 .feat 和 .mat 格式的可视化 SFM 管道。两者都是二进制的,所以我无法用编辑器阅读它们。由于visual sfm的文档:

使用您自己的特征匹配 1. 编写一个包含所有特征匹配的 txt 文件 2. 将您的图像(带有特征)加载到 VisualSFM 3. 使用“SfM->Pairwise Matching->Import Feature Matches” 4. 您可以添加特征匹配再次使用相同的方法。

*。这假设您已经检测到这些特征。*。命令行的相同功能是选项“+import”*。不要使用“SfM->Pairwise Matching->Compute Missing Match”,它会进行完全匹配

匹配文件格式如下 Match file = Image-Match = <# of matches>

例如,下面给出了 888.jpg 和 709.jpg 之间的 24 个匹配项

**888.jpg 709.jpg 24

19 18 24 3651 1511 2899 71 115 201 202 199 1639 2595 210 189 1355 268 241 137 728 1899 193 192 325
139 143 181 261 342 349 373 433 622 623 686 700 745 812 868 951 987 990 1001 1016 1021 1046 1047 1069

其中 888.jpg 中的第 19 个特征与 709.jpg 中的第 139 个特征匹配**

我使用 openCV 的 sift 算法,因此我为每个图像获得一个具有维度#Features x 128的矩阵,并将它们保存为每个图像的 .sift。

之后,我使用 openCV 中的匹配算法并获得一个包含以下行的文件:

图片__2018-04-24__15-06-04.jpg 图片__2018-04-24__15-06-11.jpg 955

22、27、33、49、59、65、72、92、97、100、101、105、106、112、116、120、123、126、127、129、137、141、142、143、144、 147、152、159、160、169、179、186、188、207、223、233、250、261、265、266、268、269、292、296、297、299、300、302、304、306、 308, 309, 312, 315, 318, 326, 327, 328, 329, 331, 333, 334, 337, 342, 348, 350, 358, 361, 364, 365, 369, 376, 380, 382,​​ 383, 385、386、396、403、404、407、408、410、411、417、424、427、428、429、431、432、434、435、437、438、441、443、445、446、449、 450, 451, 452, 455, 458, 464, 465, 467, 468, 470, 471, 474, 477, 478, 480, 481, 482, 486, 488, 489, 490, 493, 494, 495, 496, 499, 501, 504, 505, 506, 509, 510, 511, 512, 514, 515, 516, 524, 526, 527, 528, 529, 530, 531, 533, 536, 538, 539, 541, 547, 549, 550, 554, 556, 560, 561, 563, 565, 567, 573, 574, 575, 577, 581, 582, 585, 587, 589, 590, 591, 596, 599, 602, 605,610, 615, 616, 617, 618, 629, 630, 631, 633, 659, 665, 670, 671, 678, 680, 681, 682, 683, 686, 690, 692, 694, 698, 703, 706, 709, 710, 721, 723, 735, 736, 737, 739, 740, 742, 743, 744, 745, 746, 747, 748, 750, 751, 752, 753, 754, 756, 757, 759, 760, 761, 762, 763, 765, 767, 768, 769, 770, 771, 772, 773, 774, 775, 777, 787, 788, 789, 791, 792, 793, 794, 796, 800, 801, 803, 804、805、806、809、810、811、812、814、815、817、818、819、820、821、822、825、828、829、831、834、835、836、838、839、840、 841, 843, 844, 846, 847, 848, 851, 853, 854, 857, 858, 861, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 874, 875, 876, 877、878、879、882、883、885、886、888、889、890、894、895、897、898、901、902、905、907、909、910、912、913、914、916、917、 918、919、920、921、922、923、924、925、926、927、930、931、932、933、934、935、936、937、938、941、942、943、947、948、949、950、953、954、957、958、959、960、961、964、965、968、969、970、971、972、973、974、976、977、978、979、980、 981, 982, 983, 985, 987, 988, 989, 990, 991, 992, 994, 995, 997, 1001, 1002, 1003, 1004, 1005, 1007, 1008, 1009, 10130, 10142, 10142 1015, 1018, 1019, 1020, 1021, 1022, 1023, 1025, 1026, 1027, 1028, 1029, 1031, 1033, 1034, 1038, 1040, 1041, 1042, 1044, 1046, 1047, 1048, 1050, 1053, 1055, 1056, 1058, 1060, 1062, 1065, 1066, 1067, 1068, 1070, 1072, 1074, 1075, 1076, 1077, 1078, 1079, 1081, 1082, 1083, 1086, 1087, 1088, 1089, 1090, 1092, 1094, 1095, 1096, 1097, 1099, 1100, 1102, 1103, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1122, 1123, 1124、1125、1126、1133、1134、1135、1136、1137、1139、1141、1142、1143、1144、1145、1159、1161、1165、1167、1168、11769、11770、11769、11770、1178, 1179, 1180, 1183, 1185, 1186, 1187, 1189, 1190, 1192, 1197, 1199, 1200, 1202, 1203, 1205, 1206, 1207, 1209, 1210, 1211, 1214, 1215, 1217, 1218, 1222, 1223, 1224, 1225, 1227, 1228, 1229, 1232, 1234, 1235, 1238, 1239, 1240, 1242, 1243, 1244, 1249, 1250, 1251, 1252, 1253, 1257, 1261, 1262, 1263, 1266, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1277, 1278, 1280, 1281, 1283, 1284, 1285, 1286, 1288, 1289, 1291, 1292, 1293, 1294, 1295, 1296, 1298, 1300, 1301, 1302, 1303, 1304, 1307, 1308, 1309, 1311, 1312, 1314, 1315, 1317, 1318, 1319, 1320, 1321, 1323, 1327, 1328, 1329, 1331, 1332, 1334, 1335, 1336, 1337, 1338, 1339, 1341, 1343, 1344, 1345, 1346, 1347, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1360, 1361, 1362, 1363, 1366, 1368, 1372、1373、1374、1375、1376、1377、1378、1379、1380、1381、1382、1383、1384、1385、1386、1387、1388、1389、1390, 1391, 1392, 1393, 1394, 1396, 1399, 1401, 1402, 1403, 1404, 1406, 1407, 1408, 1409, 1411, 1412, 1414, 1415, 1416, 1417, 1418, 1420, 1421, 1423, 1425, 1426, 1428, 1429, 1430, 1431, 1433, 1436, 1437, 1438, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1449, 1450, 1452, 1453, 1454, 1456, 1457, 1460, 1462, 1464, 1465, 1467, 1470, 1471, 1472, 1473, 1474, 1475, 1478, 1480, 1481, 1483, 1484, 1485, 1488, 1490, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1506, 1508, 1509, 1510, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1523, 1524, 1525, 1526, 1527, 1528, 1531, 1532, 1534, 1537, 1539, 1540, 1541, 1542, 1543, 1545, 1547, 1548, 1549, 1551, 1552, 1553, 1554, 1555, 1557, 1558, 1560, 1561, 1563, 1565, 1566, 1567、1568、1569、1570、1572、1573、1575、1576、1577、1578、1579、1581、1582、1583、1584、1585、1586、1587、1588, 1590, 1591, 1593, 1594, 1597, 1598, 1599, 1600, 1601, 1603, 1604, 1605, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1616, 1618, 1619, 1620, 1622, 1623, 1625, 1627, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1643, 1644, 1648, 1649, 1650, 1652, 1653, 1655, 1656, 1657, 1658, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1677, 1678, 1679, 1682, 1683, 1684, 1685, 1686, 1689, 1690, 1692, 1696, 1697, 1699, 1700, 1702, 1705, 1708, 1710, 1711, 1712, 1713, 1714, 1715, 1717, 1718, 1719, 1720, 1723, 1726, 1727, 1730, 1731, 1732, 1734, 1735, 1736, 1737, 1739, 1740, 1741, 1742, 1744, 1745, 1747, 1748, 1749, 1750, 1752, 1753, 1754, 1755, 1756, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1773, 1775, 1776, 1778, 1780, 1782, 1784, 1785, 1787, 1788, 1789, 1790, 1791, 1792,1793, 1794, 1795, 1796, 1797, 1798, 1799, 1801, 1802, 1803, 1806, 1807, 1811, 1814, 1815, 1816, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828、1830、1831、1834、1835、1836

所以我使用了 sfm -import 函数并插入了matches.txt 以及包含图像和.sift 文件的文件夹。但是我只得到一个空的 n 视图匹配文件(.nvm)

有人知道这条管道有什么问题吗?有没有人暗示我如何让这个工作?我认为我的格式有问题,但我看不出可能有什么问题

谢谢您的帮助

最好的

最大限度

0 投票
2 回答
194 浏览

opencv - 用于从特征匹配中生成 3D 点云的管道

我目前正忙于从同一对象的不同图像重建对象的项目。

到目前为止,我已经使用 AKAZE 特征计算了每个图像的特征匹配。

现在我需要导出相机参数和 3D 点坐标。

但是,我有点困惑。在我看来,我需要相机参数来确定 3D 点,反之亦然。

我的问题是如何一步获得 3D 点和相机参数?

我还研究了http://scipy-cookbook.readthedocs.io/items/bundle_adjustment.html提供的捆绑调整方法,但是您需要对相机参数和 3D 坐标进行初步猜测。

有人可以参考伪代码吗?或者有适合我的管道?

提前致谢

0 投票
2 回答
109 浏览

opencv - 从运动中重建结构

我目前正在尝试借助掌握 opencv 3 的书从运动中编写结构算法。现在我有我的算法,他对我的图像集和三角点进行排序,并为之前的一对图像排序重建基线三角形..

所以这是我的第一个结果: 为这对图像重建 foutain-c11 : foutain c11 image1 foutain c11 image2

我使用在 opencv(使用 GPU)中实现的 SURF 算法,我发现了 25000 个特征,在按内点和异常点对特征进行排序后,我发现了 15000 个特征

所以我尝试用我自己的相机(罗技 brio 4k)重建一个真实世界的模型,这是我现在的真实世界模型:

真实世界模型图1

真实世界模型 image2

真实世界模型 image3

真实世界模型 image4

真实世界模型 image5

但我只发现了 700 到 900 个特征,在按内部异常值排序后,我发现了 ~300 个特征我的问题是:问题是我的真实世界模型还是这种算法(SURF)不适用于这种模型谢谢

0 投票
1 回答
1547 浏览

opencv - 如何在 OpenCV 中从具有已知姿势的多个图像中稳健地进行 3d 重建

高分辨率图像示例的传统解决方案:

  1. 为所有图像提取特征(密集)
  2. 匹配特征以通过图像查找轨迹
  3. 将特征三角化到 3d 点。

对于我的情况,我可以在这里给出两个问题(许多 640*480 图像之间的移动很小),第一:匹配非常慢,特别是如果图像数量很大,所以更好的解决方案是光流跟踪。 ,但随着大动作它变得稀疏,(混合可以解决问题!!)

第二:对轨道进行三角测量,虽然这是一个过度确定的问题,但我发现很难编写解决方案,..(这里要求简化我在参考资料中读到的内容)

我在那个方向搜索了很多库,但没有任何有用的结果。

再次,我有地面实况相机矩阵,并且只需要 3d 位置作为第一次估计(没有 BA),编码软件解决方案可以提供很大帮助,因为我不需要重新发明轮子,尽管详细的说明可能会有所帮助

0 投票
0 回答
258 浏览

opencv - 如何跟踪图像上的 2d 点以进行 3d 重建,如 opencv sfm 管道中指定的那样?

我正在尝试使用 opencv 中的此代码进行 3D 重建。据我了解,我需要一个具有给定格式的 2D 点的文本文件。我想知道是否有人可以帮助我获得他们在这个程序中提到的这些 2D 点。我有一组带有校准参数的图像,但我无法理解如何跟踪和保存这些 2D 点,例如第 1 帧中的第一个点与第 2 帧中的相同点,格式相同。

如果有人能帮助我解决这个问题,我将不胜感激。谢谢你。

0 投票
1 回答
1270 浏览

opencv - 如何使用 OpenCV 将点从 2D 投影到 3D?

我正在研究相机校准和 3D 重建问题。

OpenCV 或任何其他 Python 包中是否有将点从 2D 投影到 3D 给定的方法

  1. R - 一个旋转矩阵,
  2. T - 平移矩阵,
  3. 焦距 ( f_x, f_y) 和光学中心 ( c_x, c_y)。