2
저는 컴퓨터 비전을 위해 Matlab에서 Square Distance Disparity Map 기반의 Sum of Distance를 구현할 것입니다. 현재 코드는 중첩 된 for 루프를 가지고 있으며 매우 느리게 실행됩니다. 더 효율적으로 벡터화에 대한 제안? 감사합니다Matlab의 불일치 맵 벡터화
%im1 and im2 are images and win1, win2 are window sizes
for i=win1+1:1:bottom-win1
parfor j=win2+1:1:right-win2
%j=[win2+1:bottom-win2];
template=im1(i-win1:i+win1,j-win2:j+win2);
arg1=conv2(im2.^2,ones(size(template))/2,'same');
arg2=conv2(im2,rot90(template,2),'same');
arg=arg1-arg2;
[xj]=find(arg==min(arg(:)));
disparityMap(i,j)=1-xj(1);
end
end
이 방법을 쉽게 벡터화 할 수는 없지만 몇 가지 명백한 개선점이 있습니다. 'arg1'은'i '와'j '에 의존하지 않으므로 상수이므로 [루프 밖으로 이동] (http://en.wikipedia.org/wiki/Loop-invariant_code_motion)! 나는 당신이 또한 템플릿을 추출하기위한 인덱스를 조금 조정한다면 루프 앞에서 한 번만 완전한'im1'을 회전시킬 수 있다고 생각합니다. –
컴퓨터 비전 시스템 도구 상자에서 '디스 패리티 (disparity)'기능을 사용할 수도 있습니다. – Dima