Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记

Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记

@(sinbad)[360sinbad@gmail.com]
-技术背景
-算法流程
-网格优化
-结果实现及分析


技术背景

因为其更广的FOV,超广角镜头越来越多的应用在手机上,带来更好的合影体验(这里的超广角指FOV大于94度,小于125度,具体定义数值有偏差)。但是实际情况却是所有手机超广角镜头在将周围世界投影到平面图像时会扭曲人像或者建筑直线边缘弯曲。该文创新主要使得人在图片中看起来自然且真实。

算法流程

graph TD A[输入] -->|A1| B(人像分割/人脸检测) A-->|A2| C(立体投影) A-->|A3| D(透视投影) C--> E(网格优化) E--> F(Warp) F--> G[输出]

从算法流程看,简单理解为透视变换可以使得背景建筑边线笔直,立体投影使得人脸比例正常,网格优化是通过将图像网格化后控制人脸区域和非人脸区域网格顶点的移动融合两者的优势,最终根据新生成的网格顶点对透视变换图进行warp操作得到最终保护人脸的效果,这里论文中提到的人像保护实际只对人脸进行保护(看脸),所以有些结果会出现人脸跟身体不协调的情况。

网格优化

图像处理中网格优化应用很广,主要目的是减少计算量,不然每个像素位置即可以作为网格的一个顶点。

处理过程:建立两个网格结构,透视投影均匀网格\(M{p}\)、立体投影网格\(M{u}\),然后warping \(M{p}\)\(M{u}\)

那么直接给\(M{p}\)一个人脸权重,即人脸mask内的顶点插值到立体投影网格\(M{u}\),结果会是怎样,人脸边缘会有明显的artifacts,看下(c)图。

因此作者提出一种能量最小方法协调两种投影在人脸边缘处的冲突。
网格优化能量函数形式如下:
\( \begin{matrix}\sim \\V \end{matrix}=\begin{matrix}\begin{matrix}argmin\\\left \{ v{_i} \right \} \end{matrix}\end{matrix}E{_t}\left ( V \right ) \)
其中,\(E{_t}\left ( V \right )\)是下面几个能量项的权重累加。
\( E_{t}=\lambda_{f} E_{f}+\lambda_{b} E_{b}+\lambda_{r} E_{r}+\lambda_{a} E_{a} \)

人脸优化项

以尽可能小的缩放与旋转逼近原像
\( E{_f}=\sum_{_k}E{_{s,k}} \)
\( E{_s,k}=\sum_{_i\in B{_k} }w_{i}m_{i}\left \| v_{i}-(S_{k}u_{i}+t_{k}) \right \|_{2}^{2}+\lambda (S_{k}) \)
\( S_{k}=\left [ \begin{matrix} a_{k} & b_{k}\\ -b_{k} & a_{k} \end{matrix} \right ] \)
\( \lambda (S_{k})=w_{s}\left \| a_{k}-s_{t} \right \|_{2}^{2} \)

其它优化项

尽可能保形背景整体光滑无损FOV
\( E_{b}=\sum_{i}\sum_{_j\in N(i)}\left \| (v_{i}-v_{j})\times e_{ij} \right \|_{2}^{2} (1) \)
\( E_{r}=\sum_{i}\sum_{_j\in N(I)}\left \| v_{i}-v_{j} \right \|_{2}^{2}(2) \)

\( E_{a}=E_{l}+E_{r}+E_{t}+E_{b}(3) \)
重点说下公式1的解析如下。
image
如上图示例上下方向两顶点优化,假设\(p_{_i}\)为目标移动位置,\(p_{_j}\)为周围4领域向上方向目的坐标点,\(v_{_i}\)\(v_{_j}\)为相应优化顶点,\(e_{ij}\) 即指 \(p_{_i}\)\(p_{_j}\)方向的单位向量,保形优化函数残差转化为求解 \((v_{i}-v_{j})\times e_{p_{_i}-p_{_j}}\)的最小二乘,我们知道
\( (v_{i}-v_{j})\times e_{p_{_i}-p_{_j}} = |(v_{i}-v_{j})|*|e_{p_{_i}-p_{_j}}| *cos\theta \)
也就是说两向量相交的角度越接近0能量函数最小,即待优化顶点沿目标顶点方向移动通过缩放而不是扭动来保持形状不变性。
同理,其他三个方向就不一一示意出来,应该可以理解了。

结果实现及分析(待添加)

posted @ 2021-04-06 10:07  sinbad.dev  阅读(342)  评论(0编辑  收藏  举报