在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在已知4组及以上的二维三维对应点以后,就可以利用POSIT算法计算出三维以及二维模型的映射透视投影矩阵系数(也就是求得二维三维的映射矩阵),不废话,直接上代码以及效果截图: ①主代码MYposUSE.m: (POSIT函数estimatePose_MMedges不贴出来了,详细代码我在百度云提供免费下载链接:https://pan.baidu.com/s/1ok144mEzfHL1x1m8xGBACw 密码:qfm7) P3dALL=importdata('D:/du/2dsegment/personBAI/personBAI.xyz');% 输入:三维模型,53490个点的XYZ坐标 P3dALL=P3dALL';P3d= reshape(P3dALL,160470,1);% 53490*3 A2d=importdata('D:/du/2dsegment/personBAI/3d2d-pairs-2d.txt');% 输入:二维模型对应点坐标 % A3d=importdata('D:/du/3d2d-pairs-3d.txt'); B2d=A2d'; Index=importdata('D:/du/2dsegment/3dIndex.txt');% 输入:三维模型对应点索引号(规则是从1开始计数) [R,t,s]=estimatePose_MMedges( P3d,B2d,Index ); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tem1=R*P3dALL; % tem2=tem1(:,1:2); %tem2: N*2维数 tem2=tem1(1:2,:); %tem2: 2*N维数 TT=zeros(2,53490); for iii = 1:53490 TT(:,iii)=t; %TT: 2*53490维数 end RES0=tem2+TT; %RES0: 2*53490维数 MYres=s*RES0; MYres=MYres'; %MYres: 53490*2维数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %下面两种保存方式都可以(注释:dlmwrite保存小数点后n位)% 输出:保存53490个三维点都投影到二维图像的二维坐标: dlmwrite('D:/du/2dsegment/personBAI/project2d.txt',MYres,'delimiter', '\t','precision','%6.5f') % save d:/du/project2d-person1.txt -ascii R ②效果扩展,求出矩阵很有用。 例如,我输入一张人脸图片,并且利用三维重建技术求得3DMM三维模型,我们可以利用POSIT算法求得矩阵。 因为3DMM三维人脸模型的区域分割索引是知道的,利用project2d.txt,就可以得到二维人脸区域分割结果,如已知 (输入:彩色图,彩色图重建的3DMM模型,3DMM的三维分割文件,二维三维对应点文件) 就可以输出:project2d.txt,并利用它分割二维模型,得到:,利用一些轮廓检测算法,可以继续得到精细化轮廓。(扩展运用代码比较杂,就不贴了。可以按照以上思路写出,这重点在于POSIT算法,其他可以用opencv来写。) |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论