2013-05-22 3 views
1

저는 비디오의 각 프레임에서 각 픽셀의 평균값을 계산하기 위해 Matlab에서 중간 함수 (http://www.mathworks.com/help/matlab/ref/median.html)를 사용하고 있습니다.Matlab에서 효율적인 프레임의 중앙값을 계산하는 방법은 무엇입니까?

[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

방법에 대해 :

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

PS, 그것은 not to use i and j as variable names in Matlab 최고
.

+0

이렇게 나에게이 오류가 발생합니다. "중간 값 사용 오류 (줄 28) 첫 번째 입력은 반드시 단일 또는 이중이어야합니다." – Ozg

+1

@ozg 그런 다음'single'으로 캐스팅하십시오.'background = uint8 (median (single (video), 4));' – Shai

+0

알겠습니다. 한 줄로 계산할 수 없다고 생각합니다. – Ozg

관련 문제