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