1

我在“矩阵尺寸必须一致”下面的代码中出现错误它发生在代码行中(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');
4

1 回答 1

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

运行svd时,结果矩阵Sh的维度与 相同Ih,结果矩阵Sw的维度为watermark
http://www.mathworks.com/help/matlab/ref/svd.html

现在,

Shw=Sh+a*Sw;

您将 2 个矩阵加在一起。矩阵加法要求您加在一起的矩阵具有相同的维度(相同的数量rows,相同的数量colshttp://en.wikipedia.org/wiki/Matrix_addition

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

所以看来你要么需要

  1. 使用与输入相同尺寸的水印或
  2. 修改您的代码,使水印的尺寸不依赖于输入图像的尺寸。
于 2015-01-30T00:29:17.023 回答