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. По сравнению с результатом с использованием изотопного отображения точек (см. Пример Transform Checkerboard Image), справа от преобразованного изображения появляются три дополнительных столбца шахматной доски, и новые строки не добавляются к преобразованному изображению.

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

свернуть все

Входное изображение, заданное как числовой массив. 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
Для просмотра документации необходимо авторизоваться на сайте