1

我在 Matlab 中使用中值函数(http://www.mathworks.com/help/matlab/ref/median.html)来计算视频中每个帧的每个像素的平均值。这是我的代码:

[a,b,c,d] = size(video);  //take video's dimensions
background=zeros(a,b,c);  //create a matrix for background image
tempR=zeros(1,d);         //create template matrices for each channel
tempG=zeros(1,d);
tempB=zeros(1,d);
for i=1:a    % for each pixel
    for j=1:b
        for(k=1:d)       //for each frame
            tempR(1,k) = video(i,j,1,k); // r channel
            tempG(1,k) = video(i,j,2,k); // g channel
            tempB(1,k) = video(i,j,3,k); // b channel
        end
        background(i,j,1) = median(tempR);  //calculate median value for each channel
        background(i,j,2) = median(tempG);
        background(i,j,3) = median(tempB);
    end
end

我的问题是:有没有更有效的方法来做到这一点?如图所示,这种方式效率不高,对于较大的视频,它的工作速度非常慢。为每个帧、通道和像素使用 for 循环会产生成本。我可以以更有效的方式计算中值吗?

4

1 回答 1

4

怎么样:

background = median( video, 4 ); % median along fourth dim

PS,
最好不要在 Matlab中使用iandj作为变量名。

于 2013-05-22T13:34:06.700 回答