Чтобы выполнить 2D или 3-D геометрическое преобразование, сначала создайте объект геометрического преобразования, который хранит информацию о преобразовании. Затем передайте изображение, которое будет преобразовано и объект геометрического преобразования к функции imwarp
. Опционально можно предоставить пространственную информацию о ссылке о входном изображении к imwarp
.
Различные типы объектов геометрического преобразования хранят различную информацию о преобразовании.
affine2d
, projective2d
и объекты affine3d
хранят матрицу преобразования.
geometricTransform2d
и объекты geometricTransform3d
хранят обратную мудрую точкой функцию отображения, и опционально прямую мудрую точкой функцию отображения.
Другие типы преобразования, включая LocalWeightedMeanTransformation2D
, PiecewiseLinearTransformation2D
, и объекты PolynomialTransformation2D
, хранят отображение между парами контрольной точки.
Существует несколько способов создать объект геометрического преобразования.
Приблизьтесь, чтобы создать объект Tranformation | affine2d | affine3d | projective2d | geometricTransform2d / geometricTransform3d | Другие объекты преобразования |
---|---|---|---|---|---|
Задайте матрицу преобразования | X | X | X | ||
Задайте пользовательскую мудрую точкой функцию отображения | X | ||||
Оцените преобразование от пар контрольной точки | X | X | X | ||
Оцените преобразование Используя оптимизацию подобия | X | X | |||
Оцените преобразование Используя корреляцию фазы | X |
Если вы знаете матрицу преобразования для геометрического преобразования, вы хотите выполнить, то можно создать affine2d
, projective2d
или объект геометрического преобразования affine3d
непосредственно. Для получения дополнительной информации о создании матрицы преобразования, смотрите Матричное Представление Геометрических преобразований.
Следующий пример задает матрицу преобразования для 2D перевода и создает объект геометрического преобразования affine2d
.
xform = [ 1 0 0 0 1 0 40 40 1 ]; tform_translate = affine2d(xform);
tform_translate = affine2d with properties: T: [3x3 double] Dimensionality: 2
Если у вас есть обратная мудрая точкой функция отображения, то можно задать пользовательское 2D и 3-D геометрическое преобразование с помощью geometricTransform2d
и объектов geometricTransform3d
соответственно.
Следующий пример задает функцию обратного отображения, которая принимает и возвращает 2D точки в упакованном (x, y) формат. Затем пример создает geometricTransform2d
пользовательский объект геометрического преобразования.
inversefn = @(c) [c(:,1)+c(:,2),c(:,1).^2]
inversefn = function_handle with value:
@(c)[c(:,1)+c(:,2),c(:,1).^2]
tform = geometricTransform2d(inversefn)
tform = geometricTransform2d with properties: InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)] ForwardFcn: [] Dimensionality: 2
Точно так же следующий пример создает geometricTransform3d
пользовательский объект геометрического преобразования использование функции обратного отображения. Пример задает функцию обратного отображения, которая принимает и возвращает 3-D точки в упакованном (x, y, z) формат.
inversefn = @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
inversefn = function_handle with value:
@(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
tform = geometricTransform3d(inversefn)
tform = geometricTransform3d with properties: InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2] ForwardFcn: [] Dimensionality: 3
Можно создать объект геометрического преобразования путем передачи двух наборов пар контрольной точки к функции fitgeotrans
. Функция fitgeotrans
автоматически оценивает преобразование от этих точек и возвращает один из объектов геометрического преобразования.
Различные преобразования требуют переменного числа точек. Например, аффинные преобразования требуют трех неколлинеарных точек в каждом изображении (треугольник), и проективные преобразования требуют четырех точек (четырехугольник).
Этот пример передает два набора контрольных точек к fitgeotrans
, который возвращает объект геометрического преобразования affine2d
.
movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];
tform_cpp = fitgeotrans(movingPoints,fixedPoints,'affine')
tform_cpp = affine2d with properties: T: [3x3 double] Dimensionality: 2
Если у вас есть фиксированное изображение и движущееся изображение, которые немного неправильно выравниваются, то можно использовать функцию imregtform
, чтобы оценить аффинное геометрическое преобразование, которое выравнивает изображения. imregtform
оптимизирует средних квадратичных или Матовые стекла взаимная информационная метрика подобия двух изображений, с помощью регулярного спуска градиента шага или один плюс один эволюционного оптимизатора. Для получения дополнительной информации смотрите, Создают Оптимизатор и Метрику для Основанной на интенсивности Регистрации Изображений.
Если у вас есть фиксированное изображение и движущееся изображение, которые сильно неправильно выравниваются, то можно использовать функцию imregcorr
, чтобы оценить аффинное геометрическое преобразование, которое улучшает выравнивание изображения. Можно совершенствовать получившееся преобразование при помощи оптимизации подобия.
После того, как вы задаете преобразование в объекте геометрического преобразования, выполняете преобразование при помощи функции imwarp
. При вызывании функции задайте изображение, которое будет преобразовано и объект геометрического преобразования.
imwarp
использует геометрическое преобразование, чтобы сопоставить координаты в выходном изображении к соответствующим координатам во входном изображении (обратное отображение). Затем imwarp
использует отображение координаты, чтобы интерполировать пиксельные значения во входе, отображают и вычисляют значение выходного пикселя.
affine2d
| affine3d
| fitgeotrans
| geometricTransform2d
| geometricTransform3d
| imwarp
| projective2d