我在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
答案 0 :(得分:1)
输入与输出的关系总是如下:
1 | 2
----+----
3 | 4
到
4 | 3
----+----
2 | 1
所以你可以用四个切片分配来做到这一点。
剩下的就是确定每个块的大小,这些块只有sx
和H - sx
,resp sy
和W - sy
。
最好的选择是只需调用MATLAB提供的circshift
函数即可。