Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab代码中的矩阵维数误差_Matlab_Image Processing_Watermark_Bsxfun - Fatal编程技术网

matlab代码中的矩阵维数误差

matlab代码中的矩阵维数误差,matlab,image-processing,watermark,bsxfun,Matlab,Image Processing,Watermark,Bsxfun,我正在matlab中尝试一个特定的代码,但得到了错误 使用==>plus时出错 矩阵尺寸必须一致。 在这条线上 LL_1=LL+k; 其中k=w*alpha和[LL,LH,HL,HH]=dwt2(X,'db1','d')和X=imread('cameran.tif'); X=im2double(X) 请帮助我解决这个错误 编辑:我浏览了这里的一篇文章,并尝试使用bsxfun LL_1=bsxfun(@plus,LL+k); 但这并不能解决问题 编辑2:这段代码是关于使用dwt算法的数字图

我正在matlab中尝试一个特定的代码,但得到了错误
使用==>plus时出错
矩阵尺寸必须一致。

在这条线上

LL_1=LL+k;
其中
k=w*alpha
[LL,LH,HL,HH]=dwt2(X,'db1','d')
X=imread('cameran.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');

请尝试以下操作:

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');

看起来将
b
的大小重新调整为
X
(反之亦然)可以解决您的问题。阅读
b
try之后

 b=imresize(b,size(X))

然后,@Dan建议的
bsxfun
应该会起作用…

当你在你写的矩阵上使用
size
时,你得到了什么?也就是说,
size(LL)
size(K)
LL的值是:
size(LL)ans=1712103
size(K)ans=273286
您的水印图像比封面图像大-允许吗?也许你需要将水印图像裁剪到171 x 210像素?@Dan我试过了,但还是出现了一个错误:
LL_1=bsxfun(@plus,LL,k)错误是:两个输入数组的非单体维度必须相互匹配。您好,我尝试了此操作,但我得到一个错误“两个输入数组的非单体维度必须相互匹配”。请在
LL
k
上显示
size()的输出,如@Count建议这是您要问的吗?LL的值是:k的值是:我刚刚在@Count的问题中发布了相同的内容是的,那么你想如何将这两者相加呢?没有一个尺寸匹配。我认为您需要重写您的问题,并包含更多关于您正在尝试做什么的信息,以及输入值,如
w
alpha
X
以及代码编写顺序的信息。请将其从注释中删除,而不是编辑您的问题。这里很难阅读。我尝试了这个方法,但仍然会出现错误:
Error using==>iptcheckmap at 40函数IMRESIZE期望它的第二个输入参数MAP是有效的colormap。有效的颜色贴图的值不能超出范围[0,1]。368 iptcheckmap处==>imresize>parsePreMethodArgs出错(map,mfilename,'map',2);==>imresize>263处解析输入时出错[params.A,params.map,params.scale,params.output_size]=。。。140参数=parseInputs处的==>imresize错误(varargin{:});10b=imresize(b,size(X))时出现==>dwtcode错误
然后可能尝试
b=imresize(b,size)(挤压(X(:,:,1))
@我尝试了上述建议,但仍然给我一个错误:
LL_1=bsxfun(@plus,LL,k);
尺寸不匹配这次LL和k的大小是多少?基本上是为了
bsxfun
工作
size(挤压(L(:,:,:,1)))
必须等于
size(k)
。如果
X
LL
具有不同的维度,则需要
b=imresize(b,size(挤压(LL(:,:,1)))
。顺便说一句,挤压可能没有必要,在没有挤压的情况下进行检查,如果没有出现错误,请停止挤压。我在这方面浪费了很多时间,但它不起作用,我已经放弃尝试,并在我的项目中使用另一个工作非常好的代码。