插值图片中的孔的RGB值

时间:2012-05-25 02:37:41

标签: image algorithm

我们正在进行名为“面部更换系统”的图像处理项目,我们指的是http://thesai.org/Downloads/Volume1No6/Paper_22_A_Face_Replacement_System_Based_on_Face_Pose_Estimation.pdf

我们实施了“图像变形”,其中源图像(面部)(替换目标图像)被移位,旋转和缩放以匹配目标图像(面部)的姿势。在图像变形之后获得的结果具有孔,即不是目标图像的所有像素都被映射到源图像。该论文未提及任何解决方案。

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

在这种情况下,最好的算法是什么?

2 个答案:

答案 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个连接的邻居的东西)可能是最好的。你可以做更具体的过滤,但可能不需要专门化......特别是如果“漏洞”不是很大。