2015-04-16 155 views
1

我正在制作一个图像处理项目,其中有几个步骤并且卡住其中一个。这是事情;我已经分割了一幅图像并从背景中减去了前景。现在,我需要填写背景。将不透明区域拉到图像中透明区域的中心

到目前为止,我已经尝试了修复算法。他们不适合我的情况,因为我的背景图片至少有40%。我的意思是他们在尝试完整40%的图像时失败。 (顺便说一下,即使在带有内容感知工具的Photoshop中,这些图像也给出了不好的结果。)

无论如何,我已经放弃尝试修补内容并决定采取其他措施。在我的项目中,我不需要完成100%的背景。我想说明我的解决方案;

enter image description here

正如你在上图中看到,我希望将图像以最小的腐败拉黑色区域(这是透明的)。任何MATLAB代码示例,技术,关键词和方法都会很棒。如果您需要进一步解释,请随时询问。

回答

3

我能想到两种原油的方法来填补漏洞:

使用roifill:这填补了2D图像的差距保持图像的平滑度。

Alteratively,您可以使用bwdist来计算各个黑色像素的近邻,并将其分配到其最近的邻居的颜色:虽然此代码段仅适用于灰度图像

[~, nnIdx] = bwdist(bw); 
fillImg(bw) = IMG(bw); 

,这是很微不足道的将其扩展到RGB彩色图像。

+0

bwdist可以工作但shai不能给出可接受的结果。那么,我会记住。你知道任何代码片断,将一个点拉到/扩展到图像中的另一个点吗? –

+2

这是一个非常大的空洞,可以填充很多边缘,我非常怀疑有什么方法可以在没有特殊框架的情况下获得可接受的结果。 – Noremac

+0

@Noremac你说得对。这是一个非常大的 - 几乎40%的图像洞。 Shai的建议没有给出任何有希望的结果。大多数情况下不幸的是这种形式。 Photoshop的内容感知填充工具甚至失败了。我改变了我的观点并创建了一个解决方案我以动态速率将像素移动到洞中。我的意思是,最接近像素的像素偏移较少,其他像素偏移较多。最后,我已经应用了自定义的8邻居平均过滤器。处理时间差不多2秒,这种方法在我的情况下出乎意料地获得了令人鼓舞的结果 –