2013-03-01 2 views
1

Je tente un code particulier dans Matlab mais obtenir l'erreur
Error using ==> plus
Matrix dimensions must agree.
erreur de dimension matricielle dans le code Matlab

à cette ligne

LL_1=LL+k; 

k=w*alpha; et [LL,LH,HL,HH] = dwt2(X,'db1','d'); et X=imread('cameraman.tif'); X=im2double(X);
S'il vous plaît, aidez-moi comment devrais-je résoudre cette erreur?

Edit: je suis passé par l'un des postes ici et essayé d'utiliser bsxfun

LL_1=bsxfun(@plus,LL+k); 

mais cela ne résout pas le problème

Edit 2: Le code est sur le watermarking image numérique en utilisant l'algorithme de tpl , j'ai trouvé ce code lors de la navigation sur Internet mais il donne les erreurs que j'ai discutées ci-dessus.
J'ai posté la première moitié du code jusqu'à ce que je reçois l'erreur.
J'espère que ma réponse est utile pour résoudre l'erreur

%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

lorsque vous utilisez 'size' sur les matrices que vous avez écrit, qu'est-ce que vous obtenez? qui est, 'taille (LL)' et 'taille (K)' –

+0

valeur de LL est la suivante: <171x210x3 double> et la valeur de k est la suivante: <273x286 double> – sumedha

+0

'taille (LL) ans = 171 210 3'' size (k) ans = 273 286' – sumedha

Répondre

1

Essayez bsxfun comme ceci:

LL_1=bsxfun(@plus, LL, k); 

Modifier: Consolider les réponses de la suggestion ci-dessus, les commentaires sur la réponse de Natan et le nouveau code affiché par l'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'); 
+0

Salut, j'ai essayé, mais je reçois une erreur 'Les dimensions non-singleton des deux tableaux d'entrée doivent correspondre à chaque autre. – sumedha

+0

Le s'il vous plaît afficher la sortie de 'size()' sur 'LL' et' k' comme @Count suggéré – Dan

+0

Est-ce ce que vous demandez? la valeur de LL est: <171x210x3 double> et la valeur de k est: <273x286 double> Je viens de poster la même chose à la question @ Count – sumedha

1

il ressemble à une taille de b à la taille de X (ou vice versa) permettra de résoudre votre problème. Après avoir lu b essayer,

b=imresize(b,size(X)) 

Puis le bsxfun qui a suggéré devrait fonctionner @ Dan ...

+0

j'ai essayé ceci mais il donne toujours des erreurs: 'Erreur utilisant ==> iptcheckmap à 40 La fonction IMRESIZE a attendu son deuxième argument d'entrée, MAP, pour être une valide. Les cartes de couleurs valides ne peuvent pas avoir de valeurs en dehors de la plage [0,1]. Erreur dans ==> imresize> parsePreMethodArgs au 368 iptcheckmap (carte, mfilename, 'MAP', 2); erreur dans ==> imresize> parseInputs à 263 [params.A, params.map, params.scale, params.output_size] = ... erreur dans ==> imresize à 140 params = parseInputs (varargin {:}); Erreur dans ==> dwtcode à 10 b = imresize (b, taille (X)); ' – sumedha

+0

Ensuite, essayez peut-être' b = imresize (b, taille (squeeze (X (:,:, 1))) ' – Dan

+0

@Dan j'ai essayé la suggestion ci-dessus mais il me donne toujours une erreur à: 'LL_1 = bsxfun (@plus, LL, k);' les dimensions ne correspondent pas – sumedha

Questions connexes