bboxwarp

Примените геометрическое преобразование к ограничительным рамкам

Описание

пример

bboxB = bboxwarp(bboxA,tform,ref) преобразовывает ограничительные рамки в bboxA согласно геометрическому преобразованию, заданному tform. Ограничительные рамки могут быть выровненными осью прямоугольниками, вращаемыми прямоугольниками или кубоидами. Пространственный ссылочный объект, ref, задает выходное представление, в которое преобразовываются поля.

[bboxB,indices] = bboxwarp(bboxA,tform,ref) дополнительно возвращает вектор из индексов, которые указывают который ограничительные рамки в bboxA соответствуйте деформированным версиям в выходе, bboxB.

[___] = bboxwarp(___,'OverlapThreshold',threshold) дополнительно устанавливает порог перекрытия.

Примеры

свернуть все

Считайте изображение.

I = imread('peppers.png');

Задайте ограничительные рамки и метки.

bboxA = [
    410 230 100 90
    186 78  80  60
    ]
bboxA = 2×4

   410   230   100    90
   186    78    80    60

labelsA = [
    "garlic"
    "onion"
    ];

Задайте преобразование, чтобы горизонтально инвертировать и перевести изображение.

tform = affine2d([-1 0 0; 0 1 0; 50 50 1]);

Создайте выходное представление для imwarp.

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

Деформируйте изображение.

J = imwarp(I,tform,'OutputView',rout);

Деформируйте поля.

[bboxB,indices] = bboxwarp(bboxA,tform,rout);
labelsB = labelsA(indices);

Отобразите результаты.

annotatedI = insertObjectAnnotation(I,'Rectangle',bboxA,labelsA);
annotatedJ = insertObjectAnnotation(J,'Rectangle',bboxB,labelsB);
figure
montage({annotatedI, annotatedJ})

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

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

свернуть все

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

BoundingboxОписание
Выровненный осью прямоугольник

Заданный в пикселе координирует как M-by-4 числовая матрица со строками формы [x y w h], где:

  • M является количеством выровненных осью прямоугольников.

  • x и y задайте верхний левый угол прямоугольника.

  • w задает ширину прямоугольника, который является его длиной вдоль x - ось.

  • h задает высоту прямоугольника, который является его длиной вдоль y - ось.

Вращаемый прямоугольник

Заданный в пространственных координатах как M-by-5 числовая матрица со строками формы [xctr yctr xlen ylen yaw], где:

  • M является количеством вращаемых прямоугольников.

  • xctr и yctr задают центр прямоугольника.

  • xlen задает ширину прямоугольника, который является его длиной вдоль x - ось перед вращением.

  • ylen задает высоту прямоугольника, который является его длиной вдоль y - ось перед вращением.

  • yaw задает угол поворота в градусах. Вращение по часовой стрелке положительно вокруг центра ограничительной рамки.

Square rectangle rotated by -30 degrees.

Кубоид

Заданный в пространственных координатах как M-by-9 числовая матрица со строками формы [xctr yctr zctr xlen ylen zlen xrot yrot zrot], где:

  • M является количеством кубоидов.

  • xctr, yctr и zctr задают центр кубоида.

  • xlen, ylen и zlen задают длину кубоида вдоль x - оси, y - оси, и z - ось, соответственно, перед вращением.

  • xrot, yrot и zrot задают углы поворота кубоида вокруг x - ось, y - ось, и z - ось, соответственно. xrot, yrot и углы поворота zrot в градусах о центре кубоида. Каждое вращение по часовой стрелке положительно относительно положительного направления связанной пространственной оси. Функция вычисляет матрицы вращения, принимающие ZYX закажите Углы Эйлера [xrot yrot zrot].

Рисунок показывает, как эти значения определяют положение кубоида.

Геометрическое преобразование, заданное в affine2d объект. функция bboxwarp поддерживает только шкалу, вращение и аффинные преобразования перевода.

Пространственная ссылка в виде imref2d объект, возвращенный imwarp или affineOutputView функция. Объект задает выходное представление, чтобы преобразовать поля. Поля, которые преобразовываются полностью за пределами выходного представления, заданного ref отбрасываются.

[J,rout] = imwarp(I,tform);
[bboxB,indices] = bboxwarp(bboxA,tform,rout);
rout = affineOutputView(size(I),tform)
J = imwarp(I,tform,'OutputView',rout);
[bboxB,indices] = bboxwarp(bboxA,tform,rout);

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

область (bbox пересекают bounding rectangle) / область (bbox)

  • bounding rectangle — Заданный входом пространственный ссылочный объект, ref.

  • bbox — Результат преобразования окружает bboxA.

Если вычисленное значение перекрытия больше значения threshold свойство, затем преобразованные поля отсекаются к границе ограничительного прямоугольника. В противном случае поля отбрасываются. Понижение порога может привести к частям отбрасываемого объекта.

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

свернуть все

Деформированные ограничительные рамки, возвращенные как M2-by-N матрица ограничительных рамок M2. Количество возвращенных ограничительных рамок меньше количества ограничительных рамок во входе. Каждая строка, M2, матрицы задают одну ограничительную рамку того же типа как вход bboxA.

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

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

| | | |

Введенный в R2019b