小编smi*_*man的帖子

从两个Kinect深度图中提取投影单应性

从Kinect深度图获得两个连续的3D点云1和2(不是整个云,比如用OpenCV的GoodFeaturesToMatch从云中选择的100个点),我想从1到2计算摄像机的单应性.我理解这是一个投影变换,它已经由很多人完成了:这里(幻灯片12),这里(幻灯片30)这里似乎是经典论文.我的问题是,虽然我是一名称职的程序员,但我没有数学或触发技巧将其中一种方法转化为代码.由于这不是一个简单的问题,我为解决以下问题的代码提供了大量的赏金:

相机位于原点,沿Z方向看,不规则的五面体[A,B,C,D,E,F]: 相机位置1

相机向左移动-90mm(X),向上移动60mm(Y),向前移动+ 50mm(Z)并向下旋转5°,向右旋转10°,逆时针旋转-3°: 相机位置2

旋转整个场景以使相机返回其原始位置允许我在2处确定顶点的位置: 在此输入图像描述

用于准备它的3DS Max文件是最大1,最大2最大3

以下是顶点之前和之后的位置,内在函数等: 顶点和内在函数

请注意,camera2的顶点不是100%准确,有一些故意的噪音.

这是Excel文件中的数字

我需要的代码,必须可以很容易地翻译成VB.Net或C#,必要时使用EMGUCV和OpenCV,获取2组顶点和内在函数并生成此输出:

Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3
Run Code Online (Sandbox Code Playgroud)

我不知道单应性坐标的单应性是3X3还是3X4,但它必须允许我将顶点从1转换为2.

我也不知道值a1,a2等; 那是你必须找到的; ;-)

500赏金提供'替换'我提供给这个非常相似的问题的赏金,我在那里添加了一个指向这个问题的评论.

编辑2:我想知道我问这个问题的方式是否具有误导性.在我看来,问题更多的是点云拟合而不是相机几何(如果你知道如何平移和旋转A到B,你知道相机变换,反之亦然).如果是这样,那么也许可以用Kabsch的算法或类似的方法获得解决方案

homography projective-geometry kinect

15
推荐指数
1
解决办法
3513
查看次数

数据库索引:好事,坏事还是浪费时间?

这里通常建议添加索引作为性能问题的补救措施.

(我说的只是阅读和查询,我们都知道索引会使写入速度变慢).

多年来,我在DB2和MSSQL上多次尝试过这种补救措施,结果总是令人失望.

我的发现是,无论一个指数如何变得更好,"它显得更好",结果表明查询优化器更加智能,而我精心选择的索引几乎总是让事情变得更糟.

我应该指出,我的经历主要涉及小桌子(<100'000行).

任何人都可以提供一些关于索引选择的实用指南吗?

正确的答案是建议列表如下:

  • 从不/始终索引小于/大于NNNN记录的表
  • 从不/始终考虑多字段键上的索引
  • 从不/始终使用聚簇索引
  • 永远/永远不会在单个表上使用多于​​NNN索引
  • 从来没有/总是添加一个索引[某些神奇的条件,我很想知道]

理想情况下,答案将给出一些有益的例子.

sql database-design cross-platform

13
推荐指数
3
解决办法
6940
查看次数

从单应性中提取变换和旋转矩阵?

我有一个来自相机的2个连续图像,我想估计相机姿势的变化: 两张相机移动的照片

我计算光流量:

Const MAXFEATURES As Integer = 100
imgA = New Image(Of [Structure].Bgr, Byte)("pic1.bmp")
imgB = New Image(Of [Structure].Bgr, Byte)("pic2.bmp")
grayA = imgA.Convert(Of Gray, Byte)()
grayB = imgB.Convert(Of Gray, Byte)()
imagesize = cvGetSize(grayA)
pyrBufferA = New Emgu.CV.Image(Of Emgu.CV.Structure.Gray, Byte) _
    (imagesize.Width + 8, imagesize.Height / 3)
pyrBufferB = New Emgu.CV.Image(Of Emgu.CV.Structure.Gray, Byte) _
    (imagesize.Width + 8, imagesize.Height / 3)
features = MAXFEATURES
featuresA = grayA.GoodFeaturesToTrack(features, 0.01, 25, 3)
grayA.FindCornerSubPix(featuresA, New System.Drawing.Size(10, 10),
                       New System.Drawing.Size(-1, -1),
                       New Emgu.CV.Structure.MCvTermCriteria(20, 0.03))
features = …
Run Code Online (Sandbox Code Playgroud)

vb.net opencv matrix homography emgucv

8
推荐指数
2
解决办法
8229
查看次数

将向量变换到另一个参考系

我有一辆绿色车辆,它将很快与一个蓝色物体(距离立方体 200 米)相撞\n透视图

\n\n

它在 [-100,0,200] 处有一个 Kinect 深度相机 D,可以看到立方体的角(灰色球体)\n深度相机视图

\n\n

测量的深度为 464,位于 X 平面中的 6.34\xc2\xb0 处和 Y 平面中的 12.53\xc2\xb0 处。\n顶视图\n左视图

\n\n

我想计算角点的位置,如果在 [150,0,0] 处有一个摄像机 F,它会出现这样的位置:\n相机视图

\n\n

换句话说,将红色向量变换为黄色向量。我知道这是通过变换矩阵实现的,但我不知道如何从 DF 向量 [250,0,-200] 计算矩阵或如何使用它;我的高中数学可以追溯到 40 年前。

\n\n

math.se 有一个类似的问题,但它没有涵盖我的问题,而且我在 robots.se 上也找不到任何内容。

\n\n

我意识到我应该展示一些我尝试过的代码,但我不知道从哪里开始。如果有人能帮助我解决这个问题,我将非常感激。

\n

coordinate-transformation

2
推荐指数
1
解决办法
1万
查看次数

Ada:如何访问向量元素?

我有一个集合,我故意想在堆上分配它们并“通过引用”访问它们:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Containers.Indefinite_Hashed_Maps;
with Ada.Containers; use Ada.Containers;

procedure Main is
    
    type Thing_Key is new Integer;
    
    type Thing is record
        Key  : Thing_Key;
        Data : Integer;
    end record;
    
    type Thing_Access is access all Thing;
    
    function Image (T : Thing) return String is
      (T.Key'Image & '(' & T.Data'Image & ')');
    
    function "=" (A, B : Thing) return Boolean is
      (A.Key = B.Key);
    
    function Thing_Hash (K : Thing_Key) return Hash_Type is
      (Hash_Type (K));

    package Thing_Map is new
      Ada.Containers.Indefinite_Hashed_Maps
         (Key_Type …
Run Code Online (Sandbox Code Playgroud)

pointers ada

2
推荐指数
1
解决办法
979
查看次数

Ada:如何组织嵌套包

假设我们有一辆车,它从 IMU 获取它的位置。IMU 包由几个私有组件组成,它编排这些组件以计算车辆在空间中的状态:

with IMU; use IMU;
Package Vehicle is
...
end vehicle; 

Package IMU is

    type Attitude is record
        Lat, Lon: Angle;
        Pitch, Roll, Yaw: Angle;
        GroundSpeed: Speed;
        ...
    end record
    
    function Get_Position return Attitude is ...
    
    Package GPS is
    ...
    end GPS;
    
    Package Accelerometer is
    ...
    end Accelerometer;
    
    Package Gyro is
    ...
    end Gyro;
end IMU;
Run Code Online (Sandbox Code Playgroud)

GPS、加速度计和陀螺仪的内部结构仅在 IMU 环境中有意义;它们必须完全隐藏在 Vehicle 之外。

在单个源文件中声明 IMU 及其所有子组件将难以阅读和维护;我希望每个子组件都在它自己的源文件中。如果我在 IMU 级别对它们进行编码,则车辆将能够访问 GPS,这是错误的。

构建嵌套包的最佳实践是什么?

structure ada package

2
推荐指数
1
解决办法
80
查看次数