imtransform

Применить 2-D пространственное преобразование к изображению

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

Описание

пример

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

Если A является цветным изображением, тогда imtransform применяет одно и то же преобразование 2-D к каждому цветовому каналу. Точно так же, если A - это объем или последовательность изображений с тремя или более размерностями, затем imtransform применяет то же 2-D преобразование ко всем плоскостям 2-D вдоль более высоких размерностей. Для произвольно-размерных преобразований массива используйте 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 2-D, тогда 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 которые не являются полностью последовательными.

Совет

  • Регистрация изображений. The 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)])

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

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

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

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

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