一、算法介绍
1、论文出处
F. Nejati, H. Sajedi and M. Mohammadi, “Fragile Watermarking for Image Authentication Using QR factorization and Fourier Transform,” 2019 5th International Conference on Web Research (ICWR), 2019, pp. 45-49, doi: 10.1109/ICWR.2019.8765292.
2、算法原理
在图片都过不可信信道传输时,通常会受到各种攻击,这些会导致图片的可分辨性下降,对于一些敏感图片,如军事或医用图片,确认图片被攻击与否几位重要。当脆弱水印被成功提取时,便可以认为图片未受到攻击。
文中提出了一种利用傅里叶变换和QR分解的脆弱水印方法。该方法首先对载体图像进行傅里叶变换。接着对变换后的载体图像和水印图像都进行QR分解。接下来,将水印图像的R矩阵的系数添加到载体图像的R矩阵中,得到一个上三角矩阵,将其乘以原载体图片的Q矩阵,得到带水印载体图片。
(1)傅里叶变换
由于灰度图像是二维图像,所以它使用二维傅里叶变换。在二维中,离散傅里叶变换(DFT)以一个矩阵作为输入,并返回另一个与输出的大小相同的矩阵。假设原始矩阵值为f(x,y),其中x和y是索引,然后,输出矩阵值为F(u,v)。F被称为矩阵f的傅里叶变换,如式1:
原矩阵f被称为F的逆傅里叶变换,如式2:
其变换公式如公式3、4,其中M,N为矩阵大小:
(1)QR分解
矩阵的QR分解是指将原始矩阵A分解为A=Q*R,其中Q为正交矩阵,R为上三角矩阵。
(2)脆弱水印算法
1)嵌入算法
该算法具体流程如下图
预处理:在对图像进行傅里叶变换和QR分解之前,对图像进行预处理。第一步将图片修改为固定大小,其次将其变为灰度图。
傅里叶变换:傅里叶变换(FT)是一种可以应用于图像的变换。这种转变提高了水印的视觉质量。通过对图像应用FT,其结果是具有与原始图像相同大小的图像,并且它只是对原始图像的变换。
矩阵分解:在对载体图像进行傅里叶变换后,对载体图像和水印图像同时进行QR分解。在Q、R矩阵之间,选择有更多0的矩阵,即R矩阵进行嵌入,因为该矩阵中的变换会图像影响较小。
嵌入方法如下式:
α也被称为嵌入强度,由实验决定以获得更好的不可感知性。
在找到Rnew后,将其乘以QH以获得更好的不可感知性。如下式:
对最后的结果进行逆傅里叶变化,得到最后的带水印图像。
2)提取算法
1)对带水印图片进行傅里叶变化,得到图片的傅里叶矩阵WF
2)对WF进行QR分解,得到QF,RF。
3)提取出RExtracted,如下式:
4)将RExtracted与QH相乘,得到提取出的图片。
如果此时的S被成功提取,则认为图片未受到攻击,反之则受到攻击。
二、算法复现
1、代码展示(matlab2018b)
%------------------------------------------------------------------%
% 脆弱水印 %%
% 朱靖宇 %%
%-----------------------------------------------------------=------%
clear ;
clc;
alpha=0.1;
%-----------------------------------------------------------------%
% Embedding Watermark
% Preprocessing %
host_img=imread('I.png');
host_img=imresize(host_img,[512,512],'nearest');
host_img=rgb2gray(host_img);
watermark=imread('W.png');
watermark=imresize(watermark,[512,512],'nearest');
watermark=rgb2gray(watermark);
figure(1); %打开窗口
subplot(2,2,1); %该窗口内的图像可以有两行三列
imshow(host_img),title('载体图像'); %显示水印图像
subplot(2,2,2),imshow(watermark),title('水印图像');% Fourier transform %
host_img=im2double(host_img);
host_F=fft2(host_img);
%host_imF=log10(abs(host_F)+1);
host_imF=host_F;
% Matrix Factorizations %
[Qh,Rh]=qr(host_imF);
watermark=im2double(watermark);
[Qw,Rw]=qr(watermark);% Embedding watermark image %% length(find(Rh==0))
Rnew=Rh+alpha*Rw;
Embed=Qh*Rnew;
Embed=ifft2(Embed);
%Embed= uint8(Embed);
subplot(2,2,3),imshow(Embed),title('带水印图像');
imwrite(Embed,'Wateredimg.png');
%extract
Embed_F=fft2(Embed);
[Qf,Rf]=qr(Embed_F);
Re=(1/alpha)*(Rf-Rh);
Extract=Qw*Re;
%Extract=ifft2(Extract);
subplot(2,2,4),imshow(Extract),title('提取出水印图像');
imwrite(Extract,'Extract.png');
2、效果展示
3、性能分析
(1)容量
该脆弱水印需要载体图像与水印图像相同大小
(2)水印不可见性
带水印图像与原图像肉眼观察上相似,无明显差异,图像间峰值信噪比PSNR=77.027,互相关系数NC为1
(3)脆弱性
1)高斯滤波攻击
对带水印图片进行高斯滤波。效果如下:
2)噪声攻击
对带水印图片施加椒盐噪声,噪声比例为0.01,效果如下:
3)jpeg压缩攻击
对带水印图像进行jpeg压缩
4)放大攻击
对图像先放大2倍,再缩小两倍
5)缩小攻击
将图片先缩小两倍,再放大两倍
6)裁剪攻击
对图片周围进行裁剪
通过上述结果可以发现,该水印方法具有脆弱性。