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);
このエラーをどのように解決すればよいか教えてください。

編集:私はここの投稿の1つを調べて、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 に答える