首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab图片水印技术

Matlab图片水印技术

作者头像
巴山学长
发布2019-07-15 16:25:12
2.4K7
发布2019-07-15 16:25:12
举报
文章被收录于专栏:巴山学长巴山学长巴山学长

图片水印技术在现代计算机技术中具有越来越重要的作用,今天,我就给大家简单介绍图片水印技术的原理。

认识像素的同学都知道,无论是彩色图片还是灰度图,都是由0-255之间的数字矩阵组成。当然,彩色图片是三维矩阵,由三个颜色通道组成。灰度图是二维矩阵。

下面的两个图中,上面的一个是将要加水印的图像,下面的就是要加的水印。

首先,水印的原理就是将水印上的像素点乘一个参数。然后与原有的图像做加法运算。得到的新图就是加上水印以后的图。由于这个参数非常小,凭借肉眼是无法分辨图像水印前后的区别的。

例如:

原图像A=[145,132,134;121,24,112;123,234,123]。要加的水印B=[134,123,145;123,121,112;124,234,236]。水印参数为Alpha=0.02。那么结果就是A1=A+B*Alpha。如果k值太大了。最终图片会与水印以前的图片有很大差距。下面给大家展示一下Alpha值过大的后果

我选取的Alpha=0.5。正常的k应该选择0.01或者0.02。

Matlab如何实现水印:

最简单的读取水印图片。大家记住这些变量的名称就好了。之后会用到

clear;clc

size=512;
block=8;
blockno=size/block;
LENGTH=size*size/64; 
Alpha1=0.5;  Alpha2=0.4;
T1=100; 
I=zeros(size,size); 
D=zeros(size,size); 
BW=zeros(size,size); 
block_dct1=zeros(block,block);

i=imread('watermark64by64.png');
mark=reshape(i,1,LENGTH);
figure;imshow(i);title('水印');
%subplot(3,2,1);plot(mark);title('水印'); 
%显示原图
figure;I=imread('lena512512.jpg');   
I0=I;
imshow(I);title('原始图像');

接下来,我们会看到水印的核心代码。也就是嵌入水印的过程。不多说了。先看代码:

k=1;
for m=1:blockno
for n=1:blockno
  x=(m-1)*block+1;   y=(n-1)*block+1;
  block_dct1=I(x:x+block-1,y:y+block-1);
  block_dct1=dct2(block_dct1);
BW_8_8=BW(x:x+block-1,y:y+block-1);

block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k)); 
block_dct1=idct2(block_dct1);
D(x:x+block-1,y:y+block-1)=block_dct1; 
  k=k+1;
end

由于图像的面积远远大于水印的面积,所以我们不得不做一些分块处理的操作。用两层for 循环可以嵌入水印。

完整代码以及图片:请回复“水印”

参考文献来源:https://993878382.qzone.qq.com/?_t_=0.37524410726698343

代码来源:http://993878382.qzone.qq.com -browser

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档