2015-01-12 42 views
0

我在Matlab中編寫了一個函數,該函數在圖像'I'和條目中輸入兩個長度,並返回一個圖像'輸出',其大小與我在其中像素根據長度條目。執行的翻譯是循環的,即當翻譯後的像素的像素超出I的某個維度時,它將放置在與此維度相關的軸的位置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

你根本不需要調用模函數,只是'[sy:W 1:sy-1]'另外,似乎H和W是相反的? –

回答

1

投入產出的關係始終如下:

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

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

所以,你可以做到這一點有四個切片作業。

剩下的工作就是找出每個塊的大小,這只是sxH - sx,RESP syW - sy

最好的選擇是只需撥打circshift函數提供的MATLAB爲您做到這一點。