我们正在进行名为“面部更换系统”的图像处理项目,我们指的是http://thesai.org/Downloads/Volume1No6/Paper_22_A_Face_Replacement_System_Based_on_Face_Pose_Estimation.pdf。
我们实施了“图像变形”,其中源图像(面部)(替换目标图像)被移位,旋转和缩放以匹配目标图像(面部)的姿势。在图像变形之后获得的结果具有孔,即不是目标图像的所有像素都被映射到源图像。该论文未提及任何解决方案。
我们尝试了一个简单的解决方案:为每个洞取8个连接邻居的像素平均值。我们也尝试了其他算法。但结果很差。
在这种情况下,最好的算法是什么?
答案 0 :(得分:2)
您正在使用仿射变换(“移位,旋转和缩放”),因此可以回溯变换,并为每个目标像素进行“反向映射” - 查找相应的源像素。因此完全消除了孔的外观。
编辑:评论讨论的双线性插值
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
答案 1 :(得分:0)
听起来你正在描述的中值过滤器(8个连接的邻居的东西)可能是最好的。你可以做更具体的过滤,但可能不需要专门化......特别是如果“漏洞”不是很大。