实训日记3:面部图像正则化

本周的实训中,使用Python完成了面部图像的正则化,包括normalizeImg函数进行图像正则化,rodrigues函数处理旋转角度向量和旋转矩阵的转换,以及normalize_data函数整合这两个过程。通过warpPerspective函数,将人脸图像投影到平行视角,实现了面部图像的标准规范化。测试结果显示正则化过程运行正常。
摘要由CSDN通过智能技术生成

本周使用python语言实现了面部图像的正则化,代码分为3部分:负责正则化图像的normalizeImg函数,把头部旋转角度向量和旋转矩阵互相转换的rodrigues函数,以及调用前两者正则化图像的normalize_data函数

normallizeImg:

负责正则化图像的normalizeImg函数如下:

import numpy as np
import cv2 as cv
import rodrigues as rod
from numpy import *
def normalizeImg(inputImg, target_3D, hR, gc, roiSize, cameraMatrix, focal_new=960, distance_new=600):
    distance=np.linalg.norm(target_3D)
    z_scale=distance_new/distance
    cam_new=np.array([[focal_new,0,roiSize[0]/2],[0.0,focal_new,roiSize[1]/2],[0,0,1.0]])
    scaleMat=np.array([[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,z_scale]])
    hRx=hR[:,0]
    forward=target_3D/distance
    forward=forward[:,0]
    #print(forward.shape,hRx.shape)
    down=np.cross(forward,hRx)
    down=down/np.linalg.norm(down)
    right = cross(down, forward);
    right = right/np.linalg.norm(right);
    rotMat=c_[right,down,forward].T
    t1=np.dot(cam_new,scaleMat)
    t2=np.dot(rotMat,np.linalg.inv(cameraMatrix))
    warpMat=np.dot(t1,t2)
    img_warped=cv.warpPerspective(inputImg,warpMat,roiSize,cv.INTER_LINEAR)

    #rotation normalize
    cnvMat=np.dot(scaleMat,rotMat)
    hRnew=np.dot(cnvMat,hR)
    hrnew=rod.rodrigues(hRnew)
    htnew=np.dot(cnvMat,target_3D)

    #gaze vector normalization
    gcnew=np.dot(cnvMat,gc)
    gvnew=gcnew-htnew
    gvnew=gvnew/np.linalg.norm(gvnew)

    return img_warped,hrnew,gvnew


其中使用了warpPerspective函数,是将成像投影到一个新的视平面的函数,即可以将摄像机以一定角度拍摄的人脸图像转化为平行于人脸拍摄的图像。效果如下:
在这里插入图片描述
在这里插入图片描述

rodrigues

rodrigues函数用于将旋转向量(31)和旋转矩阵(33)相互转换,代码如下:

import numpy as np
from numpy import *
e
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值