Нахождение позиции пикселя в Matlab - PullRequest
2 голосов
/ 29 января 2012

Мне нужно отсканировать (половину) двоичного изображения и сохранить (или пометить) только положение первого черного пикселя.Я попробовал это в Matlab.Но код отображает позиции всех черных пикселей.Мой код выглядит примерно так:

I= imread('binary image');

imshow(I);

[r c] =size(I);

for j=1:c/2

    for i=1:r

        if(I(i,j)==1)
        [i j]    
        end
    end
end

Любые предложения по улучшению этого ...

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Чтобы избежать цикла, вы также можете использовать функцию Matlab find:

[i,j] = find(I==1,1,'first')

Это означает «найти первый элемент I равным 1»(find(I==1,k,first) находит первые k элементов).

(Кстати, документы не упоминают, прекращают ли они сканирование матрицы после первого найденного индекса (если это все, что требуется) -Я бы так предположил, в целях эффективности?).

1 голос
/ 29 января 2012

Вам необходимо выйти из циклов:

found = 0; % a flag
for j=1:c/2
  for i=1:r

    if(I(i,j)==1)
        [i j]
        found = 1;
        break; % stop the inner loop  
    end

    if (found)
        break; % stop the outer loop
    end
  end
end
...