geometricTransform2d

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

Описание

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

Создание

Описание

пример

tform = geometricTransform2d(inverseFcn) создает geometricTransform2d объект и наборы обратное отображение InverseFcn свойство.

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

Свойства

развернуть все

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

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

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

Передайте функцию отображения в виде указателя на функцию. Функция должна принять и возвратить координаты как n-by-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)]

Создайте 2D объект геометрического преобразования, 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];

Создайте 2D объект геометрического преобразования, 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)];

Создайте 2D объект геометрического преобразования, 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 object. The axes object contains an object of type image.

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

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

Figure contains an axes object. The axes object 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);

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

tform = geometricTransform2d(g);

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

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

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

Введенный в R2018b