matlab代码中的矩阵维数误差
我正在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算法的数字图
使用==>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)))
。顺便说一句,挤压可能没有必要,在没有挤压的情况下进行检查,如果没有出现错误,请停止挤压。我在这方面浪费了很多时间,但它不起作用,我已经放弃尝试,并在我的项目中使用另一个工作非常好的代码。