exponenta event banner

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.

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

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'

В 2-D расстояние между (x1, y1) и (x2, y2) шахматной доски равно

max (│x1 - x2│,│y1 - y2│).

'cityblock'

В 2-D расстояние между городскими блоками (x1, y1) и (x2, y2) равно

│x1 x2  + │y1 y2 

'euclidean'

В 2-D евклидово расстояние между (x1, y1) и (x2, y2) равно

(x1−x2) 2 + (y1−y2) 2.

'quasi-euclidean'

В 2-D квазиевклидово расстояние между (x1, y1) и (x2, y2) равно

|x1−x2 | + (2−1) |y1−y2 |, |x1−x2 |> | y1−y2 |

(2 1) | x1 x2 | + | y1 − y2 |, в противном случае.

Дополнительные сведения см. в разделе Преобразование расстояния двоичного изображения.

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

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

свернуть все

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

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

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

КлассДиапазон
'uint32'numel(BW) <= 232 − 1
'uint64'numel(BW) >= 232

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

Совет

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

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

Алгоритмы

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

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

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

Ссылки

[1] Маурер, Кальвин, Реншен Ци и Виджай Рагхаван, «Алгоритм линейного времени для вычисления точных евклидовых преобразований расстояния двоичных изображений в произвольных измерениях», Транзакции IEEE по анализу шаблонов и машинному интеллекту, том 25, № 2,

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

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

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

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