2013-03-01 322 views
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);
請幫我我應該如何解決這個錯誤?

編輯:我經過這裏的職位的人去使用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

,你得到了什麼? 即,'大小(LL)'和'大小(K)'LL的 – 2013-03-01 06:47:14

+0

值是:<171x210x3雙>和k的值是:<273x286雙> – sumedha 2013-03-01 07:20:28

+0

'大小(LL) ANS = 171 210 3'' size(k) ans = 273 286' – sumedha 2013-03-01 07:38:24

回答

1

嘗試bsxfun這樣的:

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

編輯: 從上面的建議合併的答案,對納坦的答案的評論和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

嗨,我試過這個,但我得到一個錯誤'非單身尺寸的兩個輸入數組必須匹配每個 其他。 – sumedha 2013-03-01 07:19:44

+0

請在'LL'和'k'上顯示'size()'的輸出,建議使用@Count – Dan 2013-03-01 07:20:38

+0

這是你要求的嗎? LL的值是:<171x210x3 double>,k的值是:<273x286 double>我剛剛發佈了與@ Count相同的問題 – sumedha 2013-03-01 07:24:45

1

它看起來像b重新大小到X(反之亦然)的大小將解決您的問題。你讀b嘗試,之後

b=imresize(b,size(X)) 

然後就是@丹建議應該工作bsxfun ......

當你用你寫的矩陣`size`
+0

我試過這個,但它仍然給出錯誤:'Error Error ==> iptcheckmap at 40 函數IMRESIZE預計它的第二個輸入參數MAP是一個 有效的顏色映射表。 有效的色彩映射不能具有[0,1]範圍之外的值。 錯誤在==> imresize> parsePreMethodArgs在368 iptcheckmap(map,mfilename,'MAP',2); 錯誤==> imresize>在263 [params.A,params.map,params.scale,params.output_size] = ... 錯誤==> imresize在140 PARAMS = parseInputs(varargin parseInputs {:}); (b,size(X));' – sumedha 2013-03-01 13:11:35

+0

然後試試'b = – Dan 2013-03-01 13:16:24

+0

@丹我嘗試了上面的建議,但它仍然給我一個錯誤:'LL_1 = bsxfun(@plus,LL,k);'尺寸不匹配 – sumedha 2013-03-01 13:42:24