matlab代码中的矩阵维度错误

时间:2013-03-01 06:44:44

标签: matlab image-processing watermark bsxfun

我正在尝试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');

2 个答案:

答案 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应该有用......