Matlab低通滤波去水印

最近遇到这样 一个问题:有一个图片组成Pdf文档,每一页上都有水印,影响阅读,那么就需要除去这些水印,用PS自然是可以完成的,不过一张一张处理肯定相当费时间,所以用Matlab来处理。带水印的图片形式如下:

page_01_image_0001

从中可以看出,文字是黑色的,在RGB数值上偏向[0,0,0],但水印是蓝色的,在RGB数值上远离[0,0,0],那么就可以尝试低通滤波的思想,思路是检测每一个像素点,求得三个数值的和,只要高于某个数值,就把这个像素给过滤掉,低于的保留。

代码如下:


fileName=ls('*.png');
for s=1:22
imd=double(imread(fileName(s,:)));
si=size(imd);
for i=1:si(1)
for j=1:si(2)
if sum(imd(i,j,:))>=200
imd(i,j,:)=[255,255,255];
end
end
end
imdata=uint8(imd);
imwrite(imdata,strcat(fileName(s,1:7),'.png'));
end

在本代码中,用ls()列出当前目录下所有图片文件,得到一个文件名组成的字符矩阵,然后循环处理。用imread()读取得到的格式为uint8,因此需要先转成double格式再计算。最后用imwrite()写入文件。

经过处理后的图像如下:

page_01

Leave a comment