exponenta event banner

Увеличить пиксельные метки для семантической сегментации

В этом примере показано, как использовать MATLAB ®, Computer Vision Toolbox™ и Toolbox™ обработки изображений для выполнения обычных видов увеличения изображения и пиксельной метки в рамках процессов семантической сегментации.

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

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

Для обучения сети можно использовать дополненные данные обучения. Пример обучения сети семантической сегментации см. в разделе Семантическая сегментация с использованием глубокого обучения (Computer Vision Toolbox).

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

Прочтите образец изображения.

filenameImage = 'kobi.png';
I = imread(filenameImage);

Считывание изображения пиксельной метки. Изображение имеет два класса.

filenameLabels = 'kobiPixelLabeled.png';
L = imread(filenameLabels);
classes = ["floor","dog"];
ids = [1 2];

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

C = categorical(L,ids,classes);

Отображение меток над изображением с помощью labeloverlay функция. Пиксели с меткой «floor» имеют синий оттенок, а пиксели с меткой «dog» имеют голубой оттенок.

B = labeloverlay(I,C);
imshow(B)
title('Original Image and Pixel Labels')

Figure contains an axes. The axes with title Original Image and Pixel Labels contains an object of type image.

Изменение размера меток изображений и пикселов

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

targetSize = [300 300];
resizedI = imresize(I,targetSize);
resizedC = imresize(C,targetSize);

Отображение измененных по размеру меток поверх измененного по размеру изображения.

B = labeloverlay(resizedI,resizedC);
imshow(B)
title('Resized Image and Pixel Labels')

Figure contains an axes. The axes with title Resized Image and Pixel Labels contains an object of type image.

Вырезать изображение и пиксельные метки

Обрезка является обычным этапом предварительной обработки, чтобы данные соответствовали входному размеру сети. Чтобы создать выходные изображения нужного размера, сначала задайте размер и положение окна подрезки с помощью randomCropWindow2d(Панель инструментов обработки изображений) и centerCropWindow2d(Панель инструментов обработки изображений). Убедитесь, что выбрано окно обрезки, включающее нужное содержимое изображения. Затем обрезайте изображение и изображение метки пикселя в том же окне с помощью imcrop.

Укажите требуемый размер обрезанной области в виде двухэлементного вектора формы [высота, ширина].

targetSize = [300 300];

Обрезайте изображение до целевого размера от центра изображения.

win = centerCropWindow2d(size(I),targetSize);
croppedI = imcrop(I,win);
croppedC = imcrop(C,win);

Отображение обрезанных меток поверх обрезанного изображения.

B = labeloverlay(croppedI,croppedC);
imshow(B)
title('Center Cropped Image and Pixel Labels')

Figure contains an axes. The axes with title Center Cropped Image and Pixel Labels contains an object of type image.

Обрезайте изображение до целевого размера из случайного положения в изображении.

win = randomCropWindow2d(size(I),targetSize);
croppedI = imcrop(I,win);
croppedC = imcrop(C,win);

Отображение обрезанных меток поверх обрезанного изображения.

B = labeloverlay(croppedI,croppedC);
imshow(B)
title('Random Cropped Image and Pixel Labels')

Figure contains an axes. The axes with title Random Cropped Image and Pixel Labels contains an object of type image.

Изображение деформации и пиксельные метки

randomAffine2d Функция (Панель инструментов обработки изображений) создает рандомизированное аффинное преобразование 2-D из комбинации поворота, перемещения, масштабирования (изменения размеров), отражения и сдвига. Применение преобразования к изображениям и изображениям меток пикселей с помощью imwarp(Панель инструментов обработки изображений). Управление пространственными границами и разрешением деформированного выходного сигнала с помощью affineOutputView(Панель инструментов обработки изображений).

Поверните входное изображение и изображение метки пикселя на угол, произвольно выбранный из диапазона [-50,50] градусов.

tform = randomAffine2d("Rotation",[-50 50]);

Создайте вид вывода для искривленного изображения и изображения метки пикселя.

rout = affineOutputView(size(I),tform);

Использовать imwarp для поворота изображения и изображения метки пикселя.

rotatedI = imwarp(I,tform,'OutputView',rout);
rotatedC = imwarp(C,tform,'OutputView',rout);

Отображение повернутых меток над повернутым изображением.

B = labeloverlay(rotatedI,rotatedC);
imshow(B)
title('Rotated Image and Pixel Labels')

Figure contains an axes. The axes with title Rotated Image and Pixel Labels contains an object of type image.

Применение дополнения к обучающим данным семантической сегментации в хранилищах данных

Хранилища данных - это удобный способ чтения и дополнения коллекций изображений. Создайте хранилище данных, в котором хранятся данные изображения и изображения метки пикселя, и дополните данные несколькими операциями.

Создание хранилищ данных, содержащих данные изображения и метки пикселя

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

numObservations = 4;
trainImages = repelem({filenameImage},numObservations,1);
trainLabels = repelem({filenameLabels},numObservations,1);

Создание imageDatastore из файлов обучающих изображений. Создать pixelLabelDatastore из файлов меток обучающих пикселей. Хранилища данных содержат несколько копий одних и тех же данных.

imds = imageDatastore(trainImages);
pxds = pixelLabelDatastore(trainLabels,classes,ids);

Связывайте пары меток изображения и пикселей, комбинируя хранилище данных изображения и хранилище данных меток пикселей.

trainingData = combine(imds,pxds);

Считывание первого изображения и связанного с ним изображения метки пикселя из объединенного хранилища данных.

data = read(trainingData);
I = data{1};
C = data{2};

Отображение данных изображения и метки пикселя.

B = labeloverlay(I,C);
imshow(B)

Figure contains an axes. The axes contains an object of type image.

Применить увеличение данных

Применение увеличения данных к данным обучения с помощью transform функция. В этом примере выполняется два отдельных дополнения к учебным данным.

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

augmentedTrainingData = transform(trainingData,@jitterImageColorAndWarp);

Прочтите все дополненные данные.

data = readall(augmentedTrainingData);

Отображение дополненного изображения и данных метки пикселя.

rgb = cell(numObservations,1);
for k = 1:numObservations
    I = data{k,1};
    C = data{k,2};
    rgb{k} = labeloverlay(I,C);
end
montage(rgb)

Figure contains an axes. The axes contains an object of type image.

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

targetSize = [800 800];
preprocessedTrainingData = transform(augmentedTrainingData,...
    @(data)centerCropImageAndLabel(data,targetSize));

Прочтите все предварительно обработанные данные.

data = readall(preprocessedTrainingData);

Отображение предварительно обработанного изображения и данных пиксельной метки.

rgb = cell(numObservations,1);
for k = 1:numObservations
    I = data{k,1};
    C = data{k,2};
    rgb{k} = labeloverlay(I,C);
end
montage(rgb)

Figure contains an axes. The axes contains an object of type image.

Вспомогательные функции для дополнения

jitterImageColorAndWarp вспомогательная функция применяет случайное дрожание цвета к данным изображения, затем применяет идентичное аффинное преобразование к данным изображения и метки пикселя. Преобразование состоит из случайной комбинации масштабирования масштабным коэффициентом в диапазоне [0,8 1,5], горизонтального отражения и поворота в диапазоне [-30, 30] градусов. Вход data и выходные данные out представляют собой двухэлементные массивы ячеек, где первый элемент является данными изображения, а второй элемент является данными изображения метки пикселя.

function out = jitterImageColorAndWarp(data)
% Unpack original data.
I = data{1};
C = data{2};

% Apply random color jitter.
I = jitterColorHSV(I,"Brightness",0.3,"Contrast",0.4,"Saturation",0.2);

% Define random affine transform.
tform = randomAffine2d("Scale",[0.8 1.5],"XReflection",true,'Rotation',[-30 30]);
rout = affineOutputView(size(I),tform);

% Transform image and bounding box labels.
augmentedImage = imwarp(I,tform,"OutputView",rout);
augmentedLabel = imwarp(C,tform,"OutputView",rout);

% Return augmented data.
out = {augmentedImage,augmentedLabel};
end

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

function out = centerCropImageAndLabel(data,targetSize)
win = centerCropWindow2d(size(data{1}),targetSize);
out{1} = imcrop(data{1},win);
out{2} = imcrop(data{2},win);
end

См. также

(Панель инструментов обработки изображений) | (Панель инструментов обработки изображений) | (Панель инструментов обработки изображений)

Связанные примеры

Подробнее