实验目的

使用matlab实现对图像的条纹水印添加,具体效果如下图,分别是原图水印图
MATLAB图像处理——添加条纹水印
MATLAB图像处理——添加条纹水印
对于条纹水印,其水印的强度、方向和间距都可调整。

具体实现

第一步 读入图片、预处理

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

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

第二步 生成水印矩阵

实现条纹水印的原理是在图像上叠加二维正弦函数:
embedImg=sin(w(ax+by)),a=sin(α),b=cos(α) embedImg = sin(w(ax+by)),a=sin(\alpha),b=cos(\alpha)
式中,ww决定了条纹间距α\alpha决定了条纹方向。下面代码中设置wwπ/2\pi/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');

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

结语

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

完整代码

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');

相关文章: