MATLAB图像处理——添加条纹水印

实验目的

使用matlab实现对图像的条纹水印添加,具体效果如下图,分别是原图水印图
原图
在这里插入图片描述
对于条纹水印,其水印的强度、方向和间距都可调整。

具体实现

第一步 读入图片、预处理

把lenna.jpg添加到工作目录,读入图片并转到色彩空间(YCbCr),水印在亮度成分(Y)上叠加。

%读入图片并预处理
img = im2double(imread('lenna.jpg'));
%转到色彩空间
ycbcrImg = rgb2ycbcr(img);
%提取亮度成分
yImg = ycbcrImg(:,:,1);

第二步 生成水印矩阵

实现条纹水印的原理是在图像上叠加二维正弦函数:
e m b e d I m g = s i n ( w ( a x + b y ) ) , a = s i n ( α ) , b = c o s ( α ) embedImg = sin(w(ax+by)),a=sin(\alpha),b=cos(\alpha) embedImg=sin(w(ax+by)),a=sin(α),b=cos(α)
式中, w w w决定了条纹间距 α \alpha α决定了条纹方向。下面代码中设置 w w w π / 2 \pi/2 π/2 α \alpha α为45度。

%初始化水印矩阵
[m,n] = size(yImg);
embedImg = zeros(m,n);
%设置参数
angle = 45;
a=cos(angle*pi/180);
b=sin(angle*pi/180);
w=pi/2;
%生成水印矩阵
for i = 1:m
    for j = 1:n
        embedImg(i,j) = sin(w*(a*i+b*j));
    end
end

第三步 添加水印

最后将水印矩阵以一定比例与原图亮度成分叠加,得到添加水印后的图片。

%添加水印
I = 1/20;
yImg = yImg + I*embedImg;
%覆盖原图亮度成分
ycbcrImg(:,:,1) = yImg;
%转到rgb空间并保存
rgbImg = ycbcr2rgb(ycbcrImg);
imwrite(rgbImg,'watermark.jpg');

上面代码中, I I I可以调节水印强度 I I I越小,水印强度越弱。

结语

本文使用matlab实现了图像的条纹水印添加,可调参数有水印的强度、方向和间距,因此可写成matlab函数的形式(本文不写更多)。下面是设置 α \alpha α为135度时的图像。
在这里插入图片描述

完整代码

clc
clear all;
%读入图片并预处理
img = im2double(imread('lenna.jpg'));
ycbcrImg = rgb2ycbcr(img);
yImg = ycbcrImg(:,:,1);

%生成水印矩阵
[m,n] = size(yImg);
embedImg = zeros(m,n);
angle = 135;
a=cos(angle*pi/180);
b=sin(angle*pi/180);
w=pi/2;
for i = 1:m
    for j = 1:n
        embedImg(i,j) = sin(w*(a*i+b*j));
    end
end

%添加水印
I = 1/20;
yImg = yImg + I*embedImg;
ycbcrImg(:,:,1) = yImg;
rgbImg = ycbcr2rgb(ycbcrImg);
imwrite(rgbImg,'watermark.jpg');
  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值