geometricTransform2d

2-D геометрический объект преобразования

Описание

A geometricTransform2d объект задает пользовательское 2-D геометрическое преобразование с помощью точечных функций отображения.

Создание

Описание

пример

tform = geometricTransform2d(inverseFcn) создает geometricTransform2d Объект и устанавливает обратное сопоставление InverseFcn свойство.

tform = geometricTransform2d(inverseFcn,fowardFcn) также устанавливает свойство прямого отображения, ForwardFcn.

Свойства

расширить все

Функция обратного отображения, заданная как указатель на функцию. Функция должна принимать и возвращать координаты как n-на-2 числовую матрицу, представляющую упакованные (x, y) координаты n точек.

Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».

Пример: ifcn = @(xy) [xy(:,1).^2, sqrt(xy(:,2))];

Функция прямого отображения, заданная как указатель на функцию. Функция должна принимать и возвращать координаты как n-на-2 числовую матрицу, представляющую упакованные (x, y) координаты n точек.

Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».

Пример: ffcn = @(xy) [sqrt(xy(:,1)),(xy(:,2).^2)];

Функции объекта

transformPointsForwardПрименить прямое геометрическое преобразование
transformPointsInverseПрименить обратное геометрическое преобразование

Примеры

свернуть все

Задайте упакованные (x, y) координаты пяти входных точек. Упакованные координаты хранятся в матрице 5 на 2, где координата X каждой точки находится в первом столбце, а координата Y каждой точки - во втором столбце.

XY = [10 15;11 32;15 34;2 7;2 10];

Задайте функцию обратного отображения. Функция принимает и возвращает точки в упакованном (x, y) формате.

inversefn = @(c) [c(:,1)+c(:,2),c(:,1)-c(:,2)]
inversefn = function_handle with value:
    @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]

Создайте 2-D объект геометрического преобразования, tform, который хранит функцию обратного отображения.

tform = geometricTransform2d(inversefn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]
        ForwardFcn: []
    Dimensionality: 2

Примените обратное геометрическое преобразование к входу точкам.

UV = transformPointsInverse(tform,XY)
UV = 5×2

    25    -5
    43   -21
    49   -19
     9    -5
    12    -8

Задайте векторы X и Y пяти точек для преобразования.

x = [10 11 15 2 2];
y = [15 32 34 7 10];

Задайте функции обратного и прямого отображения. Обе функции принимают и возвращают точки в упакованном (x, y) формате.

inversefn = @(c) [c(:,1).^2,sqrt(c(:,2))];
forwardfn = @(c) [sqrt(c(:,1)),c(:,2).^2];

Создайте 2-D объект геометрического преобразования, tform, который хранит функцию обратного отображения и опциональную функцию прямого отображения.

tform = geometricTransform2d(inversefn,forwardfn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(c)[c(:,1).^2,sqrt(c(:,2))]
        ForwardFcn: @(c)[sqrt(c(:,1)),c(:,2).^2]
    Dimensionality: 2

Примените обратное геометрическое преобразование к входу точкам.

[u,v] = transformPointsInverse(tform,x,y)
u = 1×5

   100   121   225     4     4

v = 1×5

    3.8730    5.6569    5.8310    2.6458    3.1623

Примените прямое геометрическое преобразование к преобразованным точкам u и v.

[x,y] = transformPointsForward(tform,u,v)
x = 1×5

    10    11    15     2     2

y = 1×5

   15.0000   32.0000   34.0000    7.0000   10.0000

Задайте функцию обратного отображения, которая применяет анизотропное масштабирование. Функция должна принимать и возвращать упакованные координаты (x, y), где x-координата каждой точки находится в первом столбце, а y-координата каждой точки - во втором столбце.

xscale = 0.3;
yscale = 0.5;
inversefn = @(xy) [xscale*xy(:,1), yscale*xy(:,2)];

Создайте 2-D объект геометрического преобразования, tform, который хранит функцию обратного отображения.

tform = geometricTransform2d(inversefn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(xy)[xscale*xy(:,1),yscale*xy(:,2)]
        ForwardFcn: []
    Dimensionality: 2

Считайте изображение, которое будет преобразовано.

I = imread('cameraman.tif');
imshow(I)

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

Использование imwarp для применения обратного геометрического преобразования к входу изображению. Изображение увеличивается вертикально в 2 раза (назад yscale) и горизонтально в 10/3 раза (обратный xscale).

Itransformed = imwarp(I,tform);
imshow(Itransformed)

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

Задайте функцию обратного отображения, которая принимает упакованные (x, y) координаты, где x-координата каждой точки находится в первом столбце, а y-координата каждой точки - во втором столбце. Функция обратного отображения в этом примере принимает квадрат полярного радиального компонента.

r = @(c) sqrt(c(:,1).^2 + c(:,2).^2);
w = @(c) atan2(c(:,2), c(:,1));
f = @(c) [r(c).^2 .* cos(w(c)), r(c).^2 .* sin(w(c))];
g = @(c) f(c);

Создайте 2-D объект геометрического преобразования, tform, который хранит функцию обратного отображения.

tform = geometricTransform2d(g);

Считайте цветное изображение, которое будет преобразовано.

I = imread('peppers.png');
imshow(I)

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

Создайте imref2d объект, задающий размер и мировые пределы входных и выходных изображений.

Rin = imref2d(size(I),[-1 1],[-1 1]);
Rout = imref2d(size(I),[-1 1],[-1 1]);

Примените обратное геометрическое преобразование к входу изображению.

Itransformed = imwarp(I,Rin,tform,'OutputView',Rout);
imshow(Itransformed)

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

Введенный в R2018b