Примените пространственное преобразование к массиву N-D
B = tformarray(A,T,R,tdims_A,tdims_B,tsize_B,tmap_B,F)
Создайте квадратное изображение шахматной доски 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]);
Создайте resampler. Используйте метод клавиатуры 'circular'
при создании resampler, так, чтобы вывод, казалось, был видом в перспективе бесконечной шахматной доски.
R = makeresampler('cubic','circular');
Выполните преобразование, задав структуру преобразования и resampler. В данном примере подкачайте выходные размерности и задайте 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]);
Создайте resampler. Используйте метод клавиатуры 'circular'
при создании resampler, так, чтобы вывод, казалось, был видом в перспективе бесконечной шахматной доски.
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.
Выполните преобразование, задав структуру преобразования и resampler. Задайте выходную карту как tmap
. Оставьте аргумент tsize_B
пустым, поскольку вы задаете аргумент tmap_B
. Значение заливки не имеет значения, поскольку resampler является круговым.
J = tformarray(I,T,R,[1 2],[1 2],[],tmap,[]); figure imshow(J)
Длина квадратов шахматной доски больше в направлении Y, чем в направлении X, которое соглашается с большим расстоянием выборки между точками в векторном samp_x
. По сравнению с результатом с помощью изотопического отображения точки (см. Изображение Шахматной доски Преобразования в качестве примера), три дополнительных столбца шахматной доски появляются справа от преобразованного изображения, и никакие новые строки не добавляются к преобразованному изображению.
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
применяется, resampler, заданные в R
, чтобы вычислить значения в каждом, преобразовывают местоположение пробела, заданное в tmap_B
Пустой, затем tformarray
применяется, resampler в каждом местоположении в выводе преобразовывают нижнюю сетку
Типы данных: struct
R
ResamplerResampler, заданный как структура. resampler структура задает, как интерполировать значения входного массива в заданных местоположениях. 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
является 2D преобразованием, tdims_A = [2 1]
и tdims_B = [1 2]
, то размерности строки и столбца A
соответствуют вторым и первым размерностям входного пробела преобразования, соответственно. Размерности строки и столбца B
соответствуют первым и вторым размерностям выходного пробела, соответственно.
Типы данных: double
tdims_B
— Выведите преобразовывают размерностиВыведите преобразовывают размерности, заданные как вектор - строка из конечных, положительных целых чисел. Для получения дополнительной информации смотрите tdims_A
.
Типы данных: double
tsize_B
— Размер выходного массива в размерностях преобразованияРазмер выходного массива преобразовывает размерности, заданные как вектор - строка из конечных, положительных целых чисел. Размер B
по измерениям непреобразования взят непосредственно из размера A
по тем измерениям.
Например, если T
является 2D преобразованием, 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
могут использоваться в трех ситуациях:
Когда отделимый resampler создается с makeresampler
, и его padmethod
установлен или в 'fill'
или в 'bound'
.
Когда пользовательский resampler используется, который поддерживает 'fill'
или методы клавиатуры 'bound'
(с поведением, которое характерно для индивидуальной настройки).
Когда карта от размерностей преобразования B
к размерностям преобразования A
сознательно не определена для некоторых точек. Такие точки закодированы во входе, преобразовывают пробел NaN
s или в tmap_B
или в выводе tforminv
.
В первых двух случаях значения заливки используются, чтобы вычислить значения для выходных местоположений, которые сопоставляют снаружи или около ребер входного массива. Заполните значения копируются в B
, когда выведенные местоположения сопоставляют хорошо вне входного массива. Смотрите makeresampler
для получения дополнительной информации о 'fill'
и 'bound'
.
Когда F
:
Скаляр (включая NaN
), его значение реплицировано через все размерности непреобразования.
Нескалярный, его размер зависит от size(A)
в размерностях непреобразования. А именно, если K
является J
th, не преобразовывают размерность A
, то size(F,J)
должен быть или size(A,K)
или 1
. Как удобство, tformarray
реплицирует F
через любые размерности с модульным размером, таким образом, что после репликации size(F,J)
равняется size(A,K)
.
Например, предположите, что A
представляет 10 изображений RGB и имеет размер 200 200 3 10, T
является 2D преобразованием, и tdims_A
и tdims_B
оба [1 2]. Другими словами, tformarray
применяет то же 2D преобразование к каждой цветной плоскости каждого из 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.