exponenta event banner

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