奇异值分解matlab代码中的错误

时间:2015-01-30 00:16:31

标签: matlab steganography svd dwt

我在下面的代码中遇到错误"矩阵维度必须同意"它出现在代码行中(Shw = Sh + a * Sw;)我使用的coverImage是灰度图像,tiff格式和水印一样。有什么建议我的问题可能是什么?谢谢

filename='107_3.tif';
coverImage = imread(filename);
Mc=size(coverImage,1);
Nc=size(coverImage,2);

a=10;


watermark = imread('dmg1.tif');

watermark=im2bw(watermark,0.05);
Mn=size(watermark,1);
Nn=size(watermark,2);

[LL,LH,HL,HH] = dwt2(coverImage,'haar');
%[LL1,LH1,HL1,HH1] = dwt2(HH,'haar');

Ih=idwt2([],[],[],HH,'haar');

[Uh,Sh,Vh]=svd(Ih);
[Uw,Sw,Vw]=svd(double(watermark));

Shw=Sh+a*Sw;**%%%%%ERROR OCCURRING HERE%%%%%**
VhT=transpose(Vh);
Ihw=Uh*Shw*VhT;
[LL2,LH2,HL2,HH2]=dwt2(Ihw,'haar');
watermarked_image=idwt2(LL,LH,LH,HH,'haar');
figure;
imshow(watermarked_image,[]);
title('Watermarked Image');

1 个答案:

答案 0 :(得分:0)

[Uh,Sh,Vh]=svd(Ih);
[Uw,Sw,Vw]=svd(double(watermark));

当您运行svd时,结果矩阵ShIh具有相同的维度,结果Sw的维度为watermark
http://www.mathworks.com/help/matlab/ref/svd.html

现在,

Shw=Sh+a*Sw;
你正在加两个矩阵。添加矩阵要求您添加的矩阵具有相同的尺寸(rows的相同数量,cols的相同数量) http://en.wikipedia.org/wiki/Matrix_addition

所以,这似乎意味着:您的代码希望水印与输入图像的尺寸相同。我不知道您在哪种情况下使用的图像,但它似乎这是一个错误的期望。我猜你正在使用的水印通常比你嵌入它的输入图像更小,可能要小得多。

所以看来你需要

  1. 使用与输入或
  2. 尺寸相同的水印
  3. 修改代码,使水印的尺寸不是 取决于输入图像的尺寸。