我在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 回答
输入与输出的关系总是如下:
至
所以你可以用四个切片分配来做到这一点 .
剩下的就是弄清楚每个块的大小,它们只是
sx
和H - sx
,respsy
和W - sy
.最好的选择是 just call the circshift function provided by MATLAB 为你做这件事 .