有没有办法在MATLAB中对这个循环进行矢量化?

时间:2016-11-01 12:41:55

标签: matlab vectorization

我希望将此for循环向量化。这个循环是关于获取图像像素的坐标并按行顺序形成一个数组。

rows = 812; % 812x650 image
cols = 650;
n=rows*cols; % total number of pixels

index = zeros(n,2); % n coordinates of image pixels
pt_homo = zeros(3,1,n); % [x,y,1]'

k=1;
for r=1:rows
    for c=1:cols
        index(k,1)=c;
        index(k,2)=r;
        pt_homo(1,1,k) = c;
        pt_homo(2,1,k) = r;
        pt_homo(3,1,k) = 1;
        k=k+1;
    end
end

1 个答案:

答案 0 :(得分:5)

因此,如果我正确理解你的问题,这应该解决它

c = 1:cols;
r = 1:rows;
[X Y] = meshgrid(r,c);
index = [Y(:) X(:)];
pt_homo_ = permute([index ones(size(index,1),1)],[2 3 1]);

基本上我所做的是创建索引向量并使用meshgrid创建索引矩阵,然后将其重新排序为您想要的格式。