2D объект геометрического преобразования
geometricTransform2d
объект задает пользовательское 2D геометрическое преобразование с помощью мудрых точкой функций отображения.
создает tform
= geometricTransform2d(inverseFcn)geometricTransform2d
объект и наборы обратное отображение InverseFcn
свойство.
также устанавливает прямое свойство отображения, tform
= geometricTransform2d(inverseFcn,fowardFcn)ForwardFcn
.
InverseFcn
— Функция обратного отображенияФункция обратного отображения, определенный функцией указатель. Функция должна принять и возвратить координаты как n-by-2 числовая матрица, представляющая упакованный (x, y) координаты точек n.
Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).
Пример:
ifcn = @(xy) [xy(:,1).^2, sqrt(xy(:,2))];
ForwardFcn
— Передайте функцию отображенияПередайте функцию отображения, определенный функцией указатель. Функция должна принять и возвратить координаты как n-by-2 числовая матрица, представляющая упакованный (x, y) координаты точек n.
Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).
Пример:
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)
Используйте imwarp
применять обратное геометрическое преобразование к входному изображению. Изображение увеличено вертикально фактором 2 (инверсия yscale
) и горизонтально фактором 10/3 (инверсия xscale
).
Itransformed = imwarp(I,tform); imshow(Itransformed)
Задайте функцию обратного отображения, которая принимает упакованный (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)
Создайте 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)
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.