图像处理-矩阵尺寸误差的matlab代码



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

看起来将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');

相关内容

  • 没有找到相关文章

最新更新