maketform

Создайте пространственную структуру преобразования (TFORM)

maketform не рекомендуется. Использовать fitgeotrans, affine2d, affine3d, или projective2d вместо этого.

Описание

пример

T = maketform('affine',A) создает многомерную пространственную структуру преобразования T для N-мерного аффинного преобразования. A является несингулярной действительной (N + 1) -by- (N + 1) или (N + 1) -by-N матрицей. Если A is (N + 1) -by- (N + 1), последний столбец A должен быть [zeros(N,1);1]. В противном случае A автоматически увеличивается таким образом, чтобы последний столбец был [zeros(N,1);1]. Матрица A определяет прямое преобразование, такое что tformfwd(U,T), где U является вектором- 1-by-N, возвращает вектор- 1-by-N X, таким образом X = U * A(1:N,1:N) + A(N+1,1:N). T имеет как прямое, так и обратное преобразования.

Пространственная структура преобразования (называемая a TFORM struct), который можно использовать с tformfwd, tforminv, fliptform, imtransform, или tformarray функций.

T = maketform('affine',U,X) создает TFORM struct T для двумерного аффинного преобразования, которое отображает каждую строку U в соответствующую строку X. The U и X каждый из аргументов 3 на 2 и задает углы входа и выходных треугольников. Углы не могут быть коллинеарными.

T = maketform('projective',A) создает TFORM struct для N-мерного проективного преобразования. A является несингулярной вещественной (N + 1) -by- (N + 1) матрицей. A(N+1,N+1) не может быть 0. Матрица A определяет прямое преобразование, такое что tformfwd(U,T), где U является вектором- 1-by-N, возвращает вектор- 1-by-N X, таким образом X = W(1:N)/W(N+1), где W = [U 1] * A. Структура преобразования T имеет как прямое, так и обратное преобразования.

T = maketform('projective',U,X) создает TFORM struct T для двумерного проективного преобразования, которое отображает каждую строку U в соответствующую строку X. The U и X каждый из аргументов 4 на 2 и определяет углы входа и выходных квадрилатералей. Никакие три угла не могут быть коллинеарными.

T = maketform('custom',NDIMS_IN,NDIMS_OUT,FORWARD_FCN,INVERSE_FCN,TDATA) создает пользовательскую TFORM struct T на основе пользовательских указателей на функцию и параметров. NDIMS_IN и NDIMS_OUT - это числа входа и выхода измерений. FORWARD_FCN и INVERSE_FCN являются указателями на функцию для прямых и обратных функций. Прямая функция должна поддерживать следующий синтаксис: X = FORWARD_FCN(U,T). Обратная функция должна поддерживать следующий синтаксис: U = INVERSE_FCN(X,T). В этих синтаксисах U является P-by- NDIMS_IN матрица, строки которой являются точками во входном пространстве преобразования. X является P-by- NDIMS_OUT матрица, строки которой являются точками в выходном пространстве преобразования. The TDATA аргументом может быть любой MATLAB® массив и обычно используется для хранения параметров пользовательского преобразования. Он доступен для FORWARD_FCN и INVERSE_FCN через tdata область T. Либо FORWARD_FCN или INVERSE_FCN может быть пустым, хотя, по крайней мере INVERSE_FCN должен быть определен для использования T с tformarray или imtransform.

T = maketform('box',tsize,LOW,HIGH) или
T = maketform('box',INBOUNDS, OUTBOUNDS) создает N-мерный аффин TFORM struct T. The tsize аргумент является N-вектором с положительными целыми числами. LOW и HIGH являются также N-векторами. Преобразование преобразует входной прямоугольник, заданный противоположными углами ones(1,N) и tsize, или по углам INBOUNDS(1,:) и INBOUND(2,:), в выходное окно, заданное противоположными углами LOW и HIGH или OUTBOUNDS(1,:) и OUTBOUNDS(2,:). LOW(K) и HIGH(K) должно быть другим, если только tsize(K) равен 1, в этом случае коэффициент аффинной шкалы по K-й размерности принимается равным 1,0. Точно так же INBOUNDS(1,K) и INBOUNDS(2,K) должно быть другим, если только OUTBOUNDS(1,K) и OUTBOUNDS(2,K) те же самые, и наоборот. The 'box' TFORM обычно используется для регистрации строки и столбца индексов изображения или массива в некоторой мировой системе координат.

T = maketform('composite',T1,T2,...,TL) или
T = maketform('composite', [T1 T2 ... TL]) создает TFORM struct T чьи прямые и обратные функции являются функциональными составами прямых и обратных функций T1, T2, ..., TL.

Входы T1, T2, ..., TL упорядочены так же, как это было бы при использовании стандартного обозначения для состава функции: T = T1 T2 ... TL и обратите внимание, что композиция ассоциативна, но не коммутативна. Это означает, что применить T в вход Uнеобходимо применить TL во-первых и T1 последний. Таким образом, если L = 3для примера, затем tformfwd(U,T) то же, что и tformfwd(tformfwd(tformfwd(U,T3),T2),T1). Компоненты T1 через TL должны быть совместимыми с точки зрения количества входа и выходных размерностей. T имеет определенную функцию прямого преобразования, только если все преобразования компонента имеют заданные функции прямого преобразования. T имеет определенную функцию обратного преобразования, только если все функции компонента имеют заданные функции обратного преобразования.

Примеры

свернуть все

Создайте структуру преобразования (TFORM), которая задает аффинное преобразование.

T = maketform('affine',[.5 0 0; .5 2 0; 0 0 1])
T = 

  struct with fields:

       ndims_in: 2
      ndims_out: 2
    forward_fcn: @fwd_affine
    inverse_fcn: @inv_affine
          tdata: [1×1 struct]

Примените прямое преобразование.

tformfwd([10 20],T)
ans =

    15    40

Прочтите изображение в рабочую область и отобразите его.

I = imread('cameraman.tif');

imshow(I), 

Примените преобразование к изображению.

I2 = imtransform(I,T);

Отобразите оригинальное изображение и преобразованное изображение.

figure, imshow(I2)

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

свернуть все

Матрица преобразования, заданная как несингулярная, действительная (N + 1) -by- (N + 1) или (N + 1) -by-N матрица.

Типы данных: double

Углы, заданные как матрица 3 на 2 (для аффинных преобразований) или матрица 4 на 2 (для проективных преобразований). Матрицы задают углы треугольников (для аффинных преобразований) или четырёхугольников (для проективных преобразований).

Типы данных: double

Количество входа и выхода размерностей, заданных как скаляр.

Типы данных: double

Прямая и обратная функции, заданные как указатели на функцию.

Типы данных: function_handle

Параметры пользовательского преобразования, заданные как массив.

Типы данных: double

Размер входа куба, заданный как вектор n-элемента положительных целых чисел.

Типы данных: double

Углы выхода поля, заданные как вектор n-элемента.

Типы данных: double

Прямая и обратная функции, заданные как указатели на функцию.

Типы данных: function_handle

Выходные аргументы

свернуть все

Многомерная пространственная структура преобразования, возвращенная как структура преобразования (TFORM).

Совет

  • Аффинное или проективное преобразование также может быть выражено как это уравнение для A 3 на 2:

    [X Y]'  =  A' * [U V 1] ' 
    

    Или, как это уравнение, для A 3 на 3:

    [X Y 1]'  =  A' * [U V 1]'
Представлено до R2006a