2012-02-13 3 views
1

Я только что просмотрел образец изображения, и я пытаюсь обнаружить первый пиксель, который имеет значение «0» в двоичном изображении. Я использовал краску для написания текста, и когда я использовал следующую прогу, она всегда ловит самый нижний пиксель.Первый пиксель изображения

clear all; 
    x=imread('textjay.png'); 
    y=im2bw(x); 

    height=size(y,1); % row 
    width=size(y,2); % col 

    valueoftheindex=0; 

    pixel_value=0; 

    for i=1:width 
    for j=1:height 
     pixel_value=y(j,i); 
     if (pixel_value==0) 
     valueofthewidth=i; 
     valueofthehieght=j; 
     break 
     end 
     end 
    end 

    valueofthewidth 
    valueofthehieght 

    imtool(y) 

ответ

3

Это зависит от того, что вы считаете «первым пикселем». Предполагая, что вы можете жить с порядком пикселями, что MATLAB назначает можно использовать

idx = find(y == 0, 1, 'first') 
[row_idx, col_idx] = ind2sub(size(y), idx) 

Для других мер «firstness» вам придется либо транспонирована входная матрица (образ), или прибегнуть к некоторым более изощренному способ расчета.

И да, break разрушит внутренний контур, как уже указывал Даве.

+0

+1 потому что вы работаете с решением :). Использование линейного индекса - путь. Меня смутило поведение '[row, col] = find (X, ...)'. Я просто удалил свой неправильный ответ. – dawe

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