1

我们正在做一个名为“Face Replacement System”的图像处理项目,我们指的是http://thesai.org/Downloads/Volume1No6/Paper_22_A_Face_Replacement_System_Based_on_Face_Pose_Estimation.pdf

我们实现了“图像变形”,其中源图像(人脸)(用于替换目标图像)被移位、旋转和缩放以匹配目标图像(人脸)的姿势。图像变形后得到的结果是有洞的,即不是目标图像的所有像素都映射到源图像。该论文没有提到任何解决方案。

我们尝试了一个简单的解决方案:对每个洞的 8 个相连邻居的像素取平均值。我们也尝试了其他算法。但结果很差。

在这种情况下实现的最佳算法是什么?

4

2 回答 2

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  
于 2012-05-25T04:53:35.383 回答
0

听起来您所描述的中值滤波器(8 个连接的邻居)可能是最好的。您可以进行更具体的过滤,但可能不需要专业化......特别是如果“洞”不是很大。

于 2012-05-25T02:48:56.707 回答