图像处理中常用的坐标系转换

共有四种坐标系

图像处理中常用的坐标系转换

; 世界坐标系——>相机坐标系

图像处理中常用的坐标系转换
[Xc,Yc,Zc]T表示相机坐标,[Xw,Yw,Zw,1]T表示归物体所在的世界坐标。R表示旋转矩阵,T表示平移矩阵。

相机坐标系——>图像坐标系

图像处理中常用的坐标系转换

; 图像坐标系——>像素坐标系

图像处理中常用的坐标系转换
通过相机标定,我们可以获取相机的内参数和外参数矩阵
内参数矩阵:
https://www.cnblogs.com/wangguchangqing/p/8126333.html

其中Fx=f _dx,Fy=f_dy,u0=cx,v0=cy。

综合上述,则总公式如下:

图像处理中常用的坐标系转换

; 转换代码


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
using namespace ml;

double R[] =
{
    -0.000946327557628447 ,  -0.999910170350762, -0.0133699548714382,
    0.00924509852185524    ,  0.0133606413543068, -0.999868001996225,
    0.999956815376281   ,  -0.00106980919429913,   0.00923162449479668
};

double T[] =
{
    0.106387638682809, - 0.0655453193303612, - 0.0423556338963880
};

int main()
{

    double Xw = 1.16;
    double Yw = 1.18;
    double Zw = 0.253;

    double Xw1 = 1.52;
    double Yw1 = 0.274;
    double Zw1 = -0.433;

    double Xw2 = 1.51;
    double Yw2 = 0.274;
    double Zw2 = -0.346;

    double Xw3 = 5.12;
    double Yw3 = 1.94;
    double Zw3 = 1.26;

    double Xw4 = 5.62;
    double Yw4 = 1.3;
    double Zw4 = 1.32;

    double Xc = 0;
    double Yc = 0;
    double Zc = 0;

    double Xc1 = 0;
    double Yc1 = 0;
    double Zc1 = 0;

    double Xc2 = 0;
    double Yc2 = 0;
    double Zc2 = 0;

    double Xc3 = 0;
    double Yc3 = 0;
    double Zc3 = 0;

    double Xc4 = 0;
    double Yc4 = 0;
    double Zc4 = 0;

    double Fx = 901.542952546068;
    double Fy = 899.822262198022 ;
    double Cx = 1014.57219246244;
    double Cy = 431.675147682217;
    double u = 0;
    double v = 0;
    double u1 = 0;
    double v1 = 0;
    double u2 = 0;
    double v2 = 0;
    printf("R[0]=%f  R[1]=%f  R[2]=%f \n R[3]=%f  R[4]=%f  R[5]=%f \n  R[6]=%f  R[7]=%f  R[8]=%f\n",
        R[0], R[1], R[2],R[3],R[4],R[5], R[6], R[7], R[8]);

    Xc = Xw*R[0] + Yw*R[1] + Zw*R[2] + T[0];
    Yc = Xw*R[3] + Yw*R[4] + Zw*R[5] + T[1];
    Zc = Xw*R[6] + Yw*R[7] + Zw*R[8] + T[2];

    Xc1 = Xw1*R[0] + Yw1*R[1] + Zw1*R[2] + T[0];
    Yc1 = Xw1*R[3] + Yw1*R[4] + Zw1*R[5] + T[1];
    Zc1 = Xw1*R[6] + Yw1*R[7] + Zw1*R[8] + T[2];

    Xc2 = Xw2*R[0] + Yw2*R[1] + Zw2*R[2] + T[0];
    Yc2= Xw2*R[3] + Yw2*R[4] + Zw2*R[5] + T[1];
    Zc2 = Xw2*R[6] + Yw2*R[7] + Zw2*R[8] + T[2];

    Xc3 = Xw3*R[0] + Yw3*R[1] + Zw3*R[2] + T[0];
    Yc3 = Xw3*R[3] + Yw3*R[4] + Zw3*R[5] + T[1];
    Zc3 = Xw3*R[6] + Yw3*R[7] + Zw3*R[8] + T[2];

    Xc4 = Xw4*R[0] + Yw4*R[1] + Zw4*R[2] + T[0];
    Yc4 = Xw4*R[3] + Yw4*R[4] + Zw4*R[5] + T[1];
    Zc4 = Xw4*R[6] + Yw4*R[7] + Zw4*R[8] + T[2];

    u = Fx*Xc / Zc + Cx;
    v=  Fy*Yc / Zc + Cy;
    printf("u=%f\n", u);
    printf("v=%f\n", v);

    u1 = Fx*Xc1 / Zc1 + Cx;
    v1 = Fy*Yc1 / Zc1 + Cy;
    printf("u1=%f\n", u1);
    printf("v1=%f\n", v1);

    u2 = Fx*Xc2 / Zc2 + Cx;
    v2 = Fy*Yc2 / Zc2 + Cy;
    printf("u2=%f\n", u2);
    printf("v2=%f\n", v2);

    double u3 = Fx*Xc3 / Zc3 + Cx;
    double v3 = Fy*Yc3 / Zc3 + Cy;
    printf("u2=%f\n", u2);
    printf("v2=%f\n", v2);

    double u4 = Fx*Xc4 / Zc4 + Cx;
    double v4 = Fy*Yc4 / Zc4 + Cy;
    printf("u4=%f\n", u4);
    printf("v4=%f\n", v4);

    Mat srcImage0 = imread("2.png");

    resize(srcImage0, srcImage0, Size(1920,1080), 0, 0, INTER_LINEAR);
    if (srcImage0.empty())
    {
        printf("[ALG ERROR][函数:%s][行号:%d],图片未正常读取,请检查输入路径十分正确 \n", __FUNCTION__, __LINE__, 1);
    }

    circle(srcImage0, Point(u3, v3), 10, Scalar(0, 0, 255), -1);
    circle(srcImage0, Point(u4, v4), 10, Scalar(0, 0, 255), -1);

    namedWindow("srcImage0", 0);
    imshow("srcImage0", srcImage0);
    waitKey(200);

    return 0;
}

相关转换代码

https://blog.csdn.net/guyuealian/article/details/104184551

参考:
https://blog.csdn.net/weizhangyjs/article/details/81020177
https://blog.csdn.net/baidu_38172402/article/details/81949447
https://www.cnblogs.com/wangguchangqing/p/8126333.html
https://blog.csdn.net/yangdashi888/article/details/51356385

Original: https://blog.csdn.net/mao_hui_fei/article/details/119761072
Author: 翟羽嚄
Title: 图像处理中常用的坐标系转换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/646091/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球