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 の変数名としてandを使用しないこと
をお勧めします。ij

于 2013-05-22T13:34:06.700 に答える