基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
1.算法运行效果图预览
2.算法运行软件版本
matlab2022a
3.算法理论概述
水印嵌入原理
LABS方法在这里不太明确,如果指的是色彩空间转换,可能是在嵌入或提取阶段将RGB图像转换至LAB色彩空间,因为LAB空间更适合人眼对颜色的感知,有利于隐藏水印而不易察觉。
水印提取原理:
将嵌入水印的图像再次进行二维CS-SCHT变换。
提取变换后的低频系数,并按照嵌入时的规则去除宿主图像内容的影响,恢复出水印信息 Wm′。
如果“LABS方法”涉及某种特定的解码策略,则在此步骤中可能会进一步应用相应的色彩空间处理和解码算法,以确保正确无误地还原水印信息。
4.部分核心程序
%对水印进行置乱 Marks1s = Arnold(Marks1,1,0); figure(1) subplot(131); imshow(I0,[]); title('原始图像'); subplot(132); imshow(Marks1,[]); title('水印'); subplot(133); imshow(Marks1s,[]); title('置乱后水印'); %对图像进行处理 Mwk_1st = func_wk_insert(I0,Marks1s,Power,Blksize,RR,CC); if SEL == 1 %噪声攻击 noise0 = 20*randn(size(Mwk_1st)); Mwk_1st = double(Mwk_1st) + noise0; end if SEL == 2 %旋转攻击 Mwk_1st = double(imrotate(Mwk_1st,0.1,'bilinear','crop')); end if SEL == 3 %剪切攻击 Mwk_1st(501:800,501:800) = 255*rand(300,300); end if SEL == 4 %缩放攻击 Mwk_1st = imresize(Mwk_1st,1/2); Mwk_1st = imresize(Mwk_1st,2); end if SEL == 5 %去除行列攻击 Mwk_1st(200,:) = 255*rand(1,1024); Mwk_1st(:,400) = 255*rand(1024,1); end if SEL == 6 %模糊攻击 G = fspecial('gaussian', [5 5], 0.5); Mwk_1st = imfilter(Mwk_1st,G,'same'); end if SEL == 7 %增强攻击 Mwk_1st = double((1.2*Mwk_1st)); end Msg1 = func_wk_desert(Mwk_1st,Blksize,RR,CC,4); %对水印进行逆置乱 Msg1s = Arnold(uint8(255*Msg1),1,1); figure(2) subplot(221); imshow(I0,[]); title('原始图像'); subplot(222); imshow(Marks1,[]); title('水印'); subplot(223); imshow(Mwk_1st,[]); title('加入攻击的图像'); subplot(224); imshow(Msg1s,[]); title('水印提取'); %% %水印提取,计算NC和PSNR Marks1 = imresize(Marks1,[RR,CC]); NC(indx) = func_nc(uint8(Marks1),uint8(Msg1s)); pause(1); end figure; plot(NC,'b-o'); grid on xlabel('视频帧数'); ylabel('比特率'); axis([0,15,0.8*min(NC),1.1*max(NC)]); save R1.mat NC