exponenta event banner

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

Структура преобразования, указанная как структура, например, возвращенная 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 которые не совсем последовательны.

Совет

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