Matlab 使用mrdivide时出错
我从互联网上找到了这段代码,在运行输出正确显示的代码时,我仍然收到了一个错误,在使用java代码时产生了一个问题 代码如下:Matlab 使用mrdivide时出错,matlab,Matlab,我从互联网上找到了这段代码,在运行输出正确显示的代码时,我仍然收到了一个错误,在使用java代码时产生了一个问题 代码如下: file_name='lena.bmp'; cover_object=double(imread(file_name)); mc=size(cover_object,1); nc=size(cover_object,2); file_name='dmg2.bmp'; message=double(imread(file_name)); mm=size(mess
file_name='lena.bmp';
cover_object=double(imread(file_name));
mc=size(cover_object,1);
nc=size(cover_object,2);
file_name='dmg2.bmp';
message=double(imread(file_name));
mm=size(message,1);
nm=size(message,2);
[ca,ch,cv,cd]=dwt2(cover_object,'haar');
ca1=ca;
qiangdu=1;
for i=1:nm
for j=1:nm
if(message(i,j)==0)
ca1(i,j)=ca(i,j)+qiangdu;
end
end
end
watermarked_image=idwt2(ca1,ch,cv,cd,'haar');
watermarked_image_round=round(watermarked_image);
watermarked_image_uint8=uint8(watermarked_image_round);
imshow(watermarked_image_uint8);
figure(2)
imshow(watermarked_image_uint8,[])
title('watermarked image')
imwrite(watermarked_image_uint8,'dwt_watermarked.bmp','bmp');
xsz=mc*nc*max(max(cover_object.^2))/sum(sum((cover_objectwatermarked_image_round).^2));
psnr=10*log10(xsz);
下面是我得到的错误:
Error using ==> mrdivide
Input arguments must be 2-D.
Error in ==> emb at 33
xsz=mc*nc*max(max(cover_object.^2))/sum(sum((cover_object-watermarked_image_round).^2));
编辑1:为了将java与matlab链接,我使用了一个开源的matlab控制google代码,从命令行javac Dwtembed.java运行此代码。这将是明确的,如果你复制粘贴下面的代码和检查,你会明白我实际上试图做什么
import matlabcontrol.*;
class Dwtembed
{
public static void main(String[] args) throws MatlabConnectionException, MatlabInvocationException
{
//Create a proxy, which we will use to control MATLAB
MatlabProxyFactory factory = new MatlabProxyFactory();
MatlabProxy proxy = factory.getProxy();
proxy.eval("file_name='lena.bmp';");
proxy.eval("cover_object=double(imread(file_name));");
proxy.eval("mc=size(cover_object,1);");
proxy.eval("nc=size(cover_object,2);");
proxy.eval("file_name='dmg2.bmp';");
proxy.eval("message=double(imread(file_name));");
proxy.eval("mm=size(message,1);");
proxy.eval("nm=size(message,2);");
proxy.eval("[ca,ch,cv,cd]=dwt2(cover_object,'haar');");
proxy.eval("ca1=ca;");
proxy.eval("qiangdu=1;");
proxy.eval("for i=1:nm");
proxy.eval("for j=1:nm");
proxy.eval("if(message(i,j)==0)");
proxy.eval("ca1(i,j)=ca(i,j)+qiangdu;");
proxy.eval("end");
proxy.eval("end");
proxy.eval("end");
proxy.eval("watermarked_image=idwt2(ca1,ch,cv,cd,'haar');");
proxy.eval("watermarked_image_round=round(watermarked_image);");
proxy.eval("watermarked_image_uint8=uint8(watermarked_image_round);");
proxy.eval("imshow(watermarked_image_uint8);");
proxy.eval("figure(2);");
proxy.eval("imshow(watermarked_image_uint8,[]);");
proxy.eval("title('watermarked image');");
proxy.eval("imwrite(watermarked_image_uint8,'dwt_watermarked.bmp','bmp');");
proxy.eval("xsz=mc*nc*max(max(cover_object.^2))./sum(sum((cover_object-watermarked_image_round).^2));");
proxy.eval("psnr=10*log10(xsz);");
//Disconnect the proxy from MATLAB
proxy.disconnect();
}
}
/
是矩阵除法。您可能需要/
。是的,这很有效,谢谢。这在Matlab内部编程时很有效,但是,当我在Matlab之外使用与Java相同的代码时,我得到了以下错误:错误:至少缺少一个结尾:语句可能从这里开始。
我不知道为什么会发生这种情况。@OliCharlesworth请回复我以前的评论,我不明白;这些代码都不是Java。