问题遇到的现象和发生背景
在进行dwt运算的时候,需要160160的矩阵参与运算。
现在需要请教下,是否有将888的矩阵拓展为160160的矩阵,运算后160160的矩阵还能再还原为88*8的矩阵的办法。
问题相关代码,请勿粘贴截图
%-----------------------水印嵌入-------------------------------------%
I=imread('lena_grey_resize.tif'); %载入载体图像
I=im2double(I);
[LL,LH,HL,HH]=dwt2(I,'haar'); %载体图像dwt变换
[U,S,V]=svd(LL); %低频分量SVD分解
% 读入数字水印
msg=('RB5Chb5+tb3dq4xsXsZZ4wEMk7XcLQv06fG6fOchLyeTJ71il+B34ue0NCDA35samd/xzXCFdIGsXi8F5Ubsgw==');
msg_native=unicode2native(msg); %转成本地编码
W=de2bi(msg_native,8,'left-msb'); %载入水印
W=im2double(W);
%-----------------------由于嵌入的是文字,生成的是88*8的矩阵,这里生成的Sw是88*8的-------------------------------------%
[Uw,Sw,Vw]=svd(W); %水印图SVD分解
%-----------------------由于嵌入的是文字,生成的是88*8的矩阵,这里生成的Sw是88*8的-------------------------------------%
af=0.2; %嵌入量
%-----------------------由于嵌入的是文字,生成的是88*8的矩阵,这乘法只支持160*160矩阵,会报错-------------------------------------%
S2=S+af*Sw; %水印图的奇异值矩阵Sw以af嵌入量加到载体图像LL子代的奇异值矩阵S上
%-----------------------由于嵌入的是文字,生成的是88*8的矩阵,这乘法只支持160*160矩阵,会报错-------------------------------------%
LL2=U*S2*V'; %嵌入后新的低频分量
IW=idwt2(LL2,LH,HL,HH,'haar'); %dwt逆变换得到含水印图
imwrite(IW,'watermarked.png');
figure(1);
subplot(1,3,1);imshow(I);title('载体图像');
subplot(1,3,2);imshow(IW);title('含水印图');
运行结果及报错内容
对于此运算,数组的大小不兼容。
我的解答思路和尝试过的方法
曾经尝试过使用padarray()函数进行矩阵的拓展,虽然可以正常嵌入。但是在水印提取的时候,无法提取出来。
我想要达到的结果
现在需要请教下,是否有将888的矩阵拓展为160160的矩阵,运算后160160的矩阵还能再还原为888的矩阵的办法。
或者有更好的dwt文字水印嵌入和提取的办法。