我正在尝试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');
答案 0 :(得分: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');
答案 1 :(得分:1)
看起来b
的重新调整大小为X
(反之亦然)将解决您的问题。阅读b
后尝试
b=imresize(b,size(X))
那么@Dan建议的bsxfun
应该有用......