Поиск позиции пикселя в 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

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


person meena    schedule 29.01.2012    source источник
comment
Если вы получили ответ, пожалуйста, примите его. Это уменьшит работу других над вашим вопросом.   -  person Abid Rahman K    schedule 29.01.2012


Ответы (2)


Вам нужно выйти из циклов:

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
person Alex    schedule 29.01.2012
comment
спасибо Алекс .. это помогло. Я использовал другой, если отображать только первое значение. - person meena; 29.01.2012

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

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

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

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

person mathematical.coffee    schedule 29.01.2012