一边被老板骂,一边还不想干活。
看到网上有人在找 大批量水印去除的方法,自己动手用matlab写了一个,如果能博得大家一笑就好了。
废话少说直接上效果图
图片来自百度文档。
以下是代码
I=imread('C:\Users\Administrator\Desktop\ppt\图像处理\神秘的水印去除术\p1.png');%读入图像
figure, imshow(I);%显示去水印前的图像
I1 = I(:,:,1);%抽取原图像r的R,G,B的其中一维得到灰度矩阵
% figure, imshow(t1);
I2 = I(:, :, 2);
% figure, imshow(t2);
I3 = I(:, :, 3);
% figure, imshow(t3);
t = I(150:210, 70:276, 1:3);
figure, imshow(t);
t1 = t(:,:,1);
% figure, imshow(t1);
t2 = t(:, :, 2);
% figure, imshow(t2);
t3 = t(:, :, 3);
% figure, imshow(t3)
%得到水印像素点 在 RGB上的 亮度
[m,n] = size(t1);
ptmun = zeros(1,255);
ft=1;
for i = 1:m
for j = 1:n
f=0;
for k = 1:253
if t1(i,j) == ptmun(k)
f=1;
end
end
if f==0
ptmun(ft)= t1(i,j);
ft=ft+1;
end
end
end
ptmun1 = sort(ptmun);
ptmun2 = ptmun1(ptmun1~=0)
%扣除水印的像素
[m,n] = size(I1);
for i = 1:m
for j = 1:n
for k = 1:62
if I1(i,j) == ptmun2(k)
I1(i,j) = 255;
break;
end
end
end
end
figure, imshow(I1);
原理很简单,人工选取水印的位置,将水印的灰度值记录下来,然后遍历全图,扣除对于的灰度值。
如果是彩色图像,就需要根据RGB模型,分布对三个图层进行处理在和为一幅图。
但本例中的为灰度图,所以就简单处理了。
效果看来还可以,对于同一类的水印图,不需要重复人工选取水印位置,直接使用记录第一次记录的数值,对之后的图像进行处理即可。以此达到多图水印除去的目的。
不足之处:对图像文理产生形变的水印无法去除。
本文纯属娱乐,如有兴趣,请参看 图像处理 相关书籍。
下次有机会(不想干活的时候),再找找有趣的事情干干吧!