联系QQ:

2181264433

新闻资讯
联系我们
联系:张女士
微信:扫一扫右侧二维码
QQ :2181264433
邮箱:2181264433@qq.com
地址:浙江省-嘉兴市-南湖区
网址:www.mhslogic.com
您当前位置:首页 > 国际资讯 > 正文国际资讯
MATLAB代做-FPGA代做-三维人脸模型贴图算法的研究与仿真
添加时间:2021-11-17 来源:本站整理

1.问题描述:

        针对目前三维人脸姿态校正算法的鲁棒性差和计算复杂的问题, 提出了一种基于法向量对齐的人脸姿态校正算法, 即 先通过计算离散高斯曲率获取面部的 3个特征点 , 然后计算这 3个特征点组成的平面的法线方向, 最后通过该法线的朝向进行 人脸姿态校正。 该方法计算量小, 适用性广, 实验结果表明, 校正效果好。

2.部分程序:

%计算离散拉普拉斯-贝尔特拉米算子。
function L = LaplaceBeltrami(F,V)
Fno = size(F,1);
Vno = size(V,1);
W = zeros(Fno,3);

if size(V,2)==2
    V = [V, zeros(Vno,1)];
end

%计算余切权
Vki = V(F(:,1),:) - V(F(:,3),:);
Vkj = V(F(:,2),:) - V(F(:,3),:);
Vij = V(F(:,2),:) - V(F(:,1),:);

% Compute W = [Wij, Wjk, Wki] = [ cot(theta_k), cot(theta_i), cot(theta_j)]
W(:,1) =  0.5*sum(Vki.*Vkj, 2) ./ sqrt( sum(cross(Vki, Vkj).^2, 2) );
W(:,2) = -0.5*sum(Vij.*Vki, 2) ./ sqrt( sum(cross(Vij, Vki).^2, 2) );
W(:,3) =  0.5*sum(Vkj.*Vij, 2) ./ sqrt( sum(cross(Vkj, Vij).^2, 2) );

K = sparse(F, F(:,[2, 3, 1]), W, Vno, Vno);
K = K + K';

%离散拉普拉斯-贝尔特拉米算子。
L = diag( sum(K, 2) ) - K;
 

%CEM
function uv = func_cem_map(F,V)
Vno = size(V,1);
[VB, VI] = BoundaryIndex(F);

uv = zeros(Vno,2);
[uv(VB,:), L] = InitialBoundaryMap(F, V);

tmp = -L(VI,VB)*uv(VB,:);
uv(VI,:) = L(VI,VI) \ tmp;

Ec0 = ConformalEnergy(uv, L, VB);
diff_Ec  = 1;
uv0  = uv;
iter = 0;
while iter < 3 && diff_Ec > 1e-6
    iter = iter+1;
    uvI_norm = sum(uv(VI,:).^2, 2);
    uvI_inv = uv(VI,:)./repmat(uvI_norm, 1, 2);
    rhs = -L(VB,VI)*uvI_inv;
    uv(VB,:) = L(VB,VB) \ rhs;
    
    mean_uvB = mean(uv(VB,:), 1);
    uv(VB,1) = uv(VB,1) - mean_uvB(1);
    uv(VB,2) = uv(VB,2) - mean_uvB(2);
    uv(VB,:) = VertexNormalize(uv(VB,:));
    
    tmp = -L(VI,VB)*uv(VB,:);
    uv(VI,:) = L(VI,VI) \ tmp;
    
    Ec = ConformalEnergy(uv, L, VB);
    diff_Ec = Ec0 - Ec;
    if diff_Ec < 0
        uv = uv0;
    else
        Ec0 = Ec;
        uv0 = uv;
    end
end

 

3.仿真结论:

扫一扫,关注我们