CV — перспективное (проекционное) преобразование

алгоритм
  • Пожалуйста, обратите внимание на источник оригинального текста при перепечатке, спасибо:blog.CSDN.net/Pentium cm/Ах…

CV — перспективное (проекционное) преобразование

Введение

(1) Концепция трансформации перспективы

  1. Предисловие:

  2. Принцип аффинного преобразования:

    • Ссылаться на:

    • Определение трансформации перспективы (энциклопедия Baidu): Трансформация перспективы (преобразование перспективы) относится к использованиюЦентр перспективы, точка изображения, целевая точкаПри условии, что три точки лежат на одной прямой, в соответствии с законом перспективного вращения опорная поверхность (поверхность перспективы) поворачивается вокруг линии трассировки (оси перспективы) на определенный угол, что разрушает исходный спроецированный луч света и может по-прежнему сохраняют спроецированную геометрическую фигуру на опорной поверхности, изменяя трансформацию.

      Короче говоря, это значит провести плоскость (изображение) черезпроекционная матрицаПроецирование на новую плоскость просмотра (Viewing Plane), также известное как отображение проекции.

      在这里插入图片描述

    • Вывод формулы перспективного преобразования:在这里插入图片描述

      • (xo, yo) — исходная точка координат изображения, записанная в расширенной векторной форме [xo, yo, 1], (X, Y, Z) — целевая точка после преобразования перспективы (в трехмерном пространстве), поскольку изображение находится в двумерном пространстве, поэтому разделите целевую точку на Z, чтобы получить преобразование к2D изображениеТочка на (x', y', z'), где: где:x'= X/Z,y'= Y/Z, z'=1

        В матрице преобразованияa11,a12,a21,a22выражатьЛинейное преобразование, в основном используется для изображений缩放,旋转действоватьa31,a32представляет перевод,a13,a23Представляет перспективное преобразование. Параметр четвертой части a33 равен 1.

      • 仿射变换矩阵Всего параметров 6, поэтому нам нужно только3个坐标对(6 уравнений) можно решить, и透视变换矩阵Всего параметров 8, поэтому необходимо4个坐标对(8 уравнений) решить.

    • Суммировать:

      • известныйПреобразуйте соответствующие точкиФормулу преобразования можно получить. И наоборот, конкретная формула преобразования также может генерировать новое преобразованное изображение.
      • Аффинное преобразованиеСлишкомперспективное преобразованиеособая форма
      • В соответствии с исходным изображением и четырьмя парами координат до и после проецирования можно получить матрицу преобразования перспективы, а затем исходное изображение можно преобразовать в перспективе в соответствии с матрицей преобразования перспективы.

Во-вторых, реализация кода

(1) Описание функции OpenCV

  • Использованная литература:

1. warpPerspective

  1. def warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None):

    • Объяснение: функция преобразования перспективы, которая сохраняет прямые линии неискаженными, но параллельные линии больше не могут быть параллельными
    • Параметры: связанные параметры аналогичны параметрам функции cv2.warpAffine.Разница в следующем: M — матрица преобразования 3 × 3. Первые две строки матрицы используются для аффинного преобразования, а третья строка — для перспективы. трансформация.

2. Пример

  • Образец кода:

    import cv2
    import numpy as np
    ​
    def perspective(image):
        # 原图中的点的坐标 四个
        pts1 = np.float32([[56, 65], [250, 52], [28, 200], [280, 290]])
        # 变换到新图片中,四个点对应的新的坐标 一一对应
        pts2 = np.float32([[0, 0], [300, 0], [0, 250], [300, 250]])
    ​
        # 生成变换矩阵
        M = cv2.getPerspectiveTransform(pts1, pts2)
        # 进行透视变换
        dst = cv2.warpPerspective(image, M, (image.shape[1], image.shape[2]))
    ​
        return dst
    

использованная литература