我扫描了一张带有纸张纹理图案的旧照片,我想尽可能地去除纹理而不降低图像质量。有没有办法,可能在MATLAB中使用图像处理工具箱?
我尝试过应用FFT转换(使用Photoshop plugin),但我找不到任何明显的白点。对于这种方法,这种模式可能不那么规律吗?
您可以在下面看到示例。如果您需要完整的图像,我可以将其上传到某处。
答案 0 :(得分:23)
不幸的是,你几乎陷入了空间领域,因为这种模式的重复性不足以使傅立叶分析得以使用。
正如@Jonas和@michid指出的那样,过滤会帮助你解决这样的问题。通过过滤,您需要在要保留的详细信息量和要删除的噪声量(或不需要的图像组件)之间进行权衡。例如,@ Jonas使用的中值滤镜完全去除纸张纹理(即使是图像底部边缘附近的圆形划痕),但它也会去除眼睛,头发,脸部和背景中的所有纹理(尽管我们并不真实如此关心背景,这是重要的前景)。您还会看到图像对比度略有下降,这通常是不受欢迎的。这使图像具有人工外观。
以下是我将如何处理此问题:
纸张纹理图案(阈值处理前):
您希望上面的图像中存在的实际图像信息很少。你会发现你可以非常微弱地弄清楚脸部的边缘(这不好,但这是我有时间的最好的)。您还希望此纸张纹理图像尽可能均匀(以便阈值处理在整个图像中得到相同的结果)。同样,上图中的右侧稍微暗一些,这意味着很难对其进行阈值处理。
最终形象:
结果并不完美,但它完全消除了高度可见的纸张纹理图案,同时保留了比简单过滤方法更多的高频内容。
修改强>
填充区域通常是纯色的,因此如果您仔细观察图像会突出一点。您还可以尝试在填充区域添加一些低强度零均值高斯噪声,使其看起来更逼真。您必须选择与背景匹配的噪声方差。凭经验确定它可能已经足够了。
这是添加了噪音的已处理图像:
请注意,去除纸张图案的部分更难以看到,因为增加的高斯噪声掩盖了它们。我对整个图像使用了相同的高斯分布,但如果你想要更复杂,你可以使用不同的分布来处理面部,背景等。
答案 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,[])
请注意,您可能需要先填充图像以避免边缘效果。
编辑:比[15 15]
更小的滤镜内核可以更好地保留图像纹理,但会留下更明显的过滤痕迹。
答案 2 :(得分:3)
我已经尝试了使用Anisotropc扩散的另一种方法,使用在更广泛区域上操作的第二系数
以下是我得到的输出:
答案 3 :(得分:1)
从图片中我可以看到,与图像本身相比,噪声具有相对较高的频率。因此应用低通滤波器应该可行。查看功率谱abs(fft(...))
以确定截止频率。