2013-03-01 3 views
1

я пытаюсь определенный код в MATLAB, но получаю ошибку
Error using ==> plus
Matrix dimensions must agree.
матрица ошибок измерения в MatLab код

на этой линии

LL_1=LL+k; 

где k=w*alpha; и [LL,LH,HL,HH] = dwt2(X,'db1','d'); и X=imread('cameraman.tif'); X=im2double(X);
Пожалуйста, помогите мне как я могу решить эту ошибку?

Edit: Я прошел через один из постов здесь и пытался использовать bsxfun

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

, но это не решает проблему

Edit 2: Код о цифровых водяных знаков изображения с использованием алгоритма дедвейтом , я нашел этот код во время просмотра через Интернет, но он дает ошибки, о которых я говорил выше.
Я отправил первую половину кода до тех пор, пока не получу ошибку.
Я надеюсь, что мой ответ полезен в решении ошибки

%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

при использовании 'size' на матрицах, которые вы написали, что вы получите? то есть 'размер (LL) и' размер (K), ' – 2013-03-01 06:47:14

+0

значение LL является: <171x210x3 дважды> и значение к: <273x286 двойной> – sumedha

+0

' размер (LL) ANS = 171 210 3'' размер (k) ans = 273 286' – sumedha

ответ

1

Попробуйте bsxfun так:

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

Edit: Закрепление ответы из приведенного выше предложения, замечания по ответу Натана и новый код ОП размещен

%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

Привет, я пробовал это, но я получаю сообщение об ошибке «Не одиночные размеры двух входных массивов должны соответствовать каждому другим». – sumedha

+0

Пожалуйста, покажите вывод 'size()' on 'LL' и' k' like @Count, предложенный – Dan

+0

. Разве это то, что вы просите? значение LL: <171x210x3 double>, а значение k равно: <273x286 double> Я просто разместил то же самое на вопрос @ Count – sumedha

1

выглядит как размер размером b размером X (или наоборот), решит вашу проблему. После прочтения b попробовать,

b=imresize(b,size(X)) 

Тогда bsxfun, что @Dan предложил должен работать ...

+0

Я попробовал это, но он все еще дает ошибки: 'Ошибка using ==> iptcheckmap at 40 Функция IMRESIZE ожидает, что его второй входной аргумент, MAP, будет действительным цветом. Допустимые цветовые карты не могут иметь значения вне диапазона [0,1]. Ошибка в ==> imresize> parsePreMethodArgs at 368 iptcheckmap (map, mfilename, 'MAP', 2); Ошибка в ==> imresize> parseInputs на 263 [params.A, params.map, params.scale, params.output_size] = ... Ошибка в ==> imresize в 140 Params = parseInputs (varargin {:}); Ошибка в ==> dwtcode при 10 b = imresize (b, size (X)); ' – sumedha

+0

Тогда, возможно, попробуйте' b = imresize (b, size (squeeze (X (:,:, 1))) ' – Dan

+0

@ Dan Я попробовал вышеуказанное предложение, но оно все еще дает мне ошибку: 'LL_1 = bsxfun (@plus, LL, k);' размеры не соответствуют – sumedha