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. The axes contains an object of type image.

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

свернуть все

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

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

Определенный в пикселе координирует как <reservedrangesplaceholder4>-by-4 числовая матрица со строками формы [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>], где:

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

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

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

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

Повернутый прямоугольник

Определенный в пространственных координатах как <reservedrangesplaceholder5>-by-5 числовая матрица со строками формы [<<reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reserved angesplaceholder0>] , где:

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

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

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

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

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

Square rectangle rotated by -30 degrees.

Cuboid

Определенный в пространственных координатах как <reservedrangesplaceholder9>-by-9 числовая матрица со строками формы [<<reservedrangesplaceholder8> <reservedrangesplaceholder7> <reservedrangesplaceholder6> <reservedrangesplaceholder5> <reserved angesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplace holder0>] , где:

  • 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