我正在尝试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);
请帮助我,我应该如何解决这个错误?
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');
看起来将b
的大小调整为X
的大小(反之亦然)将解决您的问题。阅读完b
后,
b=imresize(b,size(X))
那么@Dan建议的bsxfun
应该可以工作…
试试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');