Этот пример показывает, как выполнить простое аффинное преобразование, называемое переводом. В перемещении вы смещаете изображение в координатном пространстве, добавляя заданное значение к координатам x и y. (Можно также использовать imtranslate
функция для выполнения перевода.)
Считайте изображение, которое будет преобразовано. Этот пример создает шахматное изображение с помощью checkerboard
функция.
cb = checkerboard; imshow(cb)
Получите пространственную ссылочную информацию об изображении. Эта информация используется, когда необходимо отобразить результат преобразования.
cb_ref = imref2d(size(cb))
cb_ref = imref2d with properties: XWorldLimits: [0.5000 80.5000] YWorldLimits: [0.5000 80.5000] ImageSize: [80 80] PixelExtentInWorldX: 1 PixelExtentInWorldY: 1 ImageExtentInWorldX: 80 ImageExtentInWorldY: 80 XIntrinsicLimits: [0.5000 80.5000] YIntrinsicLimits: [0.5000 80.5000]
Создайте матрицу преобразования 3 на 3, названную T
в этом примере, который определяет преобразование. В этой матрице T(3,1)
задает количество пикселей для смещения изображения в горизонтальном направлении и T(3,2)
задает количество пикселей для смещения изображения в вертикальном направлении.
T = [1 0 0; 0 1 0; 20 30 1]
T = 3×3
1 0 0
0 1 0
20 30 1
Создайте геометрический объект преобразования, который задает перемещение, которое вы хотите выполнить. Поскольку преобразования перевода являются частным случаем аффинного преобразования, пример использует affine2d
геометрический объект преобразования для представления перемещения. Создайте affine2d
объект путем передачи матрицы преобразования 3 на 3, T
, к affine2d
конструктор.
tform = affine2d(T);
Выполните преобразование. Вызовите imwarp
функция, задающая изображение, которое вы хотите преобразовать, и объект геометрического преобразования. imwarp
возвращает преобразованное изображение, cb_translated
. Этот пример также возвращает дополнительный пространственный объект привязки, cb_translated_ref
, который содержит пространственную ссылочную информацию о преобразованном изображении.
[cb_translated,cb_translated_ref] = imwarp(cb,tform);
Просмотрите оригинал и преобразованное изображение один за другим, используя subplot
функция в сочетании с imshow
. При просмотре переведенного изображения может показаться, что преобразование не имело никакого эффекта. Преобразованное изображение выглядит идентично оригинального изображения. Причина того, что никакие изменения не очевидны в визуализации, заключается в imwarp
определяет размер выходного изображения таким образом, чтобы оно было достаточно большим, чтобы содержать все преобразованное изображение, но не все выходное координатное пространство. Заметьте, однако, что значения координат были изменены преобразованием.
figure; subplot(1,2,1); imshow(cb,cb_ref); subplot(1,2,2); imshow(cb_translated,cb_translated_ref)
Чтобы увидеть всю полноту преобразованного изображения в том же соотношении с источником координатного пространства, что и оригинальное изображение, используйте imwarp
с 'OutputView'
параметр, задающий пространственный объект привязки. Пространственный объект привязки задает размер выходного изображения и то, какая часть выходного координатного пространства включена в выходное изображение. Для этого пример делает копию пространственного объекта привязки, сопоставленного с оригинальным изображением, и изменяет мировые пределы координат, чтобы соответствовать полному размеру преобразованного изображения. Пример устанавливает пределы выходного изображения в мировых координатах, чтобы включить источник координат от входа
cb_translated_ref = cb_ref;
cb_translated_ref.XWorldLimits(2) = cb_translated_ref.XWorldLimits(2)+20;
cb_translated_ref.YWorldLimits(2) = cb_translated_ref.YWorldLimits(2)+20;
[cb_translated,cb_translated_ref] = imwarp(cb,tform,'OutputView',cb_translated_ref);
figure, subplot(1,2,1);
imshow(cb,cb_ref);
subplot(1,2,2);
imshow(cb_translated,cb_translated_ref)