- Пожалуйста, обратите внимание на источник оригинального текста при перепечатке, спасибо:blog.CSDN.net/Pentium cm/Ах…
CV — перспективное (проекционное) преобразование
Введение
(1) Концепция трансформации перспективы
-
Предисловие:
-
Принцип аффинного преобразования:
-
Ссылаться на:
- Объяснение принципа:blog.CSDN.net/Xiaowei_Выходите…
- Объяснение принципа с примером кода:blog.CSDN.net/День мертвых_29957…
- Образец кода:woohoo.1 на lab.com/wiki/Python…
-
Определение трансформации перспективы (энциклопедия 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
-
Использованная литература:
- Разница между аффинным преобразованием и перспективным преобразованием:blog.CSDN.net/Leal English sub-flying…
1. warpPerspective
-
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