poly2mask

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

Синтаксис

Описание

пример

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

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

Примеры

свернуть все

Задайте координаты 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

Figure contains an axes. The axes contains 2 objects of type image, line.

Задайте два набора случайных точек для координат 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

Figure contains an axes. The axes contains 2 objects of type image, line.

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

свернуть все

x -координата многоугольников, заданная в виде числового вектора. Длина xi и yi должен совпадать.

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

y -координата многоугольников, заданная в виде числового вектора. Длина xi и yi должен совпадать.

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

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

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

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

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

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

свернуть все

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

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

Совет

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

    Для примера, чтобы включить пиксели в столбцы с 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 необходимо определить, какие пиксели включены в область. Это определение может оказаться трудным, когда пиксели на краю области только частично покрыты линией границы. Следующий рисунок иллюстрирует треугольную необходимую область, исследуя крупным планом одну из вершин информации только для чтения. Рисунок показывает, как пиксели могут быть частично покрыты границей представляющей интерес области.

Пиксели на краю информация только для чтения только частично покрыты границей

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

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

    Рисунок показывает пиксель, который содержит вершину информации только для чтения, показанной ранее с этой подпиксельной сеткой 5 на 5.

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

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

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

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

  4. Определите, какие пограничные пиксели находятся внутри многоугольника.

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

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

См. также

|

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