图像隐写基于matlab分层自嵌入数字水印内容认证与恢复含Matlab源码 1641期
Posted 紫极神光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像隐写基于matlab分层自嵌入数字水印内容认证与恢复含Matlab源码 1641期相关的知识,希望对你有一定的参考价值。
一、分层自嵌入数字水印内容认证与恢复简介
为了保护图像数据的完整性、对图像进行认证和内容恢复,论文在分析数字水印研究现状和基本理论的基础上,提出一种分层自嵌入数字水印的内容认证和恢复算法。
文章的创新点在于算法在图像的变换域和空间域分层嵌入含有图像自身信息的恢复水印和认证水印,兼具了图片抵抗一定程度图像操作的鲁棒性要求和被篡改部位全盲检测的要求。同时,算法对图像进行分层篡改检测,准确检测出被篡改区域。除此之外,算法利用嵌入的水印,依据恢复精度分层恢复图像内容,极大地增加了图像内容的恢复能力,在图像遭受大面积篡改时也能达到较高的恢复效果。
实验结果表明,论文算法在抵抗剪切攻击和拼贴攻击方面有良好的表现,在剪切面积高达90%的情况下,对图像内容恢复程度能达到60%以上。同时,算法能抵抗JPEG压缩、加入噪声、中值滤波攻击,鲁棒性良好。
二、部分源代码
clear;
q1=64; %第一层水印嵌入强度
key1=13; %第三层水印分块映射位置密钥
Fy=[8 6 6 8 %4*4量化表
2 6 7 7
4 6 8 7
7 5 4 5];
Fyy=[16 11 10 16 24 40 51 61 %8*8量化表
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99];
%%%%对原始图片进行修改%%%%
attack_pic();
PIC=imread('PIC_change.bmp');
if ndims(PIC)==3
PIC=rgb2gray(PIC);
end
figure(1);subplot(142);imshow(PIC);title('修改后的图片');
[M,N]=size(PIC);
X2=mapping44(M,N,key1);%找到4*4分块的映射位置
%%%%分层图像内容认证%%%%
[sign4]=recovery_authentication(PIC,X2);
%%%%%%%%%%%%%%%%%内容恢复%%%%%%%%%%%%%%
xx=[1,1,3,3];
yy=[1,3,1,3];
a1=PIC;
sign5=sign4;
%存有被毁坏分块信息的分块未被毁坏,提取出第三层水印信息
for i=1:4:M
for j=1:4:N
if sign4(ceil(i/4),ceil(j/4))==1
x=floor(X2(ceil(i/4),ceil(j/4))/(N/4));
y=mod(X2(ceil(i/4),ceil(j/4)),N/4);
if sign4(x+1,y+1)==0
%第三层水印恢复信息
R=PIC(4*x+1:4*x+4,4*y+1:4*y+4);
for k=1:4
rrr(k*6-4)=mod(R(xx(k),yy(k)+1),2);
rrr(k*6-5)=(mod(R(xx(k),yy(k)+1),4)-rrr(k*6-4))/2;
rrr(k*6-2)=mod(R(xx(k)+1,yy(k)),2);
rrr(k*6-3)=(mod(R(xx(k)+1,yy(k)),4)-rrr(k*6-2))/2;
rrr(k*6)=mod(R(xx(k)+1,yy(k)+1),2);
rrr(k*6-1)=(mod(R(xx(k)+1,yy(k)+1),4)-rrr(k*6))/2;
end
Q1=zeros(4,4);
Q1(1,1)=typecast(uint8(bin2dec(num2str(rrr(1:8)))), 'int8');
Q1(1,2)=typecast(uint8(bin2dec(num2str(rrr(9:16)))), 'int8');
Q1(2,1)=typecast(uint8(bin2dec(num2str(rrr(17:24)))), 'int8');
for ii=1:4
for jj=1:4
Q2(ii,jj)=Q1(ii,jj)*Fy(ii,jj);
end
end
Q2=idct2(Q2);
a1(i:i+3,j:j+3)=Q2;
sign5(ceil(i/4),ceil(j/4))=0;
end
end
end
end
% 用于计算十进制数的补码
% 参数x:原始十进制数组,正负数皆可
% 参数n:输出的二进制补码最小位数,如果位数不够会根据x的取值范围自动扩展
% 输出值c:转换得到的二进制补码字符串数组
function [c] = complement(x,n)
for i = 1 : length(x)
if x(i) < 0
x(i) = x(i) + 2^n;
end
end
c = dec2bin(x, n)-'0';
end
function [sign4]=recovery_authentication(PIC1,X2)
%分层图像内容认证
Fy=[8 6 6 8 %4*4量化表
2 6 7 7
4 6 8 7
7 5 4 5];
[M,N]=size(PIC1);
for i=1:4:M
for j=1:4:N
Q=PIC1(i:i+3,j:j+3);
%第一层检测
signtemp=recovery_authentication_firstcheck(Q);
sign1(floor(i/2)+1,floor(j/2)+1)=signtemp(1);
sign1(floor(i/2)+1,floor(j/2)+2)=signtemp(2);
sign1(floor(i/2)+2,floor(j/2)+1)=signtemp(3);
sign1(floor(i/2)+2,floor(j/2)+2)=signtemp(4);
%第二层检测
if sum(signtemp)>=1
sign2(floor(i/4)+1,floor(j/4)+1)=1;
else
sign2(floor(i/4)+1,floor(j/4)+1)=0;
end
end
end
%第三层检测
sign3=sign2;
for i=2:M/4-1
for j=2:N/4-1
sum1=0;
if sign2(i,j)==0
sum1=sign2(i-1,j-1)+sign2(i-1,j)+sign2(i-1,j+1)+sign2(i,j-1)+sign2(i,j+1);
sum1=sum1+sign2(i+1,j-1)+sign2(i+1,j)+sign2(i+1,j+1);
if sum1>=5
sign3(i,j)=1;
end
end
end
end
%第四层检测
xx=[1,1,3,3];
yy=[1,3,1,3];
sign4=sign3;
for i=1:4:M
for j=1:4:N
if sign3(ceil(i/4),ceil(j/4))==0
x=floor(X2(ceil(i/4),ceil(j/4))/(N/4));
y=mod(X2(ceil(i/4),ceil(j/4)),N/4);
if sign3(x+1,y+1)==0
P3=PIC1(i:i+3,j:j+3);
P=P3-mod(P3,4); %每个像素最低三个有效位置0
P1=dct2(P);
for ii=1:4
for jj=1:4
P2(ii,jj)=fix(P1(ii,jj)/Fy(ii,jj));
end
end
r=zeros(1,24);
r1 = complement(P2(1,1), 8); %前三个系数的补码生成24bit的恢复水印信息r
r2 = complement(P2(1,2), 8);
r3 = complement(P2(2,1), 8);
r=[r1,r2,r3];
R1=PIC1(4*x+1:4*x+4,4*y+1:4*y+4);
for k=1:4
rr(k*6-4)=mod(R1(xx(k),yy(k)+1),2);
rr(k*6-5)=(mod(R1(xx(k),yy(k)+1),4)-rr(k*6-4))/2;
rr(k*6-2)=mod(R1(xx(k)+1,yy(k)),2);
rr(k*6-3)=(mod(R1(xx(k)+1,yy(k)),4)-rr(k*6-2))/2;
rr(k*6)=mod(R1(xx(k)+1,yy(k)+1),2);
rr(k*6-1)=(mod(R1(xx(k)+1,yy(k)+1),4)-rr(k*6))/2;
end
if rr~=r
sign4(ceil(i/4),ceil(j/4))=1;
end
end
end
end
end
figure(2);
subplot(141);imshow(sign1);title('第一层检测结果');
subplot(142);imshow(sign2);title('第二层检测结果');
subplot(143);imshow(sign3);title('第三层检测结果'以上是关于图像隐写基于matlab分层自嵌入数字水印内容认证与恢复含Matlab源码 1641期的主要内容,如果未能解决你的问题,请参考以下文章
图像隐写基于matlab图像内容自恢复水印含Matlab源码 2321期
图像隐写基于matlab FFT数字水印嵌入含Matlab源码 1670期
图像隐写基于matlab DWT+IDWT数字水印嵌入+提取含Matlab源码 1530期
图像隐写基于matlab GBT+SVD数字水印嵌入与提取含Matlab源码 1668期