bwdist

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

Синтаксис

D = bwdist(BW)
[D,idx] = bwdist(BW)
[D,idx] = bwdist(BW,method)

Описание

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

Опционально можно вычислить Евклидово преобразование расстояния 2D двухуровневого изображения с помощью графического процессора (требует Parallel Computing Toolbox™). Для получения дополнительной информации смотрите Обработку изображений на графическом процессоре.

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

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

Только метод 'euclidean' поддерживается на графическом процессоре.

Примеры

свернуть все

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

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

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.

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

bw = gpuArray.zeros(5,5); 
bw(2,2) = 1; 
bw(4,4) = 1;

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

[D,IDX] = bwdist(bw)

Этот пример показывает, как выдержать сравнение, 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)

Этот пример показывает, как сравнить графики изоповерхности для преобразований расстояния 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')

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

свернуть все

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

Чтобы вычислить Евклидово расстояние преобразовывают использование графического процессора, задают BW как gpuArray, который содержит 2D числовую или логическую матрицу меньше чем с 232 элементами.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

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

Метод

Описание

'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|, в противном случае.

Только метод 'euclidean' поддерживается на графическом процессоре.

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

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

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

свернуть все

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

Если Евклидово расстояние преобразовывает, вычисляется с помощью графического процессора, то D возвращен как gpuArray, содержащий 2D числовую матрицу.

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

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

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

Если Евклидово расстояние преобразовывает, вычисляется с помощью графического процессора, то idx возвращен как gpuArray, содержащий 2D числовую матрицу типа данных uint32.

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

Советы

  • Алгоритмы FAST использования bwdist, чтобы вычислить истинное Евклидово расстояние преобразовывают, особенно в 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