MATLAB проблема кодирования - PullRequest
       21

MATLAB проблема кодирования

0 голосов
/ 12 октября 2010

Привет, ребята, я получил это сообщение об ошибке при попытке вызвать функцию ниже.Кто-нибудь может мне помочь?Спасибо!

>> changeYuv('tilt.yuv',352,288,1:40,40);
??? Index exceeds matrix dimensions.
    Error in ==> changeYuv at 32
            j=histogram(imgYuv(:,:,1,k+1));

>> [x,y,z,a]=size(imgYuv)
x =
   288
y =
   352
z =
     3
a =
    40

Исходный код:

function [imgYuv, S]= changeYuv(fileName, width, height, idxFrame, nFrames) 
% load RGB movie [0, 255] from YUV 4:2:0 file

fileId = fopen(fileName, 'r');

subSampleMat = [1, 1; 1, 1];
nrFrame = length(idxFrame);

for f = 1 : 1 : nrFrame
    % search fileId position
    sizeFrame = 1.5 * width * height;
    fseek(fileId, (idxFrame(f) - 1) * sizeFrame, 'bof');

    % read Y component
    buf = fread(fileId, width * height, 'uchar');
    imgYuv(:, :, 1,f) = reshape(buf, width, height).';

    % read U component
    buf = fread(fileId, width / 2 * height / 2, 'uchar');
    imgYuv(:, :, 2,f) = kron(reshape(buf, width / 2, height / 2).', subSampleMat); % reshape and upsample

    % read V component
    buf = fread(fileId, width / 2 * height / 2, 'uchar');
    imgYuv(:, :, 3,f) = kron(reshape(buf, width / 2, height / 2).', subSampleMat); % reshape and upsample

    %histogram difference of Y component
    for k=1:(nFrames-1)
        h=histogram(imgYuv(:,:,1,k));
        j=histogram(imgYuv(:,:,1,k+1));
        X=abs(h-j)/256;
        S(k)=sum(X);
    end
end
fclose(fileId);

1 Ответ

1 голос
/ 12 октября 2010

На каждой итерации внешнего цикла вы, кажется, увеличиваете imgYuv на единицу в 4-м измерении, начиная с пустого. Но ваш внутренний цикл всегда проходит от 1 до nFrames-1. Поэтому мне кажется, что вы пытаетесь получить доступ за пределы imgYuv.

На несвязанной ноте рост такого массива обычно очень медленный. Вам гораздо лучше инициализировать imgYuv перед началом, то есть imgYuv = zeros([height,width,3,nFrames]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...