Матричное представление геометрических преобразований

Можно использовать матрицу геометрического преобразования, чтобы выполнить глобальное преобразование изображения. Во-первых, задайте матрицу преобразования и используйте ее, чтобы создать объект геометрического преобразования. Затем примените глобальное преобразование к изображению путем вызова imwarp с объектом геометрического преобразования. Для примера смотрите, Выполняют Простое 2D Преобразование Перевода.

2D аффинные преобразования

Таблица приводит 2D аффинные преобразования с матрицей преобразования, используемой, чтобы задать их. Для 2D аффинных преобразований последний столбец должен содержать [0 0 1] однородные координаты.

Используйте любую комбинацию 2D матриц преобразования, чтобы создать affine2d объект геометрического преобразования. Используйте комбинации 2D матриц перевода и вращения, чтобы создать rigid2d объект геометрического преобразования.

2D аффинное преобразованиеПример (Оригинальное и преобразованное изображение)Матрица преобразования
Перевод

tx определяет перемещение вдоль оси X

ty определяет перемещение вдоль оси y.

Для получения дополнительной информации о пиксельных координатах, смотрите Системы координат Изображений.

Шкала

sx задает масштабный коэффициент вдоль оси X

sy задает масштабный коэффициент вдоль оси y.

Сдвиг

shx задает фактор сдвига вдоль оси X

shy задает фактор сдвига вдоль оси y.

Вращение

q задает угол вращения вокруг источника.

2D проективные преобразования

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

Преобразование является 3х3 матрицей. В отличие от аффинных преобразований, нет никаких ограничений на последний столбец матрицы преобразования.

2D проективное преобразование ПримерМатрица преобразования
Наклон

[10E01F001]

E и F влияйте на предел.

Когда E и F являются большими, предел прибывает более близкий началу координат, и таким образом параллельные линии, кажется, сходятся более быстро.

Обратите внимание на то, что, когда E и F равны 0, преобразование становится аффинным преобразованием.

Проективные преобразования часто используются, чтобы указать изображения, которые являются неровно. Если бы у вас есть два изображения, которые требуется выровнять, первое избранное использование пар контрольной точки cpselect. Затем соответствуйте проективной матрице преобразования к использованию пар контрольной точки fitgeotrans и установка transformationType к 'projective'. Это автоматически создает projective2d объект геометрического преобразования. Матрица преобразования хранится как свойство в projective2d объект. Преобразование может затем быть применено к другому использованию изображений imwarp.

Создайте составные 2D аффинные преобразования

Можно объединить несколько преобразований в одну матрицу с помощью умножения матриц. Порядок вопросов умножения матриц.

В этом примере показано, как создать составной объект 2D преобразований перевода и вращения.

Создайте изображение шахматной доски, которое подвергнется преобразованию. Также создайте пространственный ссылочный объект для изображения.

cb = checkerboard(4,2);
cb_ref = imref2d(size(cb));

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

background = zeros(150);
imshowpair(cb,cb_ref,background,imref2d(size(background)))

Создайте матрицу перевода и сохраните ее как affine2d объект геометрического преобразования. Этот перевод переключит изображение горизонтально на 100 пикселей.

T = [1 0 0;0 1 0;100 0 1];
tform_t = affine2d(T);

Создайте матрицу вращения и сохраните ее как affine2d объект геометрического преобразования. Этот перевод будет вращать изображение 30 градусов по часовой стрелке вокруг начала координат.

R = [cosd(30) sind(30) 0;-sind(30) cosd(30) 0;0 0 1];
tform_r = affine2d(R);

Перевод, вместе с попеременно

Выполните перевод сначала и второе вращение. В умножении матриц преобразования, матрица перевода T слева, и матрица вращения R справа.

TR = T*R;
tform_tr = affine2d(TR);
[out,out_ref] = imwarp(cb,cb_ref,tform_tr);
imshowpair(out,out_ref,background,imref2d(size(background)))

Вращение, вместе с переводом

Инвертируйте порядок преобразований: выполните вращение сначала и второй перевод. В умножении матриц преобразования, матрица вращения R слева, и матрица перевода T справа.

RT = R*T;
tform_rt = affine2d(RT);
[out,out_ref] = imwarp(cb,cb_ref,tform_rt);
imshowpair(out,out_ref,background,imref2d(size(background)))

Заметьте, как пространственное положение преобразованного изображения отличается чем тогда, когда перевод сопровождался попеременно.

3-D аффинные преобразования

В следующей таблице перечислены 3-D аффинные преобразования с матрицей преобразования, используемой, чтобы задать их. Обратите внимание на то, что в 3-D случае, существует несколько матриц, в зависимости от того, как вы хотите вращать или сдвинуть изображение. Последний столбец должен содержать [0 0 0 1].

Используйте любую комбинацию 3-D матриц преобразования, чтобы создать affine3d объект геометрического преобразования. Используйте комбинации 3-D матриц перевода и вращения, чтобы создать rigid3d объект геометрического преобразования.

3-D аффинное преобразованиеМатрица преобразования  
Перевод

[100001000010txtytz1]

  
Шкала

[sx0000sy0000sz00001]

  
СдвигСдвиг x,y:

x'=x+azy'=y+bzz'=z

[10000100ab100001]

Сдвиг x,z:

x'=x+ayy'=yz'=z+cy

[1000a1c000100001]

Сдвиг y, z:

x'=xy'=y+bxz'=z+cx

[1bc0010000100001]

ВращениеОб оси x:

[10000cos(a)sin(a)00sin(a)cos(a)00001]

Об оси y:

[cos(a)0sin(a)00100sin(a)0cos(a)00001]

Об оси z:

[cos(a)sin(a)00sin(a)cos(a)0000100001]

Для аффинных преобразований N-D последний столбец должен содержать [zeros(N,1); 1]. imwarp не поддерживает преобразования больше, чем трех измерений.

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

| | | | | |

Связанные примеры

Больше о