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

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

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

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

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

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

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

ty задает перемещение вдоль оси Y.

Дополнительные сведения о пиксельных координатах см. в разделе «Системы координат изображений».

Шкала

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

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

Постричь

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

shy задает коэффициент сдвига вдоль оси Y.

Вращение

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

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

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

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

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

[10E01F001]

E и F повлиять на точку исчезновения.

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

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

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

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

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

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

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

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

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

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

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

Создайте матрицу перевода и сохраните ее как 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)))

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

Вращение с последующим перемещением

Противоположный порядок преобразований: выполните вращение первым и перемещение вторым. При умножении матриц преобразования матрица поворота 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)))

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

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

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 не поддерживает преобразования более чем трёх размерностей.

См. также

| | | | | |

Похожие примеры

Подробнее о