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