2016-11-01 1 views
0

Я хочу это в векторной основе. Этот цикл посвящен получению координат пикселей изображения и формированию массива в порядке порядка строк.Есть ли способ векторизовать этот цикл в MATLAB?

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 
+0

Что такое 'n',' rows', 'cols'. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) – mpaskov

+0

Неплохо, я отредактировал вопрос – CathIAS

ответ

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, а затем изменить порядок, чтобы быть в формат, который вы хотели.

Смежные вопросы