在Matlab中矢量化代码

时间:2015-01-12 19:16:17

标签: matlab

我在Matlab中写了一个函数来拍摄图像'我'条目中有两个长度,并返回一个图像'输出'具有与I相同的大小,其中I的像素已根据长度条目被翻译。执行的平移是循环的,即当翻译的像素超过I的一个维度的像素时,它被放置在与该维度相关的轴上的位置d处。

这个函数使用两个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

1 个答案:

答案 0 :(得分:1)

输入与输出的关系总是如下:

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

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

所以你可以用四个切片分配来做到这一点。

剩下的就是确定每个块的大小,这些块只有sxH - sx,resp syW - sy

最好的选择是只需调用MATLAB提供的circshift函数即可。