我们正在做一个名为“面部替换系统”的图像处理项目,我们指的是 http://thesai.org/Downloads/Volume1No6/Paper_22_A_Face_Replacement_System_Based_on_Face_Pose_Estimation.pdf .
我们实现了“图像变形”,其中源图像(面部)(用于替换目标图像)被移动、旋转和缩放以匹配目标图像(面部)的姿势。图像扭曲后得到的结果有漏洞,即目标图像的所有像素都没有映射到源图像。论文没有提及任何解决方案。
我们尝试了一个简单的解决方案:对每个孔的 8 个相连邻居的像素取平均值。我们也尝试了其他算法。但效果很差。
在这种情况下实现的最佳算法是什么?
最佳答案
您正在使用仿射变换(“移位、旋转和缩放”),因此可以计算反变换,并进行“反向映射”-为每个目标像素找到对应的源像素。因此完全消除了孔的出现。
编辑:评论讨论的双线性插值
foreach pixel in newimage do
(px, py) = Transform(pixel.x, pixel.y) //float
x = Floor(px), y = Floor(py) //integer base coordinates in old image, rounded to -Infinity
tx = px - x, ty = py - y //float parametric coordinates in old image cell
Coeff00 = (1 - tx) * (1 - ty)
Coeff01 = tx * (1 - ty)
Coeff10 = (1 - tx) * ty
Coeff11 = tx * ty
NewRedValue = OldRedValue[x, y] * Coeff00 +
OldRedValue[x + 1, y] * Coeff01 +
OldRedValue[x, y + 1] * Coeff10 +
OldRedValue[x + 1, y + 1] * Coeff11
the same for blue, green
关于image - 为图片中的孔插入 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10747791/