2016-12-09 4 views
1

저는 비디오 프레임에서 평균 이동 색상 기반 이미지 세분화를하고 있습니다. 다른 모든 프레임 유클리드 거리 (내 프레임이 작은 변화가)의 기준으로 각각의 클러스터를 계산하기 위해 나는이 같은 결과 만들어진을 사용하여 다음 평균 시프트 구현을위한 첫 번째 프레임을 전송하고 있어요MATLAB : iamresize 및 VideoReader가 너무 오래 걸리면 어떻게 피할 수 있습니까?

while hasFrame(v) 
    if k == 1 
     s(k).cdata = readFrame(v); 
     a = s(k).cdata; 
     I = imresize(a,[50,50]); 
     [means, Ims, Nms] = Ms(I,bw); %Mean Shift on first frame 
     Ims = im2uint8(Ims); 
     s(k).cdata = Ims; 
    else 
     s(k).cdata = readFrame(v); 
     a = s(k).cdata; 
     I = imresize(a,[50,50]); 
     [Ims,data2cluster]= MeanShiftCluster2(I,means); % simple segmentation based on norm using means of first frame    
     Ims = im2uint8(Ims); 
     Ims = imresize(Ims,[500,720]); 
     s(k).cdata = Ims; 
    end 

    k=k+1; 
end 

하는 의미 다음은 내 코드입니다.

문제 : Profiler에서는 iamresize 및 VideoReader 기능이 너무 오래 실행됩니다. 내가 사용할 수있는 대체물이 있습니까?

답변

0

imresize은 처리 속도가 가장 느릴 수 있습니다. 하지만 여기에 몇 가지 아이디어가 있습니다.

imresize 내재화를 수행하십시오. 이것은 느린 프로세스 일 수 있지만 속도는 원하는 출력 품질에 달려 있습니다. matlab의 기본값은 bicubic입니다. bilinear 또는 nearest을 사용해보세요. 예컨대: 내 personnal 실험에서

[...] = imresize(...,'nearest'); 

, 나는 또한 imresize으로 해당 기능을 일부 오버 헤드가 있음을 발견했다. 모든 비디오 프레임에 대해 함수를 한 번만 호출하면 "많이"더 빨라질 수 있습니다. 이 작업을 수행하려면 충분한 메모리가 필요할 것입니다. 모든 프레임이 3d 매트릭스 dataMovie에 있다고 가정 해보십시오. 이 행렬을 만들 때 사전 할당 (프레임 수를 얻음으로써)은 약간의 속도를 얻는 데 도움이됩니다!

k = 0.5; % scaling parameter 
tform = affine2d([k 0 0;0 k 0;0 0 1]); 
dataTform = imwarp(dataMovie,tform,'nearest'); 

그런 다음 프레임 단위로 크기 조절 무비에 처리를 적용하십시오. 보간 유형 nearset, linear 또는 bicubic을 제공 할 수도 있습니다.

컬러 동영상에서 작업하는 경우 모든 프레임의 3 가지 색상 레이어를 함께 쌓아서 적절한 색인을 사용하여 다시 가져와야합니다.