Выполните простое преобразование 2-D перевода

Этот пример показывает, как выполнить простое аффинное преобразование, называемое переводом. В перемещении вы смещаете изображение в координатном пространстве, добавляя заданное значение к координатам x и y. (Можно также использовать imtranslate функция для выполнения перевода.)

Считайте изображение, которое будет преобразовано. Этот пример создает шахматное изображение с помощью checkerboard функция.

cb = checkerboard;
imshow(cb)

Figure contains an axes. The axes contains an object of type image.

Получите пространственную ссылочную информацию об изображении. Эта информация используется, когда необходимо отобразить результат преобразования.

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)

Figure contains 2 axes. Axes 1 contains an object of type image. Axes 2 contains an object of type image.

Чтобы увидеть всю полноту преобразованного изображения в том же соотношении с источником координатного пространства, что и оригинальное изображение, используйте 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)

Figure contains 2 axes. Axes 1 contains an object of type image. Axes 2 contains an object of type image.

См. также

| |

Похожие темы