Преобразуйте полигон видимой области (ROI) в маску области
BW = poly2mask(xi,yi,m,n)
вычисляет бинарную маску видимой области (ROI), BW
= poly2mask(xi
,yi
,m
,n
)BW
, размера m
-by-n
, от полигона ROI с вершинами в координатах xi
и yi
. poly2mask
закрывает полигон автоматически, если полигон уже не закрывается.
Функция poly2mask
устанавливает пиксели, которые являются в полигоне к 1
, и устанавливает пиксели вне полигона к 0
. Для получения дополнительной информации о классификации пикселей, которые частично заключены ROI, см. Алгоритм.
Чтобы задать полигон, который включает данный прямоугольный набор пикселей, заставьте ребра полигона простереться вдоль внешних ребер пикселей ограничения вместо центра пикселей.
Например, чтобы включать пиксели в столбцы 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
использует следующий алгоритм:
Разделите каждый пиксель на субпиксельную сетку 5 на 5.
Данные показывают пиксель, который содержит вершину ROI, показанного ранее с этой субпиксельной сеткой 5 на 5.
Отрегулируйте положение вершин.
poly2mask
перемещает каждую вершину полигона к самому близкому пересечению субпиксельной сетки. Отметьте, как poly2mask
округляет координаты X и Y к самому близкому углу субпиксельной сетки. Это создает второй, измененный полигон. Данные показывают измененную вершину с красным "X".
Чертите путь между настроенными вершинами.
poly2mask
формирует путь от каждой настроенной вершины до следующего, после ребер субпиксельной сетки. Данные показывают фрагмент этого измененного полигона толстыми темными строками.
Определите, который краевые элементы изображения в полигоне.
poly2mask
использует следующее правило, чтобы определить, который краевые элементы изображения в полигоне: если центральный субпиксель пикселя в контурах, заданных путем между настроенными вершинами, то пиксель в области.
В следующей фигуре центральные субпиксели пикселей на границе ROI заштрихованы темно-серый цвет. Пиксели в полигоне заштрихованы более светло-серый. Обратите внимание на то, что пиксель, содержащий вершину, не является частью ROI, потому что его центральный пиксель не в измененном полигоне.