- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试重建相机捕获的物体的 3d 位置,它在 2d 平面上的位置和所有相机校准参数。我正在使用 Python 和 OpenCV。
我已经搜索并尝试了多种解决方案,但无法实现我想要的转换。我的主要问题是我没有足够的图形背景来理解和执行所需的确切步骤集。
<?xml version="1.0"?>
<opencv_storage>
<intrinsic type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>f</dt>
<data>
4.04310596e+003 0. 9.15485046e+002
0. 4.03170264e+003 4.26480865e+002
0. 0. 1.</data></intrinsic>
<rotation_vector type_id="opencv-matrix">
<rows>1</rows>
<cols>3</cols>
<dt>f</dt>
<data>
-4.56216574e-001 1.76409543e+000 2.05966163e+000</data></rotation_vector>
<rotation_matrix type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>f</dt>
<data>
-8.71332586e-001 -4.90659207e-001 5.74691826e-003 8.10814202e-002
-1.32417098e-001 9.87872243e-001 -4.83947605e-001 8.61231267e-001
1.55162677e-001</data></rotation_matrix>
<translation type_id="opencv-matrix">
<rows>1</rows>
<cols>3</cols>
<dt>f</dt>
<data>
3.16912168e+004 -1.31297791e+003 8.73433125e+004</data></translation>
<distortion type_id="opencv-matrix">
<rows>1</rows>
<cols>4</cols>
<dt>f</dt>
<data>
4.86164242e-001 -3.57553625e+000 -1.77373271e-002 -3.11793620e-003</data></distortion>
<points_2d type_id="opencv-matrix">
<rows>10</rows>
<cols>1</cols>
<dt>"2f"</dt>
<data>
1454. 223. 463. 375. 742. 461. 1163. 588. 1704. 755. 646. 550. 129.
497. 567. 690. 196. 738. 546. 935.</data></points_2d>
<points_3d type_id="opencv-matrix">
<rows>10</rows>
<cols>3</cols>
<dt>f</dt>
<data>
0. 34000. 0. 36000. 20160. 0. 36000. 7.31248877e+003 0. 36000.
-7.31248877e+003 0. 36000. -20160. 0. 41500. 0. 0. 47000. 9160. 0.
47000. -9160. 0. 52500. -9160. 0. 52500. -20160. 0.</data></points_3d>
<reprojection_errors type_id="opencv-matrix">
<rows>1</rows>
<cols>20</cols>
<dt>f</dt>
<data>
19. -2. -9. -2. 0. 1. -1. -1. 3. 1. 0. 1. -19. 0. -8. 0. -4. 2. 9.
1.</data></reprojection_errors>
</opencv_storage>
这就是我所拥有的,例如 2d 和 3d 点以及所有相机校准参数:固有、失真等。
执行 2d 到 3d 转换需要什么操作顺序?看数据,想把(1454.0, 223.0)转换成(0.0, 34000.0, 0.0)等等。
最佳答案
在this question的第二部分您可以找到一些数学来解决您的问题,以及解决方案的 C++ 实现。
无论如何,我已经在 Python 中实现了类似的解决方案,如下所示:
matrices = [
"intrinsic",
"rotation_vector",
"rotation_matrix",
"translation",
"distortion",
"points_2d",
"points_3d",
"reprojection_errors"
]
# Load data from persistent storage
dic = {}
data = cv2.FileStorage(storage_file, cv2.FILE_STORAGE_READ)
for m in matrices:
dic[m] = data.getNode(m).mat()
# Prepare matrices
rotation_matrix = np.mat(dic["rotation_matrix"])
translation_vector = np.mat(dic["translation"])
intrinsic_matrix = np.mat(dic["intrinsic"])
# Extrinsic Parameters Matrix
translation_vector_transposed = np.transpose(translation_vector)
extrinsic_matrix = np.concatenate((rotation_matrix, translation_vector_transposed), axis=1)
# Projection Matrix
projection_matrix = intrinsic_matrix * extrinsic_matrix
# Homography Matrix
p11 = projection_matrix[0,0]
p12 = projection_matrix[0,1]
p14 = projection_matrix[0,3]
p21 = projection_matrix[1,0]
p22 = projection_matrix[1,1]
p24 = projection_matrix[1,3]
p31 = projection_matrix[2,0]
p32 = projection_matrix[2,1]
p34 = projection_matrix[2,3]
homography_matrix = np.array([[p11,p12,p14], [p21,p22,p24], [p31,p32,p34]], dtype=np.float)
homography_matrix_inverse = inv(homography_matrix)
for i in range(0,10):
# Prepare points
np.set_printoptions(suppress=True)
point_2D = np.append(np.array(dic["points_2d"][i]), np.array([[1]]), axis=1)
print("\nPoint2D:", end=" ")
print_point(point_2D)
point_3d_expected = dic["points_3d"][i]
print("\nPoint3D Exptected:", end=" ")
print_point_simple(point_3d_expected)
# Projection
point_3D_w = np.mat(homography_matrix_inverse) * np.mat(np.transpose(point_2D))
# Normalization
point_3D = np.divide(point_3D_w,point_3D_w[2])
point_3D[2] = 0
# Show Result
print("\nPoint3D:", end=" ")
print_point(point_3D)
print('')
希望对您有所帮助。
关于opencv - 如何在考虑相机校准的情况下执行 2d 到 3d 重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734940/
如果我使用 alter index x rebuild 重建不可用的索引,是否会重新评估之前使用该索引的任何 SQL 的执行计划? 我知道在我使用的数据库版本 - Oracle 10.2.0.4.0
我正在研究 3d 重建。现在当我考虑一对图像时。我有一组对应点。我有我的相机详细信息。例如我有焦点细节,旋转和平移矩阵(4 * 4)。我想在 3D(三角剖分)中投影我的点。因此,据我所知,因子代数非常
从教程中:https://programtalk.com/vs2/?source=python/8176/opencv-python-blueprints/chapter4/scene3D.py 我不
我需要您的帮助和建议。这个问题包括以下几项:某房间的照片,该房间站在严格固定位置的房间内(一个房间围绕轴线旋转)。如何将所有这些图片组合在一起,从而产生一种效果,就像我们用眼睛看到的一样?从一点开始就
嘿那里,以下问题:我在工作中使用一个相当奇怪的 Linux 发行版(Centos 5),它似乎有一个较旧的内核(或者至少在内核中存在一些差异),并且您不能简单地更新它。我需要安装的程序需要一个函数 c
我读了一些关于受限玻尔兹曼机的文章。这些机器的重建能力经过了测试。我了解训练是如何进行的,但不了解重建是如何完成的。有人可以给我一些提示吗? 最佳答案 杰夫·辛顿 (Geoff Hinton) 的演讲
如果轻量级迁移失败,我将尝试重建核心数据数据堆栈,并将用户送回登录屏幕。我正在通过将一对多关系更改为一对一关系来对此进行测试。 起初,我在删除新的 persistentStoreCoordinator
以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,column list 表示字段列表(如:`id`,`order_id`)。 1、创建索引 索引的
当您根据 ListView.builder 和 ListView.separated valueKey = key; return _messages
切换底部导航页面后,我有一个非常烦人的谷歌地图 flutter 重建问题。我已经坚持了最后一次缩放和相机位置,但是每次我进入 map 页面时,小部件都会自行重建。如何预防? 最佳答案 采用 Autom
我是 Python 的新手。我在重建一个错误的 Dataframe 时遇到了麻烦。我的数据框如下所示: df = pd.DataFrame({'col1': ['id 1', 'id 2', 'tes
我正在尝试从 2 个图像中实现 3d 重建。我遵循的步骤是, 1. Found corresponding points between 2 images using SURF. 2. Impleme
// Start with this JSON var initialJson = { "rows": [{ "ID": 123, "Data": 430910, "Ver
在有状态的小部件中,我有一个导航部分,用户可以在其中选择父项,并在子项下方显示。 当我选择父级也可以重建子部件时,但是当我导航抛出父项而不选择一个子部件时,父级也可以重建(这是正常的),但是子部件也可
我有一个网络摄像头,它可以围绕人的头部以给定的角度步长旋转,并为每一步获取一张图片。 我正在寻找一个免费的开源库,该库从获取的图像集开始,使我能够生成代表人头部的 3D 表面,或者至少是定义明确的 3
我想从一行中读取一个字符串,然后将其放入一个变量中,该变量随后用作文件名。该字符串位于 .csv 文件中的第二行末尾。由于不必要的标题,需要删除第一行。还有‘;’旧 .csv 文件中使用的内容需要替换
我正在使用file-embed如此封装: import qualified Data.ByteString as B import qualified Data.ByteString.Internal
我的 makefile 总是重建,不明白为什么.. 这里是: SRC = $(DIR)/my_getnbr.c \ $(DIR)/my_isneg.c \ $(DI
我有一个附带编辑器的 Eclipse 插件。 我添加了更改语法突出显示颜色的首选项,但这些更改仅在我手动重新启动编辑器后才适用。 我通过一个 DefaultDamagerRepairer 实现了语法高
我有一段 php 可以输出 div(取决于数组中有多少个)并为该 div 分配一个 id(即 div_1、div_2)等 我还设置了一个隐藏字段,其中包含输出了多少个 div 的计数(divcount
我是一名优秀的程序员,十分优秀!