ceres_solver解PnP平差问题、Matlab数据制作

网上的PnP平差没有数据,很痛苦,自己制作数据来解
根据其次坐标的推导公式
[u;v ]
在Matlab中制作数据(矩阵运算比较方便_)

clc
clear
X = zeros(15, 3);
x = zeros(15, 2);
K=[25 0 0;0 25 0;0 0 1;]%相机内参数矩阵
R=[0.4770710827172032, -0.7476726229304006, -0.4619402893831741;%旋转矩阵
 0.653281340399395, 0.653280157390419, -0.3826859368279936;
 0.5879002230999792, -0.1192085772095462, 0.8001016452918156];
%T表示投影矩阵P的第四列前三行
P4=[31.36648617639075;
 -17.35639716512237;
 -40.18578173498011];
T=inv(R)*P4;%[u;v]=K*R*[X;Y;Z]+T
%以下为带入一组数据验证公式的正确性
%A=K*(R*([50, 50, 75]')+P4);
%A=A/A(3)
for i = 1:15
    
    px = (101-99)*rand() + 99;
    py = 2*rand() - 1;
    pz = 2*rand() + 2;
    X(i,1)=px;
    X(i,2)=py;
    X(i,3)=pz;
    m = K*R* ([px;py;pz]-P4);
    u = m(1) / m(3);
    v = m(2) / m(3);
    x(i,1) = u;
    x(i,2) = v;
    
end
XT=X;
xt=x';
%一下为一种将数据保存.txt格式的方法
%      dlmwrite('myFile.txt',X,'delimiter',',')
%      type('myFile.txt')
%       dlmwrite('myFile2.txt',x,'delimiter',',')
%      type('myFile2.txt')
fileID1=fopen('X.txt','w');
fprintf(fileID1,'corners3D.push_back(Point3f(%1f, %1f, %1f));\n',XT);
fclose(fileID1);
type('X.txt')
fileID2=fopen('x2.txt','w');
fprintf(fileID2,'corners2D.pus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值