Маркируйте объекты с помощью многоугольников

Приложения 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 точки.

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

Загрузка немаркированных данных

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

Загрузка данных программно

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

  1. Создайте datastore из папки изображений. Например, если у вас была папка с именем «boats», которая содержала изображения, можно создать 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

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

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

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

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

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

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

    All objects have complete opacity

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

    Tanker appears behind sailboat in the scene

  5. Чтобы просмотреть образцы меток информация только для чтения, выберите 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 группирует данные по имени метки. The 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 - Создайте карту идентификаторов меток

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

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

См. также

Приложения

Функции

Объекты

Похожие темы