从照片中删除纸张纹理图案

时间:2011-03-27 15:36:00

标签: matlab image-processing design-patterns textures

我扫描了一张带有纸张纹理图案的旧照片,我想尽可能地去除纹理而不降低图像质量。有没有办法,可能在MATLAB中使用图像处理工具箱?

我尝试过应用FFT转换(使用Photoshop plugin),但我找不到任何明显的白点。对于这种方法,这种模式可能不那么规律吗?

您可以在下面看到示例。如果您需要完整的图像,我可以将其上传到某处。 photograph sample

4 个答案:

答案 0 :(得分:23)

不幸的是,你几乎陷入了空间领域,因为这种模式的重复性不足以使傅立叶分析得以使用。

正如@Jonas和@michid指出的那样,过滤会帮助你解决这样的问题。通过过滤,您需要在要保留的详细信息量和要删除的噪声量(或不需要的图像组件)之间进行权衡。例如,@ Jonas使用的中值滤镜完全去除纸张纹理(即使是图像底部边缘附近的圆形划痕),但它也会去除眼睛,头发,脸部和背景中的所有纹理(尽管我们并不真实如此关心背景,这是重要的前景)。您还会看到图像对比度略有下降,这通常是不受欢迎的。这使图像具有人工外观。

以下是我将如何处理此问题:

  • 检测纸张纹理图案:
    • 对图像应用高斯模糊(使用大内核确保所有纸张纹理信息都被破坏
    • 计算模糊图像和原始图像之间的图像差异
    • 编辑2 将高斯模糊应用于差异图像(使用小型3x3内核)
  • 使用经验确定的阈值阈值上述模式。这产生了可用作掩模的二进制图像。
  • 使用中值过滤(如@Jonas所述)将替换为与纸张图案对应的图像部分。

纸张纹理图案(阈值处理前):

enter image description here

您希望上面的图像中存在的实际图像信息很少。你会发现你可以非常微弱地弄清楚脸部的边缘(这不好,但这是我有时间的最好的)。您还希望此纸张纹理图像尽可能均匀(以便阈值处理在整个图像中得到相同的结果)。同样,上图中的右侧稍微暗一些,这意味着很难对其进行阈值处理。

最终形象:

enter image description here

结果并不完美,但它完全消除了高度可见的纸张纹理图案,同时保留了比简单过滤方法更多的高频内容。

修改

填充区域通常是纯色的,因此如果您仔细观察图像会突出一点。您还可以尝试在填充区域添加一些低强度零均值高斯噪声,使其看起来更逼真。您必须选择与背景匹配的噪声方差。凭经验确定它可能已经足够了。

这是添加了噪音的已处理图像:

enter image description here

请注意,去除纸张图案的部分更难以看到,因为增加的高斯噪声掩盖了它们。我对整个图像使用了相同的高斯分布,但如果你想要更复杂,你可以使用不同的分布来处理面部,背景等。

答案 1 :(得分:13)

中值过滤器可以帮到你:

img = imread('http://i.stack.imgur.com/JzJMS.jpg');
%# convert rgb to grayscale
img = rgb2gray(img);
%# apply median filter
fimg = medfilt2(img,[15 15]);
%# show
imshow(fimg,[])

enter image description here

请注意,您可能需要先填充图像以避免边缘效果。

编辑:比[15 15]更小的滤镜内核可以更好地保留图像纹理,但会留下更明显的过滤痕迹。

答案 2 :(得分:3)

我已经尝试了使用Anisotropc扩散的另一种方法,使用在更广泛区域上操作的第二系数

以下是我得到的输出:

enter image description here

答案 3 :(得分:1)

从图片中我可以看到,与图像本身相比,噪声具有相对较高的频率。因此应用低通滤波器应该可行。查看功率谱abs(fft(...))以确定截止频率。