2015-02-07 4 views
0

У меня есть этот следующий код для чтения Y-компонента в последовательности CIF, которая бросает эту ошибку.Ошибка в функции reshape() в 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'); 

Что может пойти не так?

ответ

0

В вашем цикле вы не используете i так это выглядит как массив img_y открывающемся с fread имеет размеры [288, 352, 10] тогда, когда вы перекроить вы предоставляете только высоту и ширину изображения. Поэтому я думаю, что вам просто нужно индексировать img_y с индексом петли (я изменил от я до к ... я не так хорошо, как идея ее мнимой единицы) следующим образом:

  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 К RESHAPE количество элементов не должно меняться. Ошибка в foremanOne (строка 31) ImY = reshape (img_y (:,:, k), nColumn, nRow); – Prashanth

Смежные вопросы