2011-04-30 41 views
0

我在版本6.5中得到不同的結果7.5。下面是6.5結果值在matlab 6.5和7.5中編譯時發生變化

corr_a1=[10 49 1 25 6 3 47 4475 20 2017 14 23 3 29 9 47 4 5 21 2019 53 6280 23 26 0 23 8 17 907 13 13 19 5 18 14 10 ]; 

的結果,這裏的7.5

corr_a1=[6 17 0 14 3 7 18 5242 3 1271 3 7 1 4 3 14 0 0 13 1289 15 7353 17 11 2 14 1 8 893 0 7 8 0 8 2 2 ]; 

我的代碼,結果如下:

img1=imread(fn);%reading image 

img=imresize(img1,[128 128]); 

img=double(img); 

img_red=img(:,:,1); 

img1_red=repmat(img_red,[1 1 3]); 

img_green=img(:,:,2); 

img1_green=repmat(img_green,[1 1 3]); 

img_blue=img(:,:,3); 

img1_blue=repmat(img_blue,[1 1 3]); 

siz=size(img); 


%initialising color categories for image 

r_maxb_min=zeros(siz); 

r_maxg_min=zeros(siz); 

g_maxr_min=zeros(siz); 

g_maxb_min=zeros(siz); 

b_maxr_min=zeros(siz); 

b_maxg_min=zeros(siz); 

%1=RmaxGmin 
%2=RmaxBmin 
%3=GmaxGmin 
%4=GmaxBmin 
%5=BmaxRmin 
%6=BmaxGmin 

%representation of image with color categories 

for row=1:siz(1) 

     for col=1:siz(2) 

     r=img_red(row,col); 

     g=img_green(row,col); 

     b=img_blue(row,col); 

     a1=[r,g,b]; 

     if (max(a1)==r) & (min(a1)==g) 

      r_maxg_min(row,col)=r_maxg_min(row,col)+img(row,col); 

      img(row,col)=1; 

      elseif (max(a1)==r) & (min(a1)==b) 

      r_maxb_min(row,col)=r_maxb_min(row,col)+img(row,col); 

      img(row,col)=2; 

     end 

     end 
end 



for row1=1:siz(1) 

     for col1=1:siz(2) 

     r1=img_red(row1,col1); 

     g1=img_green(row1,col1); 

     b1=img_blue(row1,col1); 

     a2=[r1,g1,b1]; 

     if (max(a2)==g1) & (min(a2)==r1) 

     g_maxr_min(row1,col1)=g_maxr_min(row1,col1)+img(row1,col1); 

     img(row1,col1)=3; 

      elseif (max(a2)==g1) & (min(a2)==b1) 

      g_maxb_min(row1,col1)=g_maxb_min(row1,col1)+img(row1,col1); 

      img(row1,col1)=4; 

     end 

     end 
end 



for row2=1:siz(1) 

     for col2=1:siz(2) 

     r2=img_red(row2,col2); 

     g2=img_green(row2,col2); 

     b2=img_blue(row2,col2); 

     a3=[r2,g2,b2]; 

     if (max(a3)==b2) & (min(a3)==r2) 

     b_maxr_min(row2,col2)=b_maxr_min(row2,col2)+img(row2,col2); 

     img(row2,col2)=5; 

      elseif (max(a3)==b2) & (min(a3)==g2) 

      b_maxg_min(row2,col2)=b_maxg_min(row2,col2)+img(row2,col2); 

      img(row2,col2)=6; 

     end 

     end 
end 


b_maxr_min; 
b_maxg_min; 
g_maxr_min; 
g_maxb_min; 
r_maxg_min; 
r_maxb_min; 

set1=[r_maxg_min r_maxg_min g_maxr_min g_maxb_min b_maxr_min b_maxg_min]; 

result=img(:,:,1); 

siz_res=size(result); 

img1; 

result; 

%constructing color corellogram 

max_res=max(max(result)); 

corr=zeros(max_res,max_res); 

dy=1; 
dx=0; 
for row=1:siz_res(1)-dx 

    for col=1:siz_res(2)-dy 

     i=result(row,col); 

     j=result(row+dx,col+dy); 

     corr(i,j)=corr(i,j)+1; 

     end 

    end 

corr; 
corr_a1=corr(:)'; 
+0

請不要發表任何代碼。我們沒有時間閱讀它。如果您有一個能夠再現您的錯誤的最小示例,請將其發佈。 – abcd 2011-04-30 06:31:00

回答

0

我不知道什麼是在兩個版本腳麻,但這裏有一些關於如何解決這個問題的評論和提示:

  • 我個人使用im2double如果這兩個版本都可用
  • 爲了解決您的問題,您可以嘗試縮小問題的位置,很可能錯誤可能位於開頭的某處,通過您的代碼傳播並給出錯誤的輸出。

實際上,我看到最後一步如下:您同時在MATLAB 6.5和MATLAB 7.5中運行代碼。但是,在每個大部分代碼之間,都會放上%%。在MATLAB 7中,這允許您以「單元模式」運行此代碼,以便您可以輕鬆地僅執行該代碼單元(段)。

在MATLAB 6.5中,您必須通過手動執行部分代碼來模擬該行爲(但您可以將%%作爲可視提示離開)。您可以通過執行第一個單元格開始,然後從MATLAB 6.5導出您的工作空間的變量:

save(); 

而且在MATLAB 7.5導入相同的變量爲結構:

matlab65 = load(); 

在那裏,你可以做比較在每個變量上看看它們是否仍然相等。完全自動化的可能(閱讀:未經測試的代碼)的樣子:

matlab65 = load(); 
fields = fieldnames(matlab65) 
for iField = 1:numel(fields) 
    variable = fields{iField}; 
    if any((eval(sprintf('%s ~= matlab65.%s',variable,variable)))) 
     fprintf(1,'%s is not equal',variable); 
    end 
end 
clear fields variable iField 

如果它們不相等,你知道問題是什麼地方在你的代碼已經執行(和要重點變量不相等)。如果變量是相等的,只需在兩個版本中執行第二個單元格並像以前一樣將舊結果導入到新的MATLAB中。

通過這樣做,您可以將錯誤跟蹤到單個代碼單元,然後您可以使用調試器(在兩個MATLAB版本中)來跟蹤代碼單元中的錯誤。

您也可以應用衆所周知的二分法策略:即將代碼拆分爲兩個單元格(大小近似相等)並運行以下過程:您將發現第一部分或第二部分中存在錯誤(當part1中的所有變量都相等時)。將包含錯誤的代碼部分分爲兩部分,重複該過程。

相關問題