Применить 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(___,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)
Регистрация изображений. 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
.
checkerboard
| cp2tform
| imresize
| imrotate
| makeresampler
| maketform
| tformarray