Применить пространственное преобразование к N-D массиву
Создайте квадратное шахматное изображение 2 на 2, где каждый квадрат имеет ширину 20 пикселей. Отобразите изображение.
I = checkerboard(20,1,1); figure imshow(I)
Преобразуйте шахматную доску с помощью проективного преобразования. Сначала создайте пространственную структуру преобразования.
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)
Создайте квадратное шахматное изображение 2 на 2, где каждый квадрат имеет ширину 20 пикселей. Отобразите изображение.
I = checkerboard(20,1,1); figure imshow(I)
Преобразуйте шахматную доску с помощью проективного преобразования. Сначала создайте пространственную структуру преобразования.
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)
Длина шахматных квадратов больше в направлении y, чем в направлении x, что согласуется с большим расстоянием дискретизации между точками в векторе samp_x
. По сравнению с результатом с использованием изотопного отображения точек (см. Пример Transform Checkerboard Image), справа от преобразованного изображения появляются три дополнительных столбца шахматной доски, и новые строки не добавляются к преобразованному изображению.
A
- Входное изображениеВходное изображение, заданное как числовой массив. A
может быть реальным или комплексным.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
Поддержка комплексного числа: Да
T
- Пространственное преобразованиеTFORM
пространственная структура преобразованияПространственное преобразование, заданное как 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
- РесамплерРесамплер, заданный как структура. Структура ресамплера задает, как интерполировать значения входного массива в заданных местоположениях. R
создается с makeresampler
, что позволяет точно контролировать, как интерполировать по каждой размерности. makeresampler
также управляет значениями входного массива, которые нужно использовать при интерполяции близко к ребру массива.
Типы данных: struct
tdims_A
- Входные размерности преобразованияВходы преобразования, заданные как вектор-строка конечных, положительных целых чисел.
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_B
- Выходные размерности преобразованияВыходы преобразования, заданные как вектор-строка конечных, положительных целых чисел. Для получения дополнительной информации смотрите tdims_A
.
Типы данных: double
tsize_B
- Размер выходного массива в размерностях преобразованияРазмер размерностей преобразования выхода массива, заданный как вектор-строка конечных, положительных целых чисел. Размер 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
- Местоположения точек в выходном пространствеМестоположения точек в выходном пространстве, заданные как конечный вещественный массив. 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
- Заливка значенийЗаливка значений, заданная в виде числового массива или скаляра. Значения заливки в F
может использоваться в трех ситуациях:
Когда создается разделяемый повторный усилитель с makeresampler
и его padmethod
задано значение либо 'fill'
или 'bound'
.
Когда используется пользовательский повторный усилитель, поддерживающий 'fill'
или 'bound'
методы pad (с поведением, характерным для индивидуальной настройки).
Когда карта из размерностей преобразования B
к размерностям преобразования A
заведомо не определено для некоторых точек. Такие точки кодируются во входном пространстве преобразования NaN
s в любом из 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
B
- Преобразованное изображениеПреобразованное изображение, возвращенное как числовой массив.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.