2011-04-30 5 views
0

6.5 & 7.5 사이에 다른 결과가 나타납니다. 여기에 6.5matlab 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

답변

0

내가 두 버전에서 잘못 무슨 일이 일어나고 있는지 모른다, 여기에 문제를 해결하는 방법에 대한 몇 가지 비고와 팁이 있습니다 :

  • 나는 개인적으로 im2double을 사용할 수 있습니다. 두 버전 모두에서 사용할 수 있습니다.
  • 문제를 해결할 때 문제가있는 곳을 좁히려 고 시도 할 수 있습니다. 처음에는 오류가 어딘가에있을 수 있으며 코드 전체를 전파하고 잘못된 출력.

사실 마지막 단계는 다음과 같습니다. MATLAB 6.5와 MATLAB 7.5 모두에서 코드를 동시에 실행합니다. 그러나 코드의 각 큰 세그먼트 사이에 %%을 넣습니다. MATLAB 7에서는이 코드를 "셀 모드"로 실행하여 해당 셀 (세그먼트) 만 쉽게 실행할 수 있습니다.

MATLAB 6.5에서는 코드의 일부를 수동으로 실행하여 해당 동작을 에뮬레이션해야합니다 (코드에서 %%을 코드에 시각적 큐로 남겨 둘 수 있음). 당신은 첫 번째 셀을 실행하여 시작하고 당신은 MATLAB 6.5에서 작업 공간 변수를 내보내기 : 거기 당신은 비교를 할 수

matlab65 = load(); 

:

save(); 

그리고 MATLAB 7.5 당신이 구조체와 같은 변수를 가져

각 변수에 대해 변수가 여전히 같은지 확인하십시오. 같이 : 완전히 힘이 (테스트되지 않은 코드를 읽기) : 것을 자동화가 동일하지 않은 경우, 당신은 당신이 변수에 초점을 맞추고 자하는 문제가 어딘가에 코드에서 당신이 이미 실행 된 것을 알고있다 (그리고

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의 모든 변수가 같을 때). 오류가있는 코드 부분을 두 부분으로 나누어 절차를 반복하십시오.

관련 문제