2013-03-02 45 views
0

要使用MATLAB鏈接的java我用一個開源的,Matlab的控制谷歌代碼 我收到此錯誤:Error: At least one END is missing: the statement may begin here.
運行在命令行中的javac Dwtembed.java此代碼。
如果你複製粘貼下面的代碼並檢查,你會明白我實際上正在做什麼,這一點很清楚。我真的希望能爲這個問題找到一些幫助。問題在用Matlab控制谷歌代碼

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(); 
    } 
} 
+0

那麼在哪一行表示語句可能開始?這是'if'陳述嗎? – jerad 2013-03-02 17:17:56

+0

@jerad感謝您的評論,但我真的不知道,它沒有提及行號 – sumedha 2013-03-02 17:22:18

+0

@ jerad是否嘗試執行代碼,並且您得到相同的錯誤? – sumedha 2013-03-02 17:23:13

回答

0

你不能evalfor S和if就像是,作爲for i=1:nm是不是本身就是一個有效的MATLAB語句。您需要完成的MATLAB語句的東西eval

請嘗試將forif聲明的全部內容放在一個單獨的eval中。

+0

感謝您的迴應,我試着做你說的,但它給錯誤。這是我這樣做:'proxy.eval(「對於i = 1:納米 \t \t \t \t \t對於j = 1:納米 \t \t \t \t \t如果(消息(I,J)== 0) \t \t \t \t \t ca1(i,j)= ca(i,j)+ qiangdu; \t \t \t \t \t年底 \t \t \t \t \t年底 \t \t \t \t結束「);' – sumedha 2013-03-03 04:59:46

+1

OK,兩件事情:第一,你有說法仍然不是一個有效的MATLAB命令。你需要把分號放入單獨的語句中:'for i = 1:nm for j = 1:nm if(message(i,j)== 0)ca1(i,j)= ca(i,j)+ qiangdu;結束;結束; end'。其次,我認爲如果你只是將所有的MATLAB命令合併到一個.m文件中 - 比如稱之爲「myscript.m」,然後嘗試'proxy.eval(「myscript」) ;'。 – 2013-03-04 09:57:56

+0

,我按照你的建議嘗試了proxy.eval(「myscript」),它的工作方式就像是魔法:)謝謝你,我從來不知道它:) – sumedha 2013-03-04 14:47:25