2013-03-01 129 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