Маркируйте Objects Using Polygons

Image Labeler, Video Labeler и приложения Ground Truth Labeler (Automated Driving Toolbox) позволяют вам пометить изображения с помощью множества интерактивных инструментов для рисования. Используйте эти метки, чтобы создать достоверные данные для алгоритмов настройки.

О метках многоугольника

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

  • Сети семантической сегментации с помощью H-by-W помечают матрицу. Используя многоугольники поддерживает порядок, в котором метки создаются или переупорядочиваются (использование Send to Back и Bring to Front опции. Семантическая сегментация требует пиксельной карты изображения с метками. Для этого необходимо сгладить метки, (потеря многоуровневого порядка меток). Предположите поворачивать непрозрачность всех меток многоугольника к максимуму и сохранять все области заливки как матрица метки.

  • Сети сегментации экземпляра с помощью H-by-W-by-NumObjects стек маски.

  • Необработанные многоугольники в NumObjects-by-1 массив ячеек, где каждая ячейка содержит M-by-2 точки.

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

Загрузите непомеченные данные

Можно загрузить изображения, сохраненные в datastore, от папки, или загрузить предыдущий сеанс этикетировочной машины. Изображения должны быть читаемыми imread. В этом примере вы загружаете данные, которые содержат много транспортных средств, включая лодки, танкер и плоскость.

Загрузите данные программно

Используйте этот процесс, чтобы программно загрузить изображения от datastore:

  1. Создайте datastore из папки изображений. Например, если бы у вас была папка, названная "лодками", которые содержали изображения, вы могли создать datastore изображений с этим кодом.

    imageFolder = fullfile(toolboxdir('vision'),'visiondata','boats');
    imds = imageDatastore(imageFolder);

  2. Загрузите datastore в Image Labeler:

    imageLabeler(imds);

В качестве альтернативы можно загрузить папку изображений непосредственно в Image Labeler:

imageFolder = fullfile(toolboxdir('vision'),'visiondata','boats');
imageLabeler(imageFolder);

Загрузите данные непосредственно из приложения

Нажмите Import, чтобы загрузить изображения или нажать Open Session, чтобы открыть сохраненный сеанс.

Создайте метки многоугольника

Создайте метки многоугольника для парусных лодок, танкера и самолета.

  1. В панели ROI Labels слева, нажмите Label.

  2. Выберите Polygon пометьте тип и назовите его Sailboat.

  3. Опционально, можно изменить цвет метки путем нажатия на цвет предварительного просмотра.

  4. Нажмите OK.

    Метка Sailboat появляется в панели ROI Labels.

  5. Повторите шаги 1 - 4, чтобы создать метку Tanker и метку Airplane. Можно переместить метку в список путем щелчка левой кнопкой и вытаскивания метки или вниз.

Чертите метки ROI многоугольника

  1. Выберите метку Sailboat и затем использование мыши, чертите ROI многоугольника вокруг каждой из парусных лодок.

  2. Выберите метку Tanker и чертите ROI многоугольника вокруг поставки танкера.

  3. Выберите метку Airplane и чертите ROI многоугольника вокруг самолета.

    Sailboats, tanker, and airplane labeled with polygons

Измените настройки многоугольника и порядок размещения

Существует много способов изменить внешний вид меток ROI. Можно также установить stacking order для экспортируемого файла основной истины. Порядок размещения указывает, является ли объект перед или позади другого объекта и требуется для того, чтобы разрешить перекрывающиеся области, чтобы создать семантическую карту метки.

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

  1. Чтобы изменить цвет метки ROI самолета, щелкните правой кнопкой по Airplane пометьте в ROI Labels, разделяют на области и выбирают Edit Label. Кликните по просмотру цветов и выберите цвет.

  2. Чтобы показать имена метки ROI при маркировке, выберите Always из меню Show ROI Labels в разделе View.

  3. Чтобы увеличить непрозрачность метки, используйте ползунок Polygon в разделе Label Opacity. Увеличение непрозрачности помогает распознать, какие метки перед или позади других меток в сцене.

    All objects have complete opacity

  4. Метка танкера перед меткой парусной лодки, но это должно быть позади него. Положение влияет на порядок размещения в экспортируемой основной истине. Чтобы изменить порядок размещения, щелкните правой кнопкой по метке ROI танкера в сцене и выберите Send To Back.

    Tanker appears behind sailboat in the scene

  5. Чтобы просмотреть экземпляры меток ROI, выберите By Instance от ROI Color выпадающее меню в разделе View.

    Each object is a different color

  6. Экспортируйте помеченные достоверные данные путем нажатия на Export и выбора To Workspace. Назовите файл MAT достоверных данных gTruth.

Постобработайте экспортируемые метки, например, или сети Семантической Сегментации

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

Выполните эти шаги, чтобы обработать данные о многоугольнике или для семантической сегментации или для сегментации экземпляра.

ШагОписаниеПроцедура

1 — достоверные данные Отображения

Экспортируемый объект основной истины содержит данные для пяти объектов и трех определений.

Введите gTruth на MATLAB® командная строка.

>> gTruth

gTruth = 

  groundTruth with properties:

          DataSource: [1×1 groundTruthDataSource]
    LabelDefinitions: [3×5 table]
           LabelData: [1×3 table]

2 — Получают данные о многоугольнике

Свойство LabelData группирует данные именем метки. Sailboat массив ячеек метки содержит три элемента, Tanker массив ячеек содержит один элемент и Airplane массив ячеек содержит один элемент.

Введите gTruth.LabelData.

>> gTruth.LabelData

ans =

  1×3 table

     Sailboat       Tanker       Airplane 
    __________    __________    __________

    {3×1 cell}    {1×1 cell}    {1×1 cell}

3 — данные о многоугольнике основной истины Стека

Парусная лодка и танкер перекрываются. Эта информация (относительное упорядоченное расположение пикселей) потеряна в этом формате.

Используйте gatherLabelData возразите функции, чтобы сгруппировать данные типом метки. Это производит одну таблицу, содержащую пять сложенных объектов.

Используйте gatherLabelData свойство и хранилище выход.

>> out = gatherLabelData(gTruth,[labelType.Polygon],'GroupLabelData','LabelType')

out =

  1×1 cell array

    {1×1 table}

Покажите содержимое таблицы.

>> out{1}.PolygonData
ans =

  1×1 cell array

    {5×2 cell}

4 — достоверные данные Представления согласно порядку глубины

Содержимое PolygonData, показывает порядок сложенных многоугольников. Порядок сопоставим с порядком маркировки, включая танкер, который вы отправили в спину.

Теперь, когда метки сглажены, в основе танкер, и парусная лодка выше его перезаписывает танкер, где они перекрываются.

Покажите данные о многоугольнике.

>> out{1}.PolygonData{1}

ans =

  5×2 cell array

    {12×2 double}    {'Airplane'}
    { 6×2 double}    {'Sailboat'}
    { 7×2 double}    {'Sailboat'}
    {13×2 double}    {'Sailboat'}
    { 9×2 double}    {'Tanker'  }

Преобразуйте данные о многоугольнике для Семантической Сегментации

ШагОписаниеПроцедура

1 — Создают карту метки ID

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

classNames = {'Airplane','Sailboat','Tanker'};
classIds = 1:numel(classNames);

labelIDMap = containers.Map(classNames,classIds);

2 — многоугольники Извлечения

Извлеките координаты многоугольника и метки многоугольника от структуры output.

polygons = out{1}.PolygonData{1}(:,1);
polygonLabels = out{1}.PolygonData{1}(:,2);

3 — Сглаживают многоугольники к карте семантической сегментации

Преобразуйте имена метки к идентификаторам.

Преобразуйте координаты многоугольника в карту семантической сегментации.

polygonLabelIDs = cellfun(@(x)labelIDMap(x),polygonLabels);
 
imageSize = [645 916]; % size(boats_im)
outputIm = poly2label(polygons,polygonLabelIDs,imageSize);

Преобразуйте данные о многоугольнике, например, сегментация

ШагОписаниеПроцедура

Предварительно выделите стек маски, например, сегментация

Предварительно выделите стек маски с высотой и шириной, равной размерам изображения и глубине канала то же самое как количество многоугольников.
polygons = out{1}.PolygonData{1}(:,1);
numPolygons = size(polygons,1);

imageSize = [645 916]; % size(boats_im)
maskStack = false([imageSize(1:2) numPolygons]);

Преобразуйте многоугольники, чтобы инстанцировать маски

Преобразуйте каждый многоугольник в отдельную маску и вставьте его в стек маски.

for i = 1:numPolygons
    maskStack(:,:,i) = poly2mask(polygons{i}(:,1), ...
                       polygons{i}(:,2),imageSize(1),imageSize(2));
end

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

Приложения

Функции

Объекты

Похожие темы