poly2mask

Преобразуйте полигон видимой области (ROI) в маску области

Синтаксис

BW = poly2mask(xi,yi,m,n)

Описание

пример

BW = poly2mask(xi,yi,m,n) вычисляет бинарную маску видимой области (ROI), BW, размера m-by-n, от полигона ROI с вершинами в координатах xi и yi. poly2mask закрывает полигон автоматически, если полигон уже не закрывается.

Функция poly2mask устанавливает пиксели, которые являются в полигоне к 1, и устанавливает пиксели вне полигона к 0. Для получения дополнительной информации о классификации пикселей, которые частично заключены ROI, см. Алгоритм.

Примеры

свернуть все

Задайте x-и y-координаты полигона.

x = [63 186 54 190 63];
y = [60 60 209 204 60];

Создайте маску, задающую размер изображения.

bw = poly2mask(x,y,256,256);

Отобразите маску, чертящую линию вокруг полигона.

imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
hold off

Задайте два набора случайных точек для x-и y-координат.

x = 256*rand(1,4);
y = 256*rand(1,4);
x(end+1) = x(1);
y(end+1) = y(1);

Создайте маску.

bw = poly2mask(x,y,256,256);

Отобразите маску и чертите линию вокруг полигона.

imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
hold off

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

свернуть все

x - или y - координата вершин полигона, заданных как числовой вектор. Длина xi и yi должна соответствовать.

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

Количество строк в маске, заданной как положительное целое число.

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

Количество столбцов в маске, заданной как положительное целое число.

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

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

свернуть все

Двухуровневое изображение, возвращенное как m-by-n логическая матрица.

Типы данных: логический

Советы

  • Чтобы задать полигон, который включает данный прямоугольный набор пикселей, заставьте ребра полигона простереться вдоль внешних ребер пикселей ограничения вместо центра пикселей.

    Например, чтобы включать пиксели в столбцы 4 - 10 и строки 4 - 10, вы можете задать вершины полигона как это:

    x = [4 10 10 4 4];
    y = [4 4 10 10 4];
    mask = poly2mask(x,y,12,12)
    mask =
    
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0

    В этом примере полигон проходит центр пикселей ограничения, так что в итоге только некоторые желаемые пиксели ограничения полны решимости быть в полигоне (пиксели в строке 4 и столбце 4 а не в полигоне). Чтобы включать эти элементы в полигон, используйте дробные значения, чтобы задать внешнее ребро 4-й строки (3.5) и 10-й строки (10.5), и внешнее ребро 4-го столбца (3.5) и внешнее ребро 10-го столбца (10.5) как вершины, как в следующем примере:

    x = [3.5 10.5 10.5 3.5 3.5];
    y = [3.5 3.5 10.5 10.5 3.5];
    mask = poly2mask(x,y,12,12)
    mask =
    
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0

Алгоритмы

При создании маски видимой области (ROI) poly2mask должен определить, какие пиксели включены в область. Это определение может быть трудным, когда пиксели на ребре области только частично покрыты границей. Следующая фигура иллюстрирует треугольную видимую область, исследуя крупным планом одну из вершин ROI. Данные показывают, как пиксели могут быть частично покрыты границей видимой области.

Пиксели на ребре ROI только частично покрыты границей

Чтобы определить, какие пиксели находятся в области, poly2mask использует следующий алгоритм:

  1. Разделите каждый пиксель на субпиксельную сетку 5 на 5.

    Данные показывают пиксель, который содержит вершину ROI, показанного ранее с этой субпиксельной сеткой 5 на 5.

  2. Отрегулируйте положение вершин.

    poly2mask перемещает каждую вершину полигона к самому близкому пересечению субпиксельной сетки. Отметьте, как poly2mask округляет координаты X и Y к самому близкому углу субпиксельной сетки. Это создает второй, измененный полигон. Данные показывают измененную вершину с красным "X".

  3. Чертите путь между настроенными вершинами.

    poly2mask формирует путь от каждой настроенной вершины до следующего, после ребер субпиксельной сетки. Данные показывают фрагмент этого измененного полигона толстыми темными строками.

  4. Определите, который краевые элементы изображения в полигоне.

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

    В следующей фигуре центральные субпиксели пикселей на границе ROI заштрихованы темно-серый цвет. Пиксели в полигоне заштрихованы более светло-серый. Обратите внимание на то, что пиксель, содержащий вершину, не является частью ROI, потому что его центральный пиксель не в измененном полигоне.

Смотрите также

|

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