exponenta event banner

tformarray

Применение пространственного преобразования к массиву N-D

Описание

пример

B = tformarray(A,T,R,tdims_A,tdims_B,tsize_B,tmap_B,F) применяет пространственное преобразование к массиву A для создания массива B.

Примеры

свернуть все

Создайте квадратное шахматное изображение 2 на 2, где каждый квадрат имеет ширину 20 пикселей. Отображение изображения.

I = checkerboard(20,1,1);
figure
imshow(I)

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

Трансформируйте шашечную доску проективным преобразованием. Сначала создайте структуру пространственного преобразования.

T = maketform('projective',[1 1; 41 1; 41 41;   1 41],...
                           [5 5; 40 5; 35 30; -10 30]);

Создайте ресамплер. Используйте метод pad 'circular' при создании ресамплера, так что выходной сигнал представляет собой перспективный вид бесконечной шахматной доски.

R = makeresampler('cubic','circular');

Выполните преобразование, указав структуру преобразования и ресамплер. В этом примере следует поменять местами выходные размеры и указать выходное изображение «100 на 100». Оставить аргумент tmap_B пустой, поскольку указан аргумент tsize_B. Оставить аргумент F пустой, так как значение заливки не требуется.

J = tformarray(I,T,R,[1 2],[2 1],[100 100],[],[]);
figure
imshow(J)

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

Создайте квадратное шахматное изображение 2 на 2, где каждый квадрат имеет ширину 20 пикселей. Отображение изображения.

I = checkerboard(20,1,1);
figure
imshow(I)

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

Трансформируйте шашечную доску проективным преобразованием. Сначала создайте структуру пространственного преобразования.

T = maketform('projective',[1 1; 41 1; 41 41;   1 41],...
                           [5 5; 40 5; 35 30; -10 30]);

Создайте ресамплер. Используйте метод pad 'circular' при создании ресамплера, так что выходной сигнал представляет собой перспективный вид бесконечной шахматной доски.

R = makeresampler('cubic','circular');

Создание массивов, задающих сопоставление точек из пространства ввода в пространство вывода. В этом примере используется анизотропная выборка, где расстояние между образцами больше в одном направлении, чем в другом.

samp_x = 1:1.5:150;
samp_y = 1:100;
[x,y] = meshgrid(samp_x,samp_y);
tmap = cat(3,x,y);
size(tmap)
ans = 1×3

   100   100     2

Обратите внимание на размер tmap. Выходное изображение будет иметь размеры 100 на 100.

Выполните преобразование, указав структуру преобразования и ресамплер. Укажите карту вывода как tmap. Оставить аргумент tsize_B пустой, так как вы указываете аргумент tmap_B. Значение заполнения не имеет значения, так как ресамплер имеет круглую форму.

J = tformarray(I,T,R,[1 2],[1 2],[],tmap,[]);
figure
imshow(J)

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

Длина шашечных квадратов больше в направлении y, чем в направлении x, что согласуется с большим расстоянием выборки между точками в векторе samp_x. По сравнению с результатом с использованием сопоставления изотопных точек (см. пример «Преобразовать изображение контрольной доски»), справа от преобразованного изображения появляются три дополнительных столбца шахматной доски, и к преобразованному изображению не добавляются новые строки.

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

свернуть все

Входное изображение, указанное как числовой массив. A может быть реальным или сложным.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
Поддержка комплексного номера: Да

Пространственное преобразование, указанное как TFORM структура пространственного преобразования. Как правило, используется maketform для создания функции TFORM структура.

tformarray использование T и функции tforminv вычисляют соответствующее расположение в подстрочном пространстве входного преобразования для каждого расположения в подстрочном пространстве выходного преобразования. tformarray определяет пространство входного преобразования с помощью tdims_B и tsize_B и пространство нижнего индекса выходного преобразования tdims_A и size(A).

Если T пуст, затем tformarray работает как функция прямой повторной выборки. Далее, если tmap_B является:

  • Не пусто, тогда tformarray применяет ресамплер, определенный в R для вычисления значений в каждом местоположении пространства преобразования, определенном в tmap_B

  • Пустое, затем tformarray применяет ресамплер в каждом местоположении в сетке нижнего индекса выходного преобразования

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

Ресамплер, указанный как структура. Структура ресамплера определяет способ интерполяции значений входного массива в указанных местоположениях. R создается с помощью makeresampler, что позволяет точно контролировать способ интерполяции вдоль каждого измерения. makeresampler также управляет значениями входного массива, которые будут использоваться при интерполяции рядом с краем массива.

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

Размеры входного преобразования, заданные как вектор строки конечных положительных целых чисел.

tdims_A и tdims_B укажите, какие размеры входных и выходных массивов участвуют в пространственном преобразовании. Каждый элемент должен быть уникальным. Записи не должны перечисляться в порядке увеличения, но порядок имеет значение. Порядок указывает точное соответствие между размерами массивов A и B и входное и выходное пространства преобразования T.

length(tdims_A) должны равняться T.ndims_in, и length(tdims_B) должны равняться T.ndims_out.

Например, если T является 2-D преобразованием, tdims_A = [2 1], и tdims_B = [1 2], затем размеры строки и столбца A соответствуют второму и первому измерениям входного пространства преобразования соответственно. Размеры строк и столбцов B соответствуют первому и второму размерам выходного пространства соответственно.

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

Размеры выходного преобразования, заданные как вектор строки конечных положительных целых чисел. Дополнительные сведения см. в разделе tdims_A.

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

Размер размеров преобразования выходного массива, заданного как вектор строки конечных положительных целых чисел. Размер B вдоль нетрансформных размеров берется непосредственно из размера A вдоль этих размеров.

Например, если T является 2-D преобразованием, size(A) = [480 640 3 10], tdims_B является [2 1], и tsize_B является [300 200], то size(B) является [200 300 3 10].

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

Расположение точек в выходном пространстве, указанное как конечный массив вещественных значений. tmap_B является необязательным аргументом, который предоставляет альтернативный способ указания соответствия между положением элементов B и расположение в пространстве выходного преобразования. tmap_B может использоваться, например, для вычисления результата деформации изображения в наборе произвольных местоположений в выходном пространстве.

Если tmap_B не пуст, то размер tmap_B является

 [D1 D2 D3 ... DN L]
где N равняется length(tdims_B). tsize_B должно быть [].

Значение L зависит от того, T пуст. Если T является:

  • Не пусто, тогда L является T.ndims_outи каждая точка L-размера в tmap_B преобразуется в местоположение пространства ввода с помощью T

  • Пустое, затем L является length(tdims_A), и каждый L-мерная точка в tmap_B используется непосредственно в качестве местоположения во входном пространстве.

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

Значения заливки, заданные как числовой массив или скаляр. Значения заполнения в F может использоваться в трех ситуациях:

  • При создании разделяемого ресамплера с помощью makeresampler и его padmethod имеет значение: 'fill' или 'bound'.

  • Когда используется пользовательская ресамплер, поддерживающая 'fill' или 'bound' методы pad (с поведением, специфичным для настройки).

  • Когда карта из размеров преобразования B к размерам преобразования A намеренно не определен для некоторых моментов. Такие точки кодируются во входном пространстве преобразования посредством NaNs в любом tmap_B или в выходных данных tforminv.

В первых двух случаях значения заливки используются для вычисления значений для местоположений вывода, которые отображаются снаружи или вблизи краев входного массива. Значения заливки копируются в B когда местоположения вывода хорошо отображаются за пределами входного массива. Посмотрите makeresampler для получения дополнительной информации о 'fill' и 'bound'.

Когда F является:

  • Скаляр (включая NaN), его значение реплицируется по всем нетрансформным измерениям.

  • Нескалярный, его размер зависит от size(A) в нетрансформированных измерениях. В частности, если K является Jный нетрансформный размер A, то size(F,J) должно быть либо size(A,K) или 1. Для удобства, tformarray копирует F по всем измерениям с размером единицы, таким, что после репликации size(F,J) равняется size(A,K).

Например, предположим A представляет 10 изображений RGB и имеет размер 200 на 200 на 3 на 10, T является 2-D преобразованием, и tdims_A и tdims_B оба [1 2]. Другими словами, tformarray применяет одно и то же преобразование 2-D к каждой цветовой плоскости каждого из 10 изображений RGB. В этой ситуации имеется несколько вариантов F:

  • F может быть скаляром, в этом случае одно и то же значение заливки используется для каждой цветовой плоскости всех 10 изображений.

  • F может быть вектором 3 на 1, [R G B]'. tformarray использует значение RGB в качестве значения заливки для соответствующих цветовых плоскостей каждого из 10 изображений.

  • F может быть вектором 1 на 10. tformarray использует разное значение заливки для каждого из 10 изображений, причем это значение заливки используется для всех трех цветовых плоскостей.

  • F может быть матрицей 3 на 10. tformarray использует разные цвета заливки RGB для каждого из 10 изображений.

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

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

свернуть все

Преобразованное изображение, возвращаемое в виде числового массива.

Представлен до R2006a