2015-02-07 1 views
0

이 오류가 발생하는 CIF 시퀀스의 Y 구성 요소를 읽으려면 다음 코드를 사용합니다.matlab의 reshape() 함수에서 오류가 발생했습니다.

변형을 사용하는 중 오류 RESHAPE하려면 요소 수를 변경하면 안됩니다.

foremanOne (12 행) 오류 img_y = reshape (img_y, nColumn, nRow);

코드가

잘못 됐을 수도 무엇
  clc; 
      file = 'foreman.cif'; 
      nFrame = 10; 
      [fid,message]= fopen(file,'rb'); 
      nRow = 288; 
      nColumn = 352; 

      for i = 1: nFrame 
       %reading Y component 
       img_y = fread(fid, nRow * nColumn, 'uchar'); 
       img_y = reshape(img_y, nColumn, nRow); 
       img_y = img_y'; 
       imshow(uint8(img_y)); 
      end 

      fclose(fid); 
      disp('OK'); 

입니까? 당신이 i 그래서 당신이 fread로 열 배열 img_y처럼 보인다 사용하지 않는 루프에서

답변

0

치수 당신은 이미지의 높이와 폭을 제공 바꿀 때 반면 [288, 352, 10]이다. 따라서 당신이 단순히 루프 인덱스와 인덱스 img_y 필요가 있다고 생각 (난 내가 k로에서 ... 나는 그것의 허수 단위로 너무 좋은 생각이 아니다 변경)과 같이 :

  clc; 
      file = 'foreman.cif'; 
      nFrame = 10; 
      [fid,message]= fopen(file,'rb'); 
      nRow = 288; 
      nColumn = 352; 

     %// Use fread once outside the loop and convert right away everything to uint8. 
      img_y = uint8(fread(fid, nRow * nColumn, 'uchar')); 

      for k = 1:nFrame 
       %// reading Y component. I changed the name to avoid confusion 
       ImY = reshape(img_y(:,:,k), nColumn, nRow); %// Use index here 
       ImY = ImY'; 
       imshow(ImY); 

      pause(0.5) %// You might want to pause to see each image individually 
      end 

      fclose(fid); 
      disp('OK'); 

좀했다 코드를 좀 더 효율적으로 만들 수있는 다른 변경 사항도 있습니다.

희망 하시겠습니까?

+0

접수 해 주셔서 감사합니다. 나는'ImY'가'[nColumn, nRow] '차원을 갖도록 재구성 된 것을 알아 챘습니다. MATLAB에서 행을 인덱싱하는 동안 먼저 행을 바꿀 수 있으므로 스왑해야 할 수 있습니다. –

+0

코드를 실행하려고 시도했지만 오류가 여전히 동일합니다 !! – Prashanth

+0

변형을 사용하는 중 오류가 발생했습니다. RESHAPE하려면 요소 수를 변경해서는 안됩니다. foremanOne (line 31)의 오류 ImY = reshape (img_y (:, :, k), nColumn, nRow); – Prashanth