2015-01-12 4 views
0

Matlab에서 이미지에 'I'와 두 개의 길이를 사용하는 함수를 작성하고 'I'와 동일한 크기의 이미지를 'I'로 변환했습니다. 길이 항목. 수행되는 변환은 주기적입니다. 즉, 변환 된 픽셀이 I의 차원 중 하나를 넘어서 d 픽셀로 이동하면이 차원과 관련된 축의 d 위치에 배치됩니다.Matlab의 코드 벡터화

이 함수는 두 개의 for 루프를 사용하며 더 빠른 방법으로 실행되도록 벡터화하려고합니다. 다음과 같이

function [ output ] = translated(I,horizontal_translation, vertical_translation) 

output=I; 
[H , W]=size(I); 
sx=horizontal_translation; sy=vertical_translation; 
for i=1:H 
    for j=1:W 
     if i+sx>H 
      i_=mod(i+sx,H); 
     else 
      i_=i+sx; 
     end 
     if j+sy>W 
      j_=mod(j+sy,W); 
     else 
      j_=j+sy; 
     end 
     output(i_,j_)=I(i,j); 
    end 
end 

end 
+0

modulo 함수를 호출 할 필요가 없습니다. 단지 [sy : W 1 : sy-1]'뿐입니다. 또한 H와 W가 반대 인 것처럼 보입니까? –

답변

1

출력에 대한 입력의 관계는 항상 :

1 | 2 
----+---- 
3 | 4 

4 | 3 
----+---- 
2 | 1 

에 그래서 당신이 할 수있는 네 개의 슬라이스 과제와 그. 남아

모든 단지 sxH - sx, RESP syW - sy입니다 각 블록의 크기를 파악된다.

가장 좋은 옵션은 입니다.이 작업은 MATLAB에서 제공하는 circshift 함수를 호출하면됩니다.