bwdist

Преобразование расстояния бинарного изображения

Описание

пример

D = bwdist(BW) вычисляет Евклидово преобразование расстояния бинарного изображения BW. Для каждого пикселя в BW, преобразование расстояния присваивает номер, который является расстоянием между тем пикселем и самым близким ненулевым пикселем BW.

[D,idx] = bwdist(BW) также вычисляет самую близкую пиксельную карту в форме массива индекса, idx. Каждый элемент idx содержит линейный индекс самого близкого ненулевого пикселя BW. Самая близкая пиксельная карта также называется картой функции, функция преобразовывают, или преобразование ближайшего соседа.

[D,idx] = bwdist(BW,method) вычисляет преобразование расстояния с помощью альтернативной метрики расстояния, заданной method.

Примеры

свернуть все

В этом примере показано, как вычислить Евклидово преобразование расстояния бинарного изображения и самую близкую пиксельную карту изображения.

Создайте бинарное изображение.

bw = zeros(5,5); 
bw(2,2) = 1; 
bw(4,4) = 1
bw = 5×5

     0     0     0     0     0
     0     1     0     0     0
     0     0     0     0     0
     0     0     0     1     0
     0     0     0     0     0

Вычислите преобразование расстояния.

[D,IDX] = bwdist(bw)
D = 5x5 single matrix

    1.4142    1.0000    1.4142    2.2361    3.1623
    1.0000         0    1.0000    2.0000    2.2361
    1.4142    1.0000    1.4142    1.0000    1.4142
    2.2361    2.0000    1.0000         0    1.0000
    3.1623    2.2361    1.4142    1.0000    1.4142

IDX = 5x5 uint32 matrix

    7    7    7    7    7
    7    7    7    7   19
    7    7    7   19   19
    7    7   19   19   19
    7   19   19   19   19

В матричном IDX ближайшего соседа значения 7 и 19 представляют положение ненулевых элементов с помощью линейного индексирования матриц. Если пиксель содержит 7, его самый близкий ненулевой сосед в линейном положении 7.

В этом примере показано, как сравнить 2D преобразования расстояния для поддерживаемых методов расстояния. На рисунке отметьте, как квазиевклидово преобразование расстояния лучше всего аппроксимирует круговую форму, достигнутую Евклидовым методом расстояния.

bw = zeros(200,200);
bw(50,50) = 1; bw(50,150) = 1; bw(150,100) = 1;
D1 = bwdist(bw,'euclidean');
D2 = bwdist(bw,'cityblock');
D3 = bwdist(bw,'chessboard');
D4 = bwdist(bw,'quasi-euclidean');
RGB1 = repmat(rescale(D1), [1 1 3]);
RGB2 = repmat(rescale(D2), [1 1 3]);
RGB3 = repmat(rescale(D3), [1 1 3]);
RGB4 = repmat(rescale(D4), [1 1 3]);

figure
subplot(2,2,1), imshow(RGB1), title('Euclidean')
hold on, imcontour(D1)
subplot(2,2,2), imshow(RGB2), title('City block')
hold on, imcontour(D2)
subplot(2,2,3), imshow(RGB3), title('Chessboard')
hold on, imcontour(D3)
subplot(2,2,4), imshow(RGB4), title('Quasi-Euclidean')
hold on, imcontour(D4)

Figure contains 4 axes. Axes 1 with title Euclidean contains 2 objects of type image, contour. Axes 2 with title City block contains 2 objects of type image, contour. Axes 3 with title Chessboard contains 2 objects of type image, contour. Axes 4 with title Quasi-Euclidean contains 2 objects of type image, contour.

В этом примере показано, как сравнить графики изоповерхности для преобразований расстояния 3-D изображения, содержащего один ненулевой пиксель в центре.

bw = zeros(50,50,50); bw(25,25,25) = 1;
D1 = bwdist(bw);
D2 = bwdist(bw,'cityblock');
D3 = bwdist(bw,'chessboard');
D4 = bwdist(bw,'quasi-euclidean');
figure
subplot(2,2,1), isosurface(D1,15), axis equal, view(3)
camlight, lighting gouraud, title('Euclidean')
subplot(2,2,2), isosurface(D2,15), axis equal, view(3)
camlight, lighting gouraud, title('City block')
subplot(2,2,3), isosurface(D3,15), axis equal, view(3)
camlight, lighting gouraud, title('Chessboard')
subplot(2,2,4), isosurface(D4,15), axis equal, view(3)
camlight, lighting gouraud, title('Quasi-Euclidean')

Figure contains 4 axes. Axes 1 with title Euclidean contains an object of type patch. Axes 2 with title City block contains an object of type patch. Axes 3 with title Chessboard contains an object of type patch. Axes 4 with title Quasi-Euclidean contains an object of type patch.

Входные параметры

свернуть все

Бинарное изображение в виде числового или логического массива любой размерности. Для числового входа любые ненулевые пиксели считаются 1 TRUE).

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Метрика расстояния в виде одного из этих значений.

Метод

Описание

'chessboard'

В 2D расстояние шахматной доски между (x 1, y 1) и (x 2, y 2)

макс. (│x1 x 2 │, │ y 1y 2 │).

'cityblock'

В 2D cityblock расстояние между (x 1, y 1) и (x 2, y 2)

│x1 x 2 │ + │y1 y 2

'euclidean'

В 2D Евклидово расстояние между (x 1, y 1) и (x 2, y 2)

(x1x2)2+(y1y2)2.

'quasi-euclidean'

В 2D квазиевклидово расстояние между (x 1, y 1) и (x 2, y 2)

|x1x2|+(21)|y1y2|, |x1x2|>|y1y2|

(21)|x1x2|+|y1y2|, в противном случае.

Для получения дополнительной информации смотрите Преобразование расстояния Бинарного изображения.

Типы данных: char | string

Выходные аргументы

свернуть все

Расстояние, возвращенное как числовой массив одного размера с BW. Значение каждого элемента является расстоянием между тем пикселем и самым близким ненулевым пикселем в BW, как задано метрикой расстояния, method.

Типы данных: single

Индексируйте массив, возвращенный как числовой массив одного размера с BW. Каждый элемент idx содержит линейный индекс самого близкого ненулевого пикселя BW. Класс idx зависит от числа элементов во входном изображении и определяется можно следующим образом.

КлассОбласть значений
'uint32'numel(BW) <= 232 − 1
'uint64'numel(BW) >= 232

Типы данных: uint32 | uint64

Советы

  • bwdist алгоритмы FAST использования, чтобы вычислить истинное Евклидово преобразование расстояния, особенно в 2D случае. Другие методы предоставлены, в основном, по педагогическим причинам. Однако альтернативные преобразования расстояния иногда значительно быстрее для многомерных входных изображений, особенно те, которые имеют много ненулевых элементов.

  • Функциональный bwdist измененный в версии 6.4 (R2009b). Предыдущие версии Image Processing Toolbox использовали различные алгоритмы для вычисления Евклидова преобразования расстояния и связанной матрицы метки. Если вам нужны те же результаты, приведенные предыдущей реализацией, используйте функциональный bwdist_old.

Алгоритмы

  • Для Евклидовых преобразований расстояния, bwdist использует алгоритм FAST. [1]

  • Для cityblock, шахматной доски, и квазиевклидовых преобразований расстояния, bwdist использует 2D передачу, последовательный алгоритм сканирования. [2]

  • Различные меры по расстоянию достигаются при помощи различных наборов весов в сканах, как описано в [3].

Ссылки

[1] Маурер, Келвин, Жэньшэн Ци и Виджай Рэгэвэн, "Линейный Алгоритм Времени для Вычислительных Точных Евклидовых Преобразований расстояния Бинарных изображений в Произвольных Размерностях", Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту, Изданию 25, № 2, февраль 2003, стр 265-270.

[2] Розенфельд, Азрил и Джон Пфэлц, "Последовательные операции в обработке цифрового изображения", Журнал Ассоциации вычислительной техники, Издания 13, № 4, 1966, стр 471-494.

[3] Paglieroni, Дэвид, "Преобразования расстояния: Свойства и Приложения Машинного зрения", Компьютерное зрение, Графика и Обработка изображений: Графические Модели и Обработка изображений, Издание 54, № 1, январь 1992, стр 57-58.

Расширенные возможности

Представлено до R2006a