2-D и 3-D обзор процесса геометрического преобразования

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

Создайте объект геометрического преобразования

Различные типы объектов геометрического преобразования хранят разную информацию о преобразовании.

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

Задайте матрицу преобразования

Если вы знаете матрицу преобразования для геометрического преобразования, которое вы хотите выполнить, то можно создать rigid2d, affine2d, projective2d, rigid3d, или affine3d геометрический объект преобразования непосредственно. Для получения дополнительной информации о создании матрицы преобразования см. «Матричное представление геометрических преобразований».

Следующий пример задает матрицу преобразования для 2-D перевода и создает 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

Задайте пользовательскую функцию отображения точек

Если у вас есть обратная функция точечного отображения, то можно задать пользовательское 2-D и 3-D геометрическое преобразование с помощью geometricTransform2d и geometricTransform3d объекты соответственно.

Следующий пример задает функцию обратного отображения, которая принимает и возвращает 2-D точки в упакованном (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: [function_handle]
        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: [function_handle]
        ForwardFcn: []
    Dimensionality: 3

Вычислите преобразование из пар точек управления

Можно создать объект геометрического преобразования путем передачи двух наборов пар точек управления в fitgeotrans функция. The 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 использует отображение координат, чтобы интерполировать значения пикселей в вход изображении и вычислить значение выхода пикселя.

См. также

| | | | | | | |

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

Подробнее о