exponenta event banner

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

В этом примере показано, как выполнить простое аффинное преобразование, называемое переводом. При преобразовании изображение сдвигается в координатном пространстве путем добавления указанного значения к координатам 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.

См. также

| |

Связанные темы