首页 文章

在Matlab中矢量化代码

提问于
浏览
0

我在Matlab中编写了一个函数,它在条目中采用图像“I”和两个长度,并返回一个与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 回答

  • 1

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

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

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

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

    剩下的就是弄清楚每个块的大小,它们只是 sxH - sx ,resp syW - sy .

    最好的选择是 just call the circshift function provided by MATLAB 为你做这件事 .

相关问题