Границы и контуры в Matlab - PullRequest
1 голос
/ 17 мая 2011

У меня есть двоичное изображение с незамкнутыми кривыми шириной в 1 пиксель.Я хочу взять эту кривую как список точек (в правильном порядке).Я нашел bwboundaries функцию, которая пытается обернуть все ненулевые пиксели и, таким образом, в этом случае возвращает дубликаты точек:

>> A = [0 0 0; 1 1 1; 0 0 0];
>> b = bwboundaries(A)

ans = 

    [5x2 double]

>> b{1}

ans =

     2     1
     2     2
     2     3
     2     2
     2     1

bwtraceboundary сделать то же самое

>> bwtraceboundary(A, [2 1], 'E')

ans =

     2     1
     2     2
     2     3
     2     2
     2     1

Есть лилюбой стандартный метод для получения матрицы, такой как [2 1;2 2;2 3] немедленно?

1 Ответ

3 голосов
/ 17 мая 2011

Он производит двойные записи, потому что ваш регион шириной всего в один пиксель.Я не думаю, что есть стандартный метод, который решает вашу особую проблему напрямую.Однако вы можете просто использовать функцию unique () , чтобы исключить двойные записи результата.

Чтобы сохранить исходный порядок точек, просто выполните:

b = bwboundaries(A);
[dummy, ind] = unique(b{1}, 'rows', 'first');
contour = b{1}(sort(ind), :);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...