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

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

Смотрите также

| |

Похожие темы