• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab版本POSIT算法来计算三维以及二维人脸模型的映射透视投影矩阵 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在已知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来写。)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
studyRust-1【Rust的特点和应用场景】发布时间:2022-07-18
下一篇:
rust: Typical multi thread patterns发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap