imtransform

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

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

Описание

пример

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 | logical

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

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

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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 uint8 Изображение RGB, которое является 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