MATLAB编码问题

时间:2010-10-12 02:37:36

标签: algorithm matlab matrix multidimensional-array

嘿伙计们,当我试图触发下面的功能时,我收到了此错误消息。有人可以帮帮我吗?谢谢!

>> 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 个答案:

答案 0 :(得分:1)

在外循环的每次迭代中,您似乎在第四维中将imgYuv增加一个,从空开始。但是你的内部循环总是从1循环到nFrames-1。因此,在我看来,您似乎试图超出imgYuv的范围。

在一个不相关的说明中,增长这样的数组通常非常慢。在开始之前初始化imgYuv要好得多,即imgYuv = zeros([height,width,3,nFrames])