1

我正在 matlab 中尝试特定代码但收到错误
Error using ==> plus
Matrix dimensions must agree.

在这条线上

LL_1=LL+k;

在哪里k=w*alpha;[LL,LH,HL,HH] = dwt2(X,'db1','d');X=imread('cameraman.tif'); X=im2double(X);
帮助我应该如何解决这个错误?

编辑:我浏览了这里的一篇文章并尝试使用 bsxfun

LL_1=bsxfun(@plus,LL+k);  

但这并不能解决问题

编辑 2:代码是关于使用 dwt 算法的数字图像水印,我在浏览互联网时发现了这个代码,但它给出了我上面讨论的错误。
我已经发布了代码的前半部分,直到出现错误。
我希望我的回复对解决错误有用

%loading cover image 
X=imread('cameraman.tif'); 
X=im2double(X); 
[F1,F2]=wfilters('db1','d'); 
[LL,LH,HL,HH] = dwt2(X,'db1','d');

%watermark image 
b=imread('copyright.bmp'); 
level=graythresh(b); 
w=im2bw(b,level); 
w=double(w); 
alpha=0.09; 
k=w*alpha; 
LL_1=bsxfun(@plus, LL, k); 
Y=idwt2(LL_1,LH,HL,HH,'db1','d');
4

2 回答 2

1

看起来重新b调整大小X(或反之亦然)将解决您的问题。读完b试试,

 b=imresize(b,size(X))

那么bsxfun@Dan建议的应该可以工作......

于 2013-03-01T08:57:21.443 回答
1

试试bsxfun这样:

LL_1=bsxfun(@plus, LL, k); 

编辑:合并上述建议的答案、对 Natan 答案的评论以及 OP 发布的新代码

%loading cover image 
X=imread('cameraman.tif'); 
X=im2double(X); 
[F1,F2]=wfilters('db1','d'); 
[LL,LH,HL,HH] = dwt2(X,'db1','d');

%watermark image 
b=imread('copyright.bmp');
b=imresize(b,size(squeeze(LL(:, :, 1)));
level=graythresh(b); 
w=im2bw(b,level); 
w=double(w); 
alpha=0.09; 
k=w*alpha; 
LL_1=bsxfun(@plus, LL, k); 
Y=idwt2(LL_1,LH,HL,HH,'db1','d');
于 2013-03-01T07:11:16.173 回答