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

yuk*_*yuk 28 matlab textures design-patterns image-processing

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

我试图应用FFT转换(使用Photoshop插件),但我找不到任何明显的白点可以画画.对于这种方法,这种模式可能不那么规律吗?

您可以在下面看到示例.如果您需要完整的图像,我可以将其上传到某处. 照片样本

mpe*_*kov 23

不幸的是,你几乎陷入了空间领域,因为这种模式并不足以让傅里叶分析具有足够的重复性.

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

这是我如何处理这个问题:

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

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

在此输入图像描述

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

最终图片:

在此输入图像描述

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

编辑

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

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

在此输入图像描述

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

  • 很好的答案!+1. (2认同)

Jon*_*nas 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,[])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

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