# 利用TPS网格变形修改人脸
# 一、需求分析
本次大作业包含必做和选做两项任务。
必做任务要求对给定图像(清华二校门)分别以最近邻、双线性和双三次插值方法实现旋转扭曲和畸变校正两种变换。其中旋转扭曲要求可以调整旋转角度和半径两个参数;畸变校正要求实现桶形和枕形两种畸变,同时可以调整半径。
选做任务需两张人脸图片,下面分别称为“待修改人脸”和“目标人脸”。分别给出两张脸上的68个关键点,要求利用TPS网格变形把待修改人脸的关键点特征变成目标人脸的特征。注意此处TPS变形后得到的只是一个坐标映射关系,仍需要通过插值得到最终的“修改后人脸”,这里可以利用必做部分的函数。
# 二、必做任务
## 2.1 方案设计
必做的几个关键步骤如下:
- 读入图片,以其中心为原点换算各像素点坐标
- 选择变形方式(旋转扭曲或畸变校正)
- 选择参数(旋转扭曲需选择旋转方向、角度、半径;畸变校正需选择桶形/枕形、半径)得到原图与变换后图片的坐标映射
- 选择插值方法(最近邻/双线性/双三次)并重新换算坐标
算法核心为(3)(4),下面说明这两部分的原理。
## 2.2 方案基本原理
### 2.2.1 旋转扭曲
![](https://www.writebug.com/myres/static/uploads/2022/9/21/5d300174d2e59715bb372746c6481185.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/13874525d3c396112cd114870356c629.writebug)
### 2.2.2 畸变校正
计算浮点坐标(x, y),对于桶形畸变有:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/8461c4dd8bab7b931b0ef842de226870.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/d3031747ec744b9f6e96fa80d250af43.writebug)
对于枕形畸变有
![](https://www.writebug.com/myres/static/uploads/2022/9/21/82ffd4535503a85b65b882db5fa69bff.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/700aa71283282b8903cd5d42483f5a0f.writebug)
输出(x, y)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/5dd4c11b1d30765020656bb166316612.writebug)
### 2.2.3 插值方法
- 最近邻插值
- 找到原图中离变换后得到的浮点坐标最近的像素点并将其像素值赋给该浮点坐标对应的新图中的像素点。
- 双线性插值
- 在原图中找到变换后得到的浮点坐标周围的四个像素点,根据以下公式计算出一像素值并将其赋给该浮点坐标对应的新图中的像素点。
![](https://www.writebug.com/myres/static/uploads/2022/9/21/8552ee536b799b2fe9912fbd002b51dc.writebug)
双三次插值
在原图中找到变换后得到的浮点坐标周围的十六个像素点,根据以下公式计算出一像素值并将其赋给该浮点坐标对应的新图中的像素点。
![](https://www.writebug.com/myres/static/uploads/2022/9/21/eedf1fd88183d11e6f00c2f74a636551.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/49c00a5a9ebe1b4e1bb99b4d24cf738b.writebug)
## 2.3 功能展示
![](https://www.writebug.com/myres/static/uploads/2022/9/21/684b9952a28e1552de10dce156e32837.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/c2b1209bdbc97e3946f462a1772aa314.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/c2b1209bdbc97e3946f462a1772aa314.writebug)
# 三、选做任务
## 3.1 方案设计
选做的几个关键步骤如下:
- 分别读入待修改人脸(及其关键点数据)和目标人脸(及其关键点数据)
- 实现TPS变形,得到修改后人脸与待修改人脸间的图像坐标映射
- 选择插值方法(最近邻/双线性/双三次)得到结果
- 算法核心为(2),下面说明这一部分的原理。
## 3.2 方案基本原理
薄板样条(Thin plate spline, TPS)是一种常见的插值模型,目标是寻找一个通过所有控制点的光滑曲面
![](https://www.writebug.com/myres/static/uploads/2022/9/21/9f1c90d0a3947fef37ce4f9aefc0c117.writebug)
,使得能量函数最
![](https://www.writebug.com/myres/static/uploads/2022/9/21/89b219bfa2066f1e26aa16406677b539.writebug)
小。
![](https://www.writebug.com/myres/static/uploads/2022/9/21/802b18d94175f150bf4544ff0de0419c.writebug)
给定n个控制点(目标人脸图)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/e1938af2e03f9377f0de73a49d1c076e.writebug)
,记
![](https://www.writebug.com/myres/static/uploads/2022/9/21/b9a190a26fceecba5048645a72d2979f.writebug)
假设目标点(待修改人脸图)为
![](https://www.writebug.com/myres/static/uploads/2022/9/21/636f50a54211be418e79da85c174bd08.writebug)
,记
![](https://www.writebug.com/myres/static/uploads/2022/9/21/abba5f2f643248a98454f3f61658b2ed.writebug)
则
![](https://www.writebug.com/myres/static/uploads/2022/9/21/5aac3adb2a88f6e86179d9e2acec976d.writebug)
其中
![](https://www.writebug.com/myres/static/uploads/2022/9/21/24cc974e05c97e213b8c42b3b4260420.writebug)
为线性方程组
![](https://www.writebug.com/myres/static/uploads/2022/9/21/fe254e64cf11214c7ba1ee5a2f40de68.writebug)
的解,
![](https://www.writebug.com/myres/static/uploads/2022/9/21/cff323e65847be93aacd16cee8eae2d2.writebug)
因此(2)需要完成的即
- 构造矩阵L和Y;
- 求解
![](https://www.writebug.com/myres/static/uploads/2022/9/21/66a1fc733a781ad986187eebeaa69cdd.writebug)
- ;
- 计算出
![](https://www.writebug.com/myres/static/uploads/2022/9/21/3a54dbd293331d45f29a7ae36525c41d.writebug)
- .
## 3.3 功能展示
![](https://www.writebug.com/myres/static/uploads/2022/9/21/c7b5d0829b655d03c5aa5998ee880907.writebug)
# 四、误差分析
## 4.1 观测误差
因为图片RGB为unit8类型,所以观测误差最大为
![](https://www.writebug.com/myres/static/uploads/2022/9/21/b697d2cc662e7572e46309df15a9ec2e.writebug)
## 4.2 舍入误差
运算中间过程使用的数据类型为C#的double(15位有效数字),舍入误差很小,基本可以忽略。在插值算法中对像素点赋值时将double转换为unit8类型,舍入误差最大为
![](https://www.writebug.com/myres/static/uploads/2022/9/21/6ee2c1e6add37b1eb784f530776b9fdc.writebug)
## 4.3 方法误差
最近邻插值
利用Math.Round()处理最近邻插值的非整点坐标,则有
![](https://www.writebug.com/myres/static/uploads/2022/9/21/6fc7d2a11a73b990471e2e50256494e5.writebug)
故截断误差上限为
![](https://www.writebug.com/myres/static/uploads/2022/9/21/3e0075996ac5d2893fec51e5cf3eb9a9.writebug)
由于数字图像是离散信号,需将微分替换为差分,即
![](https://www.writebug.com/myres/static/uploads/2022/9/21/49f1ea9877506e9a58b67f1ed3860f5f.writebug)
双线性插值
先分别计算各方向上的误差上限,再计算总误差上限。
对于
![](https://www.writebug.com/myres/static/uploads/2022/9/21/2a91a429216b7a24ce22cf11f724f394.writebug)
分量,需要计算
![](https://www.writebug.com/myres/static/uploads/2022/9/21/822d25a99afdc2a42b4088e6fd4d03b3.writebug)
和
![](https://www.writebug.com/myres/static/uploads/2022/9/21/4dec0656e5a04c1d59e1d0906f9da5ee.writebug)
两个方向的误差,有:
![](https://www.writebug.com/myres/static/uploads/2022/9/21/9e212a4ea755aef95d575182860d03e0.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/e161209c4911600095a950a14116f1c9.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/9/21/1f1773d54b4452334e9eb207b799fa65.writebug)
对于
![](https://www.writebug.com/myres/static/uploads/2022/9/21/5a7145ec44ecb2edf474bd1c46566ee1.writebug)
分量,同理有
![](https://www.wr
没有合适的资源?快使用搜索试试~ 我知道了~
利用TPS网格变形修改人脸(完整代码+实验报告)
共33个文件
jpg:16个
txt:10个
suo:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 28 浏览量
2023-01-12
14:41:30
上传
评论 1
收藏 3.61MB ZIP 举报
温馨提示
本次大作业包含必做和选做两项任务。 做任务要求对给定图像(清华二校门)分别以最近邻、双线性和双三次插值方法实现旋转扭曲和畸变校正两种变换。其中旋转扭曲要求可以调整旋转角度和半径两个参数;畸变校正要求实现桶形和枕形两种畸变,同时可以调整半径。 选做任务需两张人脸图片,下面分别称为“待修改人脸”和“目标人脸”。分别给出两张脸上的68个关键点,要求利用TPS网格变形把待修改人脸的关键点特征变成目标人脸的特征。注意此处TPS变形后得到的只是一个坐标映射关系,仍需要通过插值得到最终的“修改后人脸”,这里可以利用必做部分的函数。 必做的几个关键步骤如下: 读入图片,以其中心为原点换算各像素点坐标 选择变形方式(旋转扭曲或畸变校正) 选择参数(旋转扭曲需选择旋转方向、角度、半径;畸变校正需选择桶形/枕形、半径)得到原图与变换后图片的坐标映射 选择插值方法(最近邻/双线性/双三次)并重新换算坐标 算法核心为(3)(4),下面说明这两部分的原理。
资源推荐
资源详情
资源评论
收起资源包目录
利用TPS网格变形修改人脸.zip (33个子文件)
dddsheggy
THU_GATE.exe 35KB
LICENSE 1KB
input
THU.jpg 145KB
face-images
9.txt 3KB
2.jpg 104KB
1.txt 3KB
5.txt 3KB
6.jpg 28KB
6.txt 3KB
1.jpg 39KB
3.txt 3KB
4.txt 3KB
5.jpg 30KB
8.jpg 37KB
7.txt 3KB
2.txt 3KB
3.jpg 20KB
8.txt 3KB
7.jpg 24KB
9.jpg 19KB
4.jpg 53KB
README.txt 833B
output
gate_ro_nearest.jpg 70KB
gate_ro_bilinear.jpg 62KB
9-6.jpg 260KB
gate.pillow_bilinear.jpg 50KB
gate_bucket_bilinear.jpg 47KB
gate_ro_bicubic.jpg 67KB
实验报告.pdf 755KB
实验报告.docx 1.9MB
THU_GATE
THU_GATE.v11.suo 48KB
THU_GATE.sln 914B
README.md 10KB
共 33 条
- 1
资源评论
甜辣uu
- 粉丝: 8558
- 资源: 1103
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 7777端口抓包数据集
- IMG_0694.GIF
- 基于图像的三维模型重建C++源代码+文档说明(高分课程设计)
- 基于聚焦法的工件立体测量方案,根据数据进行三维重建 使用HALCON处理图像,MATLAB拟合数据+源代码+数据集+效果图
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功