一种基于MATLAB去图片水印方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于MATLAB去图片水印方法
作者:杨涛董洁李金松刘树骏
来源:《科学与财富》2017年第25期
摘要:随着网络的日渐发达,越来越多的风景图片在网上出现,对于那些喜欢收集风景图片的人来说这是一件好事。
但是大多数的风景图片都被打上了水印,这就使得这些收集风景图片的人在对图片进行挑选时自动的过滤掉这些带水印的图片,而带水印的图片恰恰是风景好的图片。
本文通过matlab对图片中的水印进行去除,可以使读者了解matlab在去水印处理中的应用。
关键字:matlab;灰度直方图;水印
0 引言
在生活中人们喜欢从网上下载图片进行ps或者用于珍藏的目的,更多的是浏览风景图片,但是网上很多风景很好的图片都被加上了水印,这就使得人们在收集图片的时候,将这些带有水印的图片舍弃,所以去除图片中的水印成为了这些风景图片收集者的头号问题,本文通过matlab对图片水印部分的颜色分量rgb分别进行修改,最后达到去除水印的目的。
1 图片的处理过程
首先将图片利用imread函数读取到matlab中。
然后利用程序对带有水印的部分进行选取,将图片带有水印的部分提取出来,?将水印部分的rgb,3个分量都提取出来,然后分别将三个颜色分量图片的灰度直方图利用imhist函数表示出来[1],从图中我们可以知道每一个分量中各个点的灰度值和多少,除了水印灰部分灰度值为255以外,纵坐标最大的值就是我们要将白色的水印部分替换的值[2]。
然后根据灰度直方图的显示对水印部分的灰度值进行修改。
将修改后的三个分量融合并替换掉原来的水印部分得到,最后将原图的水印部分用修改后的部分替换,这样就达到了去除水印的目的。
如图所示左侧为修改前右侧为修改后。
图
2分量的处理方法
根据rgb三个分量的灰度直方图,我们可以知道图片中那一个颜色值数量最多,然后将白色部分即水印的部分用其替换,就完成了分量中的水印去除。
灰度直方图是一个图表,它上面是用来显示灰度或索引图像亮度的分布情况,从灰度直方图中可以了解一幅图像的灰度级内容[3]。
它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。
灰度直
方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。
灰度级从0到250,白色为255,黑色为0。
3 Matlab程序及注解
%提取带有水印区域
I=imread('1.jpg');
imshow(I);
k = waitforbuttonpress; % 等待鼠标按下
point1 = get(gca,'CurrentPoint'); % 鼠标按下了
finalRect = rbbox;
point2 = get(gca,'CurrentPoint'); % 鼠标松开了
point1 = point1(1,1:2); % 提取出两个点
point2 = point2(1,1:2);
p1 = min(floor(point1),floor(point2)); % 计算位置
p2 = max(floor(point1),floor(point2));
offset = abs(floor(point1)-floor(point2)); % offset(1)表示宽,offset(2)表示高
x = [p1(1) p1(1)+offset(1) p1(1)+offset(1) p1(1) p1(1)];
y = [p1(2) p1(2) p1(2)+offset(2) p1(2)+offset(2) p1(2)];
hold on
%提取水印区域的rgb分量
t =I(31:70,498:596,1:3);%水印区域
t1 = t(:,:,1);%抽取原图像r的R,G,B的其中一维得到灰度矩阵
t2 = t(:,:, 2);
t3 = t(:,:, 3);
figure, imshow(t3);
hist_im1=imhist(t1); %计算直方图 figure,bar(hist_im);%画直方图 %分量中的水印部分进行灰度值转换 [m,n] = size(t1)
for i = 1:m
for j = 1:n
if t1(i,j) >= 50
t1(i,j) = 6;
end
end
end
%转换完成后进行融合
for i = 1:m
for j = 1:n
t(i,j,1) = t1(i,j);
t(i,j,2) = t2(i,j);
t(i,j,3) = t3(i,j);
end
end
for i = 1:38
for j = 1:94
I(i + 32, j + 499, 1:3)=t(i, j, 1:3);
end
end
4总结
本篇文章设计了一种MATLAB的去水印方法,可以从所需要的风景图片上去除不必要的水印。
但不足之处是处理后的图片水印部分有一定得色差,可以根据进一步的处理将色差去除。
参考文献
[1]Rafael C.Gonzalez等,数字图像处理的MATLAB实现[M],清华大学出版社,2013.
[2]Rafael C.Gonzalez等,数字图像处理的MATLAB实现[M],清华大学出版社,2013.
[3] 马晓路,等.Matlab图像处理从入门到精通,中国铁道出版社.2013.
作者简介:单位:山东科技大学机械电子工程学院,研究方向:数字图象处理。