假设我们有一个带有平面的3d空间,其中有一个任意方程:ax + by + cz + d = 0现在假设我们在该平面上选择3个随机点:(x0,y0,z0)(x1,y1,z1 )(x1,y1,z1)
现在我对这架飞机有不同的观点(相机).我的意思是我有一个不同的相机,从不同的角度来看这个飞机.从相机的角度来看,这些点具有不同的位置.例如(x0,y0,z0)将是(x0',y0')和(x1,y1,z1)将是(x1',y1')和(x2,y2,z2)将是(x2',y2) ')从新相机的角度来看.
所以这是我的一个难题!我想从新的摄像机视角中选择一个例如(X,Y)的点,并告诉它在该平面上的位置.我所知道的是3点及其在3d空间上的位置以及它们在新摄像机视图上的投影位置.
你知道平面方程和摄像机位置的系数(以及投影),还是只有六点? - 尼尔斯
我知道前3分的位置.因此我们可以计算出平面的系数.所以我们确切地知道了飞机的位置(0,0,0).然后我们有相机只能看到积分!因此,相机唯一看到的是3点,它也知道它们在3d空间中的位置(并确保它们在2d摄像机视图平面上的位置).毕竟我想看相机视图,选择一个点(例如(x1,y1))并告诉那个平面上的那个点.(当然,这个(X,Y,Z)点应该适合平面方程).此外,我对相机位置一无所知.
我有一个图像和几个已知点及其到图像平面的投影。(每个 3d 点都有到 2d 的投影)。我的目标是找到 4x4 矩阵,以便轻松计算任何 3d 点到图像平面的投影。我尝试使用本主题中的蒙特卡罗方法:如何将 2D 点反向投影为 3D? 但结果矩阵适用于 oXY 平面,不适用于 Z 坐标(非零 Z 的点投影不正确)。我还使用了 OpenCV.CalibrateCamera 方法。我得到了旋转矩阵、相机矩阵和平移向量,但它对于非零 Z 点也不好。另外,我对3个矩阵不感兴趣,我只想得到一个4x4的矩阵用于投影和非投影点。
我很确定我的问题已经解决,但不知道如何解决。
所以首先我有这样的图像(当然,我在2d中有所有点坐标,所以我可以重新生成线并检查它们彼此交叉的位置)
alt text http://superior0.narod.ru/2d.jpg
但是,嘿,我有另一张相同线条的图像(我知道它们是相同的)和我的点的新坐标就像在这张图片上的 alt文本http://superior0.narod.ru/3d.jpg
所以...现在在第一张图像上有点(坐标),我如何确定第二张图像上的平面旋转和Z深度(假设第一个中心位于点(0,0,0)而没有旋转)?
我正在为赌场监控软件编写一个模块。
一些上下文:
我从不同时间提取的视频中提取了几张图像。我有一个参考甲板总是在我知道大小的固定位置。假设相机的畸变、焦距和距离是未知的(这将是商业销售的软件包,因此这些参数是未知的)。
正在工作:
我已经应用了精明的边缘检测和 houghlines 来获得两个甲板的像素高度。此外,前面甲板的所有角落的坐标都是已知的,因为它始终处于相同方向的固定位置。
当参考平台与我尝试测量的平台的距离不同但离相机更近时,问题就开始了。在这种情况下,由于其中一副牌更靠近相机,因此尽管后面的一副牌包含更多牌,但两副牌似乎具有相同的像素高度。
这是一个视觉示例:
实际上,两副牌都有 52 张卡片,但靠近相机的那一张是 83 像素,而后面的那一张是 63 像素。
如何标准化我拥有的参考背景中的甲板的值?我发现了一个类似于在图像中移动时计算大小的问题,但这使用了我不熟悉的 openGL(如何将 2D 点反向投影到 3D?)。我正在尝试使用 Python 中的计算机视觉/图像处理库(我目前使用 ImageMagick 用于精明的边缘和霍夫线)来实现这一点(如果您认为 Python 不合适,我愿意接受关于使用另一种编程语言的建议)。
编辑:
总结我想要实现的目标:我想知道这两个对象如何比较高度。我如何将后面的一个缩放到它在前面一个旁边的大小,以便我可以比较两者?