首页 > 其他分享 >如何将图片上的像素坐标(u, v)投影到世界坐标系中

如何将图片上的像素坐标(u, v)投影到世界坐标系中

时间:2024-04-20 22:26:51浏览次数:24  
标签:fx fy 投影 像素 cy zw 坐标系 r21 r20

如何将图片上的像素坐标(u, v)投影到世界坐标系中, 即得到 \((x_w, y_w, z_w)\). 数学表达如下

\[\begin{align*} s\begin{bmatrix} u\\v\\1 \end{bmatrix} &= \begin{bmatrix} f_x & 0 & c_x & 0 \\ 0 & f_y & c_y & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} r_{00} & r_{01} & r_{02} & t_0 \\ r_{10} & r_{11} & r_{12} & t_1 \\ r_{20} & r_{21} & r_{22} & t_2 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_w\\y_w\\z_w \\1 \end{bmatrix} \end{align*} \]

通过两个方程求解3个未知数具有无穷个解, 不过我们的问题具有特殊性, 即我们的世界坐标系的 \(xoy\) 平面建立在路面上, 而我们已知车的3D模型, 那么在假设关键点预测和路面方程完全没有误差的情况下, 我们是知道图片中车关键点在世界坐标系下的高度的(即已知 \(z_w\)), 这样问题就转化为解答二元二次方程, 唯一解.

解如下

xw   ((cx*r21 + fx*r01 - r21*u)*(cy*r22*zw + cy*t3 + fy*r12*zw + fy*t2 - r22*v*zw - t3*v) - (cy*r21 + fy*r11 - r21*v)*(cx*r22*zw + cx*t3 + fx*r02*zw + fx*t1 - r22*u*zw - t3*u))/((cx*r20 + fx*r00 - r20*u)*(cy*r21 + fy*r11 - r21*v) - (cx*r21 + fx*r01 - r21*u)*(cy*r20 + fy*r10 - r20*v))
yw   (-(cx*r20 + fx*r00 - r20*u)*(cy*r22*zw + cy*t3 + fy*r12*zw + fy*t2 - r22*v*zw - t3*v) + (cy*r20 + fy*r10 - r20*v)*(cx*r22*zw + cx*t3 + fx*r02*zw + fx*t1 - r22*u*zw - t3*u))/((cx*r20 + fx*r00 - r20*u)*(cy*r21 + fy*r11 - r21*v) - (cx*r21 + fx*r01 - r21*u)*(cy*r20 + fy*r10 - r20*v))

标签:fx,fy,投影,像素,cy,zw,坐标系,r21,r20
From: https://www.cnblogs.com/nowgood/p/18148284

相关文章

  • 学习unigui【24】Echart的使用:多个坐标系
    使用echart非常简单,网上有介绍。主要放一个unihtmlFrame。然后unihtmlframe.text:='html的代码',就会渲染(初次调用echart的js库要一点稍后)。unigui本身的chart貌似不能动态生成。option={title:[{text:'TOP10(抗菌药物使用人数)',top:'1......
  • 使用OpenCV来实现读取一个目录下的所有图像,然后将它们调整大小为1920x1080像素,并保存
    使用OpenCV来实现读取一个目录下的所有图像,然后将它们调整大小为1920x1080像素,并保存的步骤如下:安装OpenCV库:如果你还没有安装OpenCV库,可以通过pip安装:pipinstallopencv-python编写Python脚本:importosimportcv2defresize_images_in_directory(source_dir,target......
  • 像素画——色彩基础
    目录色调(Hue)饱和度(Saturation)亮度(Value)alpha通道,取值(0-255)色温色彩设计例子1,色调(Hue)是用来描述颜色本身。红,黄,蓝HSV颜色模型从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°////2.饱和度(Saturation)饱和度的取值是0%-100%,饱和度越高......
  • 像素画——绘制基础步骤
    步骤线条轮廓色彩明暗关系抗锯齿(AA)减噪成果1.线条轮廓要先画出物体的轮廓,我们再进行颜色的区分,(色块)若是想将物品画的比较的直的话。要把。斜边的的顶点部分点上。反之亦然:比如正方形,去掉最周边的顶点,会显得他比较的圆润。2.颜色选择是处于递进关系。请新手我们合理......
  • 像素画——明暗基础
    目录体积阴影(VolumeShadow)明暗交界线(Terminator)投射阴影反射高光(Reflection)高光(Highlight)边缘光(RimLight)漫反射光(BounceLight)成果1.体积阴影(VolumeShadow)最常见的阴影,是自投射的软阴影,由于光被物体自身阻挡而产生2.明暗交界线(Terminator)......
  • 第六个OpenGL程序,Coordinate Systems 坐标系统 后续之 3D 3
    效果: 代码main.cpp:#include<iostream>#include<glad/glad.h>#include<glfw3.h>#include"Shader.h"#defineSTB_IMAGE_IMPLEMENTATION#include<stb_image.h>#include<glm/glm.hpp>#include<glm/gtc/matrix_transfo......
  • 第六个OpenGL程序,Coordinate Systems 坐标系统 后续之 3D 1(这个图形有点奇怪)
    效果:代码main.cpp:#include<iostream>#include<glad/glad.h>#include<glfw3.h>#include"Shader.h"#defineSTB_IMAGE_IMPLEMENTATION#include<stb_image.h>#include<glm/glm.hpp>#include<glm/gtc/matrix_transfo......
  • 第六个OpenGL程序,Coordinate Systems 坐标系统
    效果: 代码main.cpp:#include<iostream>#include<glad/glad.h>#include<glfw3.h>#include"Shader.h"#defineSTB_IMAGE_IMPLEMENTATION#include<stb_image.h>#include<glm/glm.hpp>#include<glm/gtc/matrix_trans......
  • Opencv实现边界填充、两个图片像素直接相加后超过255的处理方式(阈值处理方式),一个窗口
     opencv两个图片直接相加,会直接相加,如果超过255,会取模。 print((img_cat+img_cat2)[:5,:,0])#0-255若相加越界后294用294%256获得余数38可以使用这种方式查看。展示的是前5行,所有列的第一个通道的值。还有一种方法是cv2.add(),这个方法会直接将超过255的值设置为25......
  • 自动驾驶中各种坐标系辨析
    坐标系辨析0.地球椭圆体1.大地坐标系2.eci地心惯性坐标系3.地心地固坐标系(ECEF坐标系,E系)4.站心坐标系(ENU坐标系)5.UTM坐标系6.LTM坐标系7.IMU坐标系8.代码部分8.1LLA(大地坐标系坐标、经纬度海拔)坐标转LTM系(ENU系)下的三维笛卡尔坐标8.2LLA......