imtransform

Примените 2D пространственное преобразование, чтобы отобразить

imtransform не рекомендуется. Используйте imwarp вместо этого.

Синтаксис

B = imtransform(A,tform)
B = imtransform(A,tform,interp)
B = imtransform(___,Name,Value)
[B,xdata,ydata] = imtransform(___)

Описание

пример

B = imtransform(A,tform) преобразовывает отображают A согласно 2D пространственному преобразованию, заданному tform, и возвращает преобразованное изображение, B.

Если A является цветным изображением, то imtransform применяет то же 2D преобразование к каждому цветовому каналу. Аналогично, если A является объемом или последовательностью изображений с тремя или больше размерностями, то imtransform применяет то же 2D преобразование ко всем 2D плоскостям по более высоким измерениям. Для произвольно-размерных преобразований массивов используйте tformarray.

B = imtransform(A,tform,interp) задает форму интерполяции, чтобы использовать.

B = imtransform(___,Name,Value) пары "имя-значение" использования, чтобы управлять различными аспектами пространственного преобразования.

пример

[B,xdata,ydata] = imtransform(___) также возвращает степень выходного изображения B на пробеле вывода X-Y. По умолчанию imtransform вычисляет xdata и ydata автоматически так, чтобы B содержал целое преобразованное изображение A. Однако можно заменить это автоматическое вычисление путем определения значений для XData и входных параметров пары "имя-значение" YData.

Примеры

Простое преобразование

Примените горизонтальный сдвиг к полутоновому изображению.

I = imread('cameraman.tif');
tform = maketform('affine',[1 0 0; .5 1 0; 0 0 1]);
J = imtransform(I,tform);
imshow(J)

Проективное преобразование

Сопоставьте квадрат с четырехугольником с проективным преобразованием. Настройте входную систему координат так, чтобы входное изображение заполнило модульный квадрат с вершинами (0 0), (1 0), (1 1), (0 1).

I = imread('cameraman.tif');
udata = [0 1];  vdata = [0 1];

Преобразуйте к четырехугольнику с вершинами (-4 2), (-8 3), (-3 - 5), (6 3).

tform = maketform('projective',[ 0 0;  1  0;  1  1; 0 1],...
                               [-4 2; -8 -3; -3 -5; 6 3]);

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

[B,xdata,ydata] = imtransform(I,tform,'bicubic', ...
                              'udata',udata,...
                              'vdata',vdata,...
                              'size',size(I),...
                              'fill',128);
subplot(1,2,1); imshow(I,'XData',udata,'YData',vdata)
subplot(1,2,2); imshow(B,'XData',xdata,'YData',ydata)

Отобразите регистрацию

Считайте воздушную фотографию в рабочую область MATLAB® и просмотрите ее.

unregistered = imread('westconcordaerial.png');
figure
imshow(unregistered)

Считайте ортофотографию в рабочее пространство MATLAB и просмотрите его.

figure
imshow('westconcordorthophoto.png')

Точки управления нагрузкой, которые были ранее выбраны.

load westconcordpoints

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

t_concord = cp2tform(movingPoints,fixedPoints,'projective');

Получите ширину и высоту ортофотографии, выполните преобразование и просмотрите результат.

info = imfinfo('westconcordorthophoto.png');

registered = imtransform(unregistered,t_concord,...
    'XData',[1 info.Width],'YData',[1 info.Height]);
figure
imshow(registered)

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

свернуть все

Отобразите, чтобы быть преобразованными, заданными как числовой или логический массив любой размерности.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

Структура преобразования, заданная как struct, такой, как возвращено maketform или cp2tform. Первая размерность преобразования является горизонталью или x-координатой, и второе измерение является вертикалью или y-координатой. Это соглашение является реверсом соглашения индексирования массивов в MATLAB.

Метод интерполяции, заданный как одно из этих значений.

Метод интерполяцииОписание
'bilinear'Линейная интерполяция
'nearest'Интерполяция ближайшего соседа — выходной пиксель присвоен значение пикселя, которого находится в пределах точка. Никакие другие пиксели не рассматриваются.
'bicubic'Кубичная интерполяция
Структура resamplerСтруктура resampler возвращена makeresampler. Эта опция позволяет больше управления тем, как imtransform выполняет передискретизацию.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: B = imtransform(A,T,'FillValues',128)

Пространственная степень входа отображает A на пробеле входа U-V, заданном как числовые векторы с 2 элементами. Значения UData и VData представляют координаты в системе мировой координаты. Два элемента UData дают u-координаты (горизонталь) первых и последних столбцов A, соответственно. Два элемента VData дают v-координаты (вертикальные) из первых и последних строк A.

По умолчанию пространственная степень A на пробеле U-V совпадает со степенью изображений во внутренних координатах. Другими словами, значением по умолчанию UData является [1 size(A,2)], и значением по умолчанию VData является [1 size(A,1)].

Пространственная степень преобразованного изображения B на пробеле входа X-Y, заданном как числовые векторы с 2 элементами. Значения XData и YData представляют координаты в системе мировой координаты. Два элемента XData дают x-координаты (горизонталь) первых и последних столбцов B, соответственно. Два элемента YData дают y-координаты (вертикальные) из первых и последних строк B.

Если вы не задаете XData и YData, то imtransform оценивает значения, которые содержат целое преобразованное выходное изображение. Чтобы определить эти значения, imtransform использует функцию findbounds.

Размер пикселей в X-Y пробел вывода, заданный в виде числа или числового вектора с 2 элементами. Если XYScale является скаляром, то выходные пиксели являются квадратными, и XYScale задает длину стороны. В противном случае два элемента XYScale задают ширину и высоту каждого выходного пикселя на пробеле X-Y, соответственно.

Значение по умолчанию XYScale зависит от того, задаете ли вы Size:

  • Если вы задаете Size, то imtransform вычисляет XYScale от Size, XData и YData.

  • Если вы не задаете Size, то imtransform использует шкалу входных пикселей для XYScale, кроме случаев, где изображение чрезмерно крупносерийного производства закончилось бы.

Примечание

В случаях, где сохранение шкалы входного изображения привело бы к изображению чрезмерно крупносерийного производства, функция imtransform автоматически увеличивает значение XYScale. Чтобы гарантировать, что шкала выходного пикселя совпадает со шкалой входного пикселя, задайте параметр XYScale. Например, вызовите imtransform как показано в следующем синтаксисе:

B = imtransform(A,T,'XYScale',1)

Размер преобразованного изображения B, заданный как вектор с 2 элементами положительных целых чисел. Два элемента Size задают количество строк и столбцов выходного изображения B, соответственно. Для более высоких размерностей imtransform берет размер B непосредственно от размера входного изображения A. Таким образом size(B,k) равняется size(A,k) для k > 2.

Если вы не задаете Size, то imtransform получает это значение на XData, YData и XYScale.

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

  • Если входное изображение, A 2D, то FillValues должен быть скаляром.

  • Если A 3-D или N-D, то FillValues может быть массивом, размер которого удовлетворяет следующее ограничение: size(FillValues,k) должен равняться или size(A,k+2) или 1.

    Например, если A является изображением RGB uint8, которое является 200 200 3, затем возможности для 'FillValues' включают следующие значения.

    ЗначениеЗаливка
    0Заполните с черным цветом
    [0;0;0]Заполните с черным цветом
    255Заполните с белым
    [255;255;255]Заполните с белым
    [0;0;255]Заполните с синим
    [255;255;0]Заполните с желтым

    Для второго примера, если A является 4-D с размером 200 200 3 10, то можно задать 'FillValues' как скаляр, 1 10 вектор, вектор 3 на 1, или 3 10 матрица.

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

свернуть все

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

Горизонтальная степень преобразованного изображения B в X-Y пробел вывода, возвращенный как числовой вектор с 2 элементами. Два элемента xdata дают x-координаты (горизонталь) первых и последних столбцов B в системе мировой координаты, соответственно.

Примечание

Первый элемент xdata всегда равняется первому элементу аргумента XData, если задано. Однако иногда второй элемент xdata точно не равняется второму элементу XData. Значения отличаются или из-за потребности в целом числе строк и столбцов, или потому что вы заданные значения для XData, YData, XYScale и Size, которые не совсем сопоставимы.

Вертикальная степень преобразованного изображения B в X-Y пробел вывода, возвращенный как числовой вектор с 2 элементами. Два элемента ydata дают y-координаты (вертикальные) из первых и последних строк B в системе мировой координаты, соответственно.

Примечание

Первый элемент ydata всегда равняется первому элементу аргумента YData, если задано. Однако иногда второй элемент ydata точно не равняется второму элементу YData. Значения отличаются или из-за потребности в целом числе строк и столбцов, или потому что вы заданные значения для XData, YData, XYScale и Size, которые не совсем сопоставимы.

Советы

  • Отобразите Регистрацию. Функция imtransform автоматически переключает источник вашего выходного изображения, чтобы сделать как можно больше преобразованного изображения видимым. Если вы используете imtransform, чтобы сделать регистрацию изображений, синтаксис, B = imtransform(A,tform) может привести к неожиданным результатам. Чтобы управлять пространственным местоположением выходного изображения, установите XData и YData явным образом.

  • Чистый Перевод. Вызывание функции imtransform с чисто переводным преобразованием приводит к выходному изображению, которое точно похоже на входное изображение, если вы не задаете XData и значения YData в вашем вызове imtransform. Например, если вы хотите, чтобы вывод был одного размера, как вход, раскрывающий перевод относительно входного изображения, вызовите imtransform как показано в следующем синтаксисе:

    B = imtransform(A,T,'XData',[1 size(A,2)],...
       'YData',[1 size(A,1)])

    Для получения дополнительной информации об этой теме, смотрите, Выполняют Простое 2D Преобразование Перевода.

  • Скорость преобразования. Если вы не задаете местоположение выходного пробела для B с помощью XData и YData, то imtransform оценивает местоположение автоматически с помощью функционального findbounds. Можно использовать findbounds в качестве быстрой сопоставляющей форварда опции для некоторых обычно используемых преобразований, такой как аффинный или проективный. Для преобразований, которые не имеют прямого отображения, такого как полиномиальные преобразования вычисленным fitgeotrans, findbounds может взять намного дольше. Если можно задать XData и YData непосредственно для таких преобразований, то imtransform может запуститься заметно быстрее.

  • Усечение. Автоматическая оценка XData и YData с помощью findbounds иногда отсекает выходное изображение. Чтобы постараться не отсекать, установите XData и YData непосредственно.

  • Произвольные Размерные Преобразования. Используйте 2D преобразование для tform при использовании imtransform. Для произвольно-размерных преобразований массивов смотрите tformarray.

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